我们从头开始:
1.首先导入依赖文件
<!--wx-pay-sdk 目前我用的版本是 3.8.0-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-pay-spring-boot-starter</artifactId>
<version>${wx.java.version}</version>
</dependency>
2.Controller层
@PostMapping("/submitTradeRecord")
@ApiOperation(value = "提交订单")
public BeanResult<ReturnWxMpPayVO> submitTradeRecord(@RequestBody @Valid SubmitMemberVO vo) {
ReturnWxMpPayVO result = userMemberPackageService.setUserMemberPackageMapper(vo.getConsumerUserId(),vo.getMid());
return BeanResult.success(result);
}
3.serviceImpl层
//上面大家可以写自己的代码逻辑
//调用微信统一下单接口
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = WxPayUnifiedOrderRequest.newBuilder()
//用户openid
.openid(userInfoMapper.selectById(consumerUserId).getOpenid())
//自己设置规则的订单号
.outTradeNo(info.getTradeNo())
//支付金额(微信支付要用BigDecimal格式,这里用一个方法)
.totalFee(WxPayUnifiedOrderRequest.yuanToFen
(info.getRealAmount().toString()))
//订单描述(这里的名称最好自己设置)
.body(info.getGoodsDescription())
//微信支付方式
.tradeType(WxPayConstants.TradeType.JSAPI)
//用户ip地址
.spbillCreateIp(InetAddress.getLoopbackAddress().getHostAddress())
//通知回调地址(这里自己需要手写的)
.notifyUrl(customizeProperties.getWxPayNotifyUrl())
.build();
log.info("微信统一下单请求参数组装完成: {}", wxPayUnifiedOrderRequest);
WxPayUnifiedOrderResult wxPayUnifiedOrderResult;
try {
wxPayUnifiedOrderResult = wxPayService.unifiedOrder(wxPayUnifiedOrderRequest);
log.info("微信统一下单接口调用完成: {}", wxPayUnifiedOrderResult);
} catch (Exception e) {
log.error("微信统一下单接口调用失败: {}", e.getMessage(), e);
throw CustomizeServiceException.throwMsgException("微信统一下单接口调用失败");
}
//计算签名 给前端使用
Map<String, String> paySignInfo = new HashMap<>();
String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
String nonceStr = String.valueOf(System.currentTimeMillis());
paySignInfo.put("appId", customizeProperties.getWxPayAppId());
paySignInfo.put("nonceStr", nonceStr);
paySignInfo.put("timeStamp", timeStamp);
paySignInfo.put("signType", "MD5");
paySignInfo.put("package", "prepay_id=" + wxPayUnifiedOrderResult.getPrepayId());
String paySign = SignUtils.createSign(paySignInfo, WxPayConstants.SignType.MD5, customizeProperties.getWxPayMchKey(), new String[0]);
//组装返回数据
vo.setAppId(customizeProperties.getWxPayAppId());
vo.setTimeStamp(timeStamp);
vo.setNonceStr(nonceStr);
vo.setPrepayId(wxPayUnifiedOrderResult.getPrepayId());
vo.setSignType(WxPayConstants.SignType.MD5);
vo.setPaySign(paySign);
//下面大家可以写自己的代码逻辑
return vo;
4.回调地址方法
接下来的订单成功修改订单状态的逻辑 ,关闭订单的逻辑 我就不贴出来了 就靠你们自己写辣!