微信支付回调,内网穿透详细过程
public class MyPayConfig implements WXPayConfig { @Override public String getAppID() { return "wx632c8f211f8122c6"; } @Override public String getMchID() { return "1497984412"; } @Override public String getKey() { return "sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC"; } @Override public InputStream getCertStream() { return null; } @Override public int getHttpConnectTimeoutMs() { return 0; } @Override public int getHttpReadTimeoutMs() { return 0; } }
支付回调接口
通过Ngrok进行内网穿透步骤
1. 根据邮箱注册一个账号
2. 获取隧道id
获取隧道id: 182810384749
3.下载Ngrok客户端
4. 双击这个 Sunny-Ngrok启动工具.bat 文件
5. 填写你的 隧道id 回车
6.客户端启动成功
相当于访问url: http://monkey.free.idcfengye.com 就是访问 我们的 localhost:8080
7. 所以你的notify_url对应的value需要改为内网穿透的地址为
http://monkey.free.idcfengye.com/pay/success
8.支付成功之后微信平台会发来消息
2. 支付成功更新订单状态
Map<String, String> map1 = new HashMap<>(16); map.put("result_code","success"); map.put("return_msg","OK"); map.put("appid",map.get("appid")); map.put("return_code","success"); return WXPayUtil.mapToXml(map1);
前端进行轮询查询数据库订单信息
间隔1秒请求后端,查询订单状态。
//前端轮询查询数据是否付款成功 //mounted的里面的方法不可以直接调用methods里面的isPay(); var oid = this.orderInfo.orderId; setInterval(function(){ console.log("------轮询调用-----"); var url = baseUrl + "order/queryOrderByid?oid=" + oid; axios({ url:url, method:"get", headers:{ token:getCookieValue("token") } }).then(res =>{ if(res.data.data == "1"){ //订单没有支付 }else if(res.data.data == "2"){ $("#message").html("<label style=font-size:30px;color:green> 订单支付成功! </label>"); return; } }); },1000);
1. 整个前端页面信息
通过WebSocket进行消息的推送,减少前端请求的次数,直接推送一次就行 推荐使用
1 WebSocketConfig
package com.qfedu.fmmall.websocket;/* ** *@author SmallMonkey *@Date 2022/12/10 17:20 * * **/ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter getServerEndpointExporter(){ return new ServerEndpointExporter(); } }
2. WebSocketServer
package com.qfedu.fmmall.websocket;/* ** *@author SmallMonkey *@Date 2022/12/10 17:31 * * **/ import org.springframework.stereotype.Component; import javax.websocket.OnClose; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; @Component @ServerEndpoint("/webSocket/{oid}") public class WebSocketServer { private static ConcurrentHashMap<String,Session> sessionConcurrentHashMap = new ConcurrentHashMap<>(); /*前端发送请求建立webSocket连接,就会执行@OnOpen方法 * @param oid @PathParam 用来获取参数 * * */ @OnOpen public void open(@PathParam("oid") String orderId, Session session){ System.out.println("连接成功---------"); sessionConcurrentHashMap.put(orderId,session); } /*前端关闭页面和断开连接关闭webSocket时都会执行*/ @OnClose public void close(@PathParam("oid") String orderId,Session session){ sessionConcurrentHashMap.remove(orderId); } public static void sendMsg(String orderId,String msg){ try { Session session = sessionConcurrentHashMap.get(orderId); session.getBasicRemote().sendText(msg); } catch (Exception e) { e.printStackTrace(); } } }
3. 支付成功,修改订单状态后进行推送
4 前端修改之后的code
上一篇:
微信小程序ssm电影院售票系统app
下一篇:
学生作业管理系统(IDEA项目下载即用)