• 千峰商城-springboot项目搭建-84-订单提交及支付-显示支付结果(websocket代码实现)...


    1.引入依赖
    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-websocketartifactId>
    4. <version>2.3.12.RELEASEversion>
    5. dependency>

    2.添加websocket服务节点配置(java配置方式)

     

    WebSocketConfig :
    
    1. @Configuration
    2. public class WebSocketConfig {
    3. @Bean
    4. public ServerEndpointExporter getServerEndpointExporter(){
    5. return new ServerEndpointExporter();
    6. }
    7. }

    3.创建websocket服务器

    WebSocketServer :
    
    
    
    @Component@ServerEndpoint("/webSocket/{oid}")public class WebSocketServer { private static ConcurrentHashMap sessionMap = new ConcurrentHashMap<>(); //前端发送请求建立webSocket连接,就会执行OnOpen方法 @OnOpen public void open(@PathParam("oid") String orderId, Session session){ sessionMap.put(orderId,session); } //前端关闭页面或者主动关闭webSocket连接都会执行close @OnClose public void close(@PathParam("oid") String orderId){ sessionMap.remove(orderId); } public static void sendMsg(String orderId,String msg){ try { Session session = sessionMap.get(orderId); session.getBasicRemote().sendText(msg); }catch (Exception e){ e.printStackTrace(); } }}
    
     
    

     PayController:

    1. @RestController
    2. @RequestMapping("/pay")
    3. public class PayController {
    4. @Autowired
    5. private OrderService orderService;
    6. //回调接口:当用户支付成功之后,微信支付平台就会请求这个接口,将支付状态的数据传递过来
    7. //1.接收微信支付平台传递的数据(传递的数据格式为request的输入流)
    8. @RequestMapping("/callback")
    9. public String success(HttpServletRequest request) throws Exception {
    10. System.out.println("------------callback");
    11. ServletInputStream is = request.getInputStream();
    12. byte[] bs = new byte[1024];
    13. int len = -1;
    14. StringBuilder builder = new StringBuilder();
    15. while ( (len = is.read(bs)) != -1){
    16. builder.append(new String(bs,0,len));
    17. }
    18. String s = builder.toString();
    19. //使用帮助类将xml接口的字符串转换成map
    20. Map map = WXPayUtil.xmlToMap(s);
    21. if (map != null && "success".equalsIgnoreCase( map.get("result_code")) ){
    22. //支付成功
    23. //2.修改订单状态为“待发货/已支付”
    24. String orderId = map.get("out_trade_no");
    25. int i = orderService.updateOrderStatus(orderId, "2");
    26. System.out.println("----orderId:"+orderId);
    27. //3.通过websocket连接向前端推送消息
    28. // Session session = WebSocketServer.sessionMap.get(orderId);
    29. // session.getBasicRemote().sendText("1");
    30. WebSocketServer.sendMsg(orderId,"1");
    31. //4.响应微信支付平台
    32. if (i>0){
    33. HashMap resp = new HashMap<>();
    34. resp.put("return_code","success");
    35. resp.put("return_msg","OK");
    36. resp.put("app_id",map.get("appid"));
    37. resp.put("result_code","success");
    38. String s1 = WXPayUtil.mapToXml(resp);
    39. return s1;
    40. }else {
    41. return null;
    42. }
    43. }else {
    44. //支付失败
    45. return null;
    46. }
    47. }
    48. }
  • 相关阅读:
    springboot简单集成Security配置
    Java设计模式之适配器模式
    1110 区块反转 分数 25
    微服务学习day02 -- nacos配置管理 -- Feign远程调用 -- Gateway服务网关
    2024/4/24 C++day2
    一文带你了解IPsec协议
    Excel VSTO开发2 -建立Excel VSTO项目
    WorkManager学习一
    共用一个一维空间的双向栈
    Axios传值的几种方式
  • 原文地址:https://blog.csdn.net/LYly_B/article/details/126088949