700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用 springboot 轻松实现网站微信扫码支付以及支付回调逻辑处理(javaJDK实现)

使用 springboot 轻松实现网站微信扫码支付以及支付回调逻辑处理(javaJDK实现)

时间:2023-03-14 01:45:49

相关推荐

使用 springboot 轻松实现网站微信扫码支付以及支付回调逻辑处理(javaJDK实现)

目录

准备工作

项目部分导入

时序图理解支付流程

支付流程

支付请求

支付完成回调

前端收尾工作

准备工作

使用扫码微信支付需要在微信支付商户平台申请native支付,如图

以及基本的商户号等支付基本信息

项目部分导入

将以下项目模块导入,包含JSAPI支付模块 ,可用于小程序支付

github

GitHub - Durancer/wxpay-based-on-javaSDK: 基于微信支付javaSDK的接口层封装(技术栈:springboot),调用接口直接返回 JSAPI 或 扫码 调起支付所需参数。适用于 微信小程序 等 JSAPI 支付场景。使用简单,封装签名过程,不用理解太多的逻辑,直接使用。

gitee

Wxpay-based-on-javaSDK: 基于微信支付javaSDK的接口层封装(技术栈:springboot),调用接口直接返回 JSAPI 调起支付所需参数。适用于 微信小程序 等 JSAPI 支付场景。使用简单,封装签名过程,不用理解太多的逻辑,直接使用。

项目中还包括 JSAPI 调起的微信支付接口提供使用

时序图理解支付流程

为了能够更好的理解本套方案的支付流程和支付逻辑,我们先写阅读一遍时许图

支付流程

支付请求

我们需要向服务器发送请求拿到二维码的链接

请求参数封装

//根据官方文档 必填值封装数据Map<String, String> map = new HashMap<>();map.put("body", "产品信息");// 传入订单号String trade = UUID.randomUUID().toString().replaceAll("-", "");map.put("out_trade_no", trade);map.put("total_fee", "1");map.put("spbill_create_ip", ip);map.put("notify_url", "回调地址");map.put("trade_type", "NATIVE");// 创建pay表数据,检测状态PayDTO payDTO = new PayDTO();payDTO.setOrderId(orderId);payDTO.setTrade(trade);payService.save(payDTO);

在本项目中是调用/pay/qrcode(返回native扫码支付相关参数)

请求成功后将返回code_url (就是转化成付款码的链接)

能够收到这个信息说明已经请求成功了

此时注意,根据时序图的流程,我们已经根据生成的 trade 在数据库创建了一条数据用于检测订单是否支付

在前端接收到响应数据之后,使用qrcode工具转化成二维码即可进行支付,从前端拿到二维码数据时,即开始轮询刚才在数据库创建的数据状态。

支付完成回调

由于扫码支付我们不能直接编写回调函数(因为无法判断用户何时支付订单) ,因此我们需要通过微信服务器通知来进行一个回调的逻辑处理,同时,微信服务器也会告知我们订单相关的数据。包括trade值

用户付款后,微信服务器会发请求到此接口,回调地址为刚才发送请求的notify_url

回调接口代码参考

@RequestMapping("qrcode/success")public String qrcodeSuccess(HttpServletRequest request) throws Exception {// 获取微信带来的订单信息String xml = ConvertUtils.convertToString(request.getInputStream());Map<String, String> orderMap = WXPayUtil.xmlToMap(xml);System.out.println("orderMap = " + orderMap);String out_trade_no = orderMap.get("out_trade_no");// 修改和查询支付状态QueryWrapper<PayDTO> wrapper = new QueryWrapper<>();wrapper.eq("trade", out_trade_no);PayDTO payDTO = new PayDTO();payDTO.setStatus("success");payService.update(payDTO, wrapper);PayDTO pay = payService.getOne(wrapper);// 修改订单支付状态Order order = new Order();order.setId(pay.getOrderId());order.setStatus("待发货");orderService.updateById(order);// 响应流程,需要获取请求参数return_code,如果为SUCCESS,则封装请求Map<String, String> map = new HashMap<>();map.put("return_code", "SUCCESS");map.put("return_msg", "OK");return WXPayUtil.mapToXml(map);}

前端收尾工作

执行完回调接口的内容后,数据库那条订单信息 的支付状态已经变为了已支付,当前端轮询至订单已支付,结束轮询,发送请求删除该条支付检测数据,避免造成垃圾数据残留

最后完成支付。

这些操作在开源项目里都做了封装,可以直接clone导入项目

github

GitHub - Durancer/wxpay-based-on-javaSDK: 基于微信支付javaSDK的接口层封装(技术栈:springboot),调用接口直接返回 JSAPI 或 扫码 调起支付所需参数。适用于 微信小程序 等 JSAPI 支付场景。使用简单,封装签名过程,不用理解太多的逻辑,直接使用。

gitee

Wxpay-based-on-javaSDK: 基于微信支付javaSDK的接口层封装(技术栈:springboot),调用接口直接返回 JSAPI 调起支付所需参数。适用于 微信小程序 等 JSAPI 支付场景。使用简单,封装签名过程,不用理解太多的逻辑,直接使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。