微信支付回调,内网穿透详细过程
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项目下载即用)
