微信支付回调,内网穿透详细过程
创始人
2024-03-17 23:46:14
0

文章目录

      • 支付回调接口
      • 通过Ngrok进行内网穿透步骤
        • 1. 根据邮箱注册一个账号
        • 2. 获取隧道id
        • 3.下载Ngrok客户端
        • 4. 双击这个 Sunny-Ngrok启动工具.bat 文件
          • 5. 填写你的 隧道id 回车
          • 6.客户端启动成功
        • 7. 所以你的notify_url对应的value需要改为内网穿透的地址为
        • 8.支付成功之后微信平台会发来消息
      • 1. 创建一个控制器定义回调接口 里面有微信返回的xml文件,通过WXPUtil.xmltoMap()转换为Map
      • 2. 支付成功更新订单状态
      • 3. 返回信息给微信支付接口,否则微信将以不同的频率进行请求你。

支付回调接口

支付回调: 用户支付成功之后,微信平台向我们指定接口发送请求传递订单状态数据的过程。

根据 notify_url参数,wechat会给我们指定的value路径,返回相关订单信息。微信会向自己的ip(https://ip:8080/pay/success)地址发送请求

公网ip: 直接连入到互联网中的ip
同一个交换机下面的ip地址可以相互发现
一般我们可以看到公网ip,但是公网看不到我们的ip,我们的项目是运行在本地的计算机上面,微信支付平台没有办法访问我们的内网ip的。
微信怎么访问我们的回调接口?
通过Ngrock为我们进行内网穿透,首次认证关注微信公众号,付费2元

通过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.支付成功之后微信平台会发来消息

需要给微信支付平台进行响应,如果没有响应会一起给你请求,频率会慢慢降低。

@PostMapping("/add/{cids}")public ResultVO add(@PathVariable("cids") List cids,@RequestBody Orders orders){ResultVO resultVO=null;//        测试用的OrderIdtry {Map orderInfo = orderService.addOrder(cids, orders);String orderId=orderInfo.get("orderId");//           订单快照创建成功,申请支付链接HashMap data=new HashMap<>();
//            设置当前订单信息data.put("body",orderInfo.get("productNames")); //商品描述data.put("out_trade_no", orderId.substring(0,30));//使用当前用户订单编号作为当前支付交易的交易编号data.put("fee_type","CNY"); //支付币种data.put("total_fee", orders.getTotalAmount() +"");   //支付金额data.put("trade_type","NATIVE");//交易类型//            必填选项   用于设置支付完成时的回调方法接口data.put("notify_url","/pay/success");WXPay wxPay=new WXPay(new MyPayConfig());Map resp = wxPay.unifiedOrder(data);//            把微信支付平台生成的链接获取到orderInfo.put("payUrl",resp.get("code_url"));resultVO=new ResultVO(ResultStatus.OK,"提交订单成功!",orderInfo);System.out.println(resp);//            code_url -> weixin://wxpay/bizpayurl?pr=Iv5Fsq6zz} catch (SQLException e) {resultVO= new ResultVO(ResultStatus.NO,"下单失败",null);} catch (Exception e) {e.printStackTrace();}return resultVO;}

1. 创建一个控制器定义回调接口 里面有微信返回的xml文件,通过WXPUtil.xmltoMap()转换为Map

package com.qfedu.fmmall.controller;import com.github.wxpay.sdk.WXPayUtil;
import com.qfedu.fmmall.service.OrderService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/pay")
@Api(value = "微信支付接口",tags = "微信支付回调接口测试")
public class PayController {@Autowiredprivate OrderService orderService;@RequestMapping("/success")public String success(HttpServletRequest request) throws Exception {System.out.println("支付成功-------------------------------------------------");// 通过request的输入流接收微信支付平台传递过来的数据ServletInputStream inputStream = request.getInputStream();byte[] bs = new byte[1024];int len = -1;StringBuilder stringBuilder = new StringBuilder();while ((len = inputStream.read(bs)) != -1){stringBuilder.append(new String(bs,0,len));}String s = stringBuilder.toString();//可以看到微信支付平台传递过来的是xml文件System.out.println(s);Map map = WXPayUtil.xmlToMap(s);if (map != null && "success".equalsIgnoreCase(map.get("result_code")) ) {//支付成功// 2.根据微信支付返回的订单编号 修改订单状态为“待发货/已支付”// 3.响应微信支付平台,使用微信不用继续请求//2.String orderid = map.get("out_trade_no");System.out.println("orderid:---------------------"+orderid);int i = orderService.updateOrderStatus(orderid, "2");if(i > 0){//3.Map 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);}}//支付失败return null;}
}

2. 支付成功更新订单状态

3. 返回信息给微信支付接口,否则微信将以不同的频率进行请求你。

                Map 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);

相关内容

热门资讯

广东建工:公司与广州地铁不存在... 证券之星消息,广东建工(002060)12月25日在投资者关系平台上答复投资者关心的问题。 投资者提...
“政策找人”暖民心 服务下沉“... 城乡居民基本医疗保险作为我国覆盖人群最多的基本医疗保险,是基本医疗保障体系中的重要一环。为切实维护人...
我市举办调解工作专题培训 为深入贯彻法治政府建设要求,全面提升基层矛盾纠纷化解能力,12月19日,市司法局牵头举办了全市调解工...
河南将优化涉企法律服务,营造法... 【大河财立方 记者 朱娟 见习记者 岳炎霖】12月26日,大河财立方记者在省政府新闻办召开的《河南省...
新版河南省优化营商环境条例哪些... 【大河财立方 记者 朱娟 见习记者 岳炎霖】12月26日,河南省政府新闻办召开《河南省优化营商环境条...
原创 中... 12月25日,家纺企业富安娜披露了关于中信证券固定收益类理财产品逾期兑付的进展公告。公告显示,公司近...
封关临近!海南自贸港政策红利释... 交易所数据显示,2025年12月26日09时47分,京粮控股当前价格为8.92元,涨幅为9.99%,...
字节跳动通报:120名员工被辞... 12月25日,字节跳动披露2025年三季度内部违规案例的处理情况。通报显示,三季度共有120名员工因...
上亿理财难收回,家纺龙头富安娜... 12月25日晚,家纺龙头企业深圳市富安娜家居用品股份有限公司(以下简称富安娜,002327.SZ)发...
华院计算取得法律要素图谱辅助类... 国家知识产权局信息显示,华院计算技术(上海)股份有限公司取得一项名为“一种法律要素图谱辅助类案推荐方...