SpringBoot实现小程序微信支付(超级详细)
开发环境
-
java1.8 maven 3.3.9 springboot 2.1.3.RELEASE
第一步:开通JSAPI支付
第二步:SpringBoot技术对接
1、小程序内调用登录接口,获取到用户的openid,api参见公共api【】
2、商户server调用支付统一下单,api参见公共api【】
3、商户server调用再次签名,api参见公共api【】
4、商户server接收支付通知,api参见公共api【】
5、商户server查询支付结果,api参见公共api【】
注意上面有两次签名
1.配置文件类
3.小程序发起请求 组装发起统一下单所需要的参数
1 @PostMapping("/recharge/wx")
2 public Map recharge(HttpServletRequest request, @RequestParam(value = "vipType",required = true) VipType vipType) throws Exception {
3 // 本案例是充值会员 用的时候根据实际情况改成自己的需求
4 Integer loginDealerId = MySecurityUtil.getLoginDealerId();
5 // 获取ip地址 发起统一下单必要的参数
6 String ipAddress = HttpUtil.getIpAddress(request);
7 // 生成预付订单 存入数据库 回调成功在对订单状态进行修改
8 PrepaidOrder prepaidOrder = payService.recharge(loginDealerId, vipType, ipAddress);
9 // 组装统一下单需要的数据map
10 Map<String, String> stringStringMap = prepaidOrder.toWxPayParameters();
11 // 调起统一支付
12 Map<String, String> payParameters =WxUtil.unifiedOrder(stringStringMap);
13 return payParameters;
14 }
生成预付订单代码(根据实际需求生成,此处只是我这的需求,仅供参考)
72 } 73 }
在实体类做最后的参数封装
4.签名类型的枚举类 public enum SignType { MD5, HMACSHA256 }
5.获取用户IP工具类
1 public static String getIpAddress(HttpServletRequest request) {
2 String ip = request.getHeader("x-forwarded-for");
3 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
4 ip = request.getHeader("Proxy-Client-IP");
5 }
6 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
7 ip = request.getHeader("WL-Proxy-Client-IP");
8 }
9 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
10 ip = request.getHeader("HTTP_CLIENT_IP");
11 }
12 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
13 ip = request.getHeader("HTTP_X_FORWARDED_FOR");
14 }
15 if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
16 ip = request.getRemoteAddr();
17 }
18 return ip;
19 }
本人花费2个月时间,整理了一套JAVA开发技术资料,内容涵盖java基础,分布式、微服务等主流技术资料,包含大厂面经,学习笔记、源码讲义、项目实战、讲解视频。
领取更多学习资料
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
微信小程序之支付15分钟倒计时
