微信小程序开发之微信支付(三)微信下单

在发起支付之前,后台会生成商户订单,调用统一下单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, 
                                 Mapmap) 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;
    }
}

你可能感兴趣的:(微信小程序)