在发起支付之前,后台会生成商户订单,调用统一下单API,得到预支付信息。
我是使用的是这个SDK
com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; //统一下单返回结果类
com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest //统一下单所需参数类
/** * 发起与支付 * 调用统一下单接口,获取“预支付交易会话标识” */@PostMapping("/unifiedOrder")public ModelAndView unifiedOrder(@RequestBody String orderId, @RequestBody HttpServletRequest request, MapString, Objectmap) throws WxPayException { OrderDTO orderDTO = orderService.findOne(orderId); //OrderDTO为自定义的订单信息类 WxPayUnifiedOrderRequest orderRequest = payService.create(orderDTO, request); WxPayUnifiedOrderResult orderResult = wxPayService.unifiedOrder(orderRequest); //调用统一下单接口 map.put("orderRequest", orderRequest); map.put("orderResult", orderResult); map.put("timeStamp", payUtil.getTimeStamp()); map.put("nonceStr", payUtil.getNonceStr()); return new ModelAndView("pay/unifiedOrder", map); //用到了参数动态注入,将参数传给wx.requestPayment{},之后会讲}public WxPayUnifiedOrderRequest create(OrderDTO orderDTO, HttpServletRequest request) { try { WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest(); //商户订单类 orderRequest.setBody("微信支付"); orderRequest.setOpenid(orderDTO.getBuyerOpenId()); //元转成分 orderRequest.setTotalFee(PriceUtil.yuanToFee(orderDTO.getOrderAmount())); //注意:传入的金额参数单位为分 //outTradeNo 订单号 orderRequest.setOutTradeNo(orderDTO.getOrderId()); //tradeType 支付方式 orderRequest.setTradeType(PayTypeEnum.WX_PAY.getMsg()); //用户IP地址 orderRequest.setSpbillCreateIp(IpUtil.getIP(request)); return wxPayService.createOrder(orderRequest); } catch (Exception e) { log.error("【微信支付】支付失败 订单号={} 原因={}", orderDTO.getOrderId(), e.getMessage()); e.printStackTrace(); return null; }}













