下面是统一下单设置参数的代码
public WxPayUnifiedOrderResult createOrder(YsUser ysUser, YsOrder order, String attach, HttpServletRequest request) throws WxPayException {
LocalDateTime now = LocalDateTime.now();
WxPayUnifiedOrderRequest payRequest = new WxPayUnifiedOrderRequest();
payRequest.setDeviceInfo("WEB");
payRequest.setBody("壹送便利店微信商城订单");
payRequest.setOutTradeNo(order.getOrderId());
payRequest.setTotalFee(BaseWxPayRequest.yuanToFen("" + order.getPayPrice()));
payRequest.setAttach(attach);
payRequest.setSpbillCreateIp(IPUtils.getIpAddress(request));
payRequest.setTimeStart("" + now.getYear() + String.format("%02d", now.getMonth().getValue()) +
String.format("%02d",now.getDayOfMonth()) + String.format("%02d", now.getHour()) +
String.format("%02d", now.getMinute()) + String.format("%02d", now.getSecond()));
LocalDateTime expireTime = now.plusMinutes(10);
payRequest.setTimeExpire("" + expireTime.getYear() + String.format("%02d", expireTime.getMonth().getValue()) +
String.format("%02d",expireTime.getDayOfMonth()) + String.format("%02d", expireTime.getHour()) +
String.format("%02d", expireTime.getMinute()) + String.format("%02d", expireTime.getSecond()));
payRequest.setNotifyUrl("http://" + Constants.DOMAIN + "/payments/weixin/notify/");
payRequest.setTradeType(WxPayConstants.TradeType.JSAPI);
payRequest.setOpenid(ysUser.getOpenid());
return wxPayService.unifiedOrder(payRequest);
}
下面是回调接口的代码
@PostMapping("/weixin/notify")
public WxPayNotifyResponse wepayNotify(@RequestBody String xmlData) throws WxPayException {
this.logger.info("开始回调了嘛");
WxPayOrderNotifyResult payResult = wxPayService.parseOrderNotifyResult(xmlData);
if (payResult != null && !StringUtils.isEmpty(payResult.getOutTradeNo())) {
//订单状态确认
this.logger.info("开始处理结果了嘛");
WxPayOrderQueryResult confirmResult = wxPayService.queryOrder(null, payResult.getOutTradeNo());
if (!StringUtils.isEmpty(confirmResult.getOutTradeNo()) &&
confirmResult.getOutTradeNo().equals(payResult.getOutTradeNo())) {
YsOrder order = orderService.findByOrderId(payResult.getOutTradeNo());
this.logger.info("找到订单了嘛");
order.setPayType(Constants.ONLINE_PAY);
order.setPayStatus(Constants.PAY_ORDER);
order.setPayTime(new Date());
orderService.pay(order);
ylyService.print(order);
}
}
WxPayNotifyResponse response = new WxPayNotifyResponse();
response.setReturnCode(Constants.WEPAY_NOTIFY_SUCCESS);
return response;
}
下面是后台日志输出的回调结果