/*** 手机端调取APP支付 返回调起微信app所需的参数*/@GetMapping("/mobilePayment")public APIResult mobilePayment(@RequestParam(value = "orderId") String orderId, HttpServletRequest request, HttpServletResponse response) throwsException {
APIResult result =productService.findCourseOrderById(orderId);if(result.getSuccess()) {
CourseOrderVo courseOrderVo=result.getData();//查看是否作废
Date orderInvalidDate =courseOrderVo.getOrderInvalidDate();if (new Date().getTime() >orderInvalidDate.getTime()) {//已过期
CourseOrderDTO courseOrderDTO = newCourseOrderDTO();
courseOrderDTO.setId(courseOrderVo.getId());
courseOrderDTO.setOrderStatus(OrderStatusEnum.DISCARD);
productService.updateCourseOrder(courseOrderDTO);return APIResult.error(new BaseCode(APICode._C_OPERATE_ERROR, "订单已过期,请重新下单"));
}//查看是否已经在微信平台下单
APIResult wxPayReqVoAPIResult =productService.findWxPayReqByOrderId(courseOrderVo.getId());if(wxPayReqVoAPIResult.getSuccess()) {returnAPIResult.ok(wxPayReqVoAPIResult.getData());
}//1、调取统一下单方法 获取参数
String orderStr = unifiedOrder(courseOrderVo, "APP", "", request, response);//商户服务器生成支付订单,先调用统一下单API(详见第7节)生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付。以下是调起微信支付的关键代码:
if (orderStr.indexOf("SUCCESS") != -1) {//2、xml转map (WXPayUtil工具类)
Map unifiedOrderMap =WXPayUtil.xmlToMap(orderStr);
System.out.println(unifiedOrderMap.toString());
String prepayId= unifiedOrderMap.get("prepay_id");if (!StringUtils.isEmpty(prepayId)) {
String uuid=UUIDUtil.getUUID();//本来生成的时间戳是13位,但是ios必须是10位,所以截取了一下
String timeStamp = String.valueOf(System.currentTimeMillis()).substring(0, 10);
SortedMap parameterMap2 = new TreeMap();
parameterMap2.put("appid", wxpayConfig.getAppId());
parameterMap2.put("partnerid", wxpayConfig.getMchId());
parameterMap2.put("prepayid", prepayId);
parameterMap2.put("package", "Sign=WXPay");
parameterMap2.put("noncestr", uuid);
parameterMap2.put("timestamp", timeStamp);
String sign=WXPayUtil.createSign(parameterMap2, wxpayConfig.getKey());
parameterMap2.put("sign", sign);
WxPayReqDTO wxPayReqDTO= newWxPayReqDTO();
wxPayReqDTO.setCourseOrderId(courseOrderVo.getId());
wxPayReqDTO.setAppId(wxpayConfig.getAppId());
wxPayReqDTO.setPartnerId(wxpayConfig.getMchId());
wxPayReqDTO.setPrepayId(prepayId);
wxPayReqDTO.setNonceStr(uuid);
wxPayReqDTO.setTimeStamp(timeStamp);
wxPayReqDTO.setPackageValue("Sign=WXPay");
wxPayReqDTO.setPayType("APP");
wxPayReqDTO.setSign(sign);
String param=JSON.toJSONString(parameterMap2);
System.out.println("调起微信APP所需的参数:" +param);returnproductService.createWxPayReq(wxPayReqDTO);
}
}return APIResult.error(new BaseCode(APICode._C_OPERATE_ERROR, "支付失败"));
}return APIResult.error(new BaseCode(APICode._C_NOT_EXISTS, "订单信息不存在"));
}