Java中换取微信支付唯一订单号(用于换取支付窗口)
/*** 微信小程序支付*/@PostMapping(value = "/xcxPay")@ResponseBodypublic Map<String,Object> miniAppPay(@RequestBody byte[] req) {HashMap<String, Object> objectObjectMap = new HashMap<>();JSONObject json = JSONObject.parseObject(new String(req, Charset.forName("UTF-8")));System.out.println("请求参数"+json);String ip = "127.0.0.1";String money = null;String remark = null;Map<String, String> params = UnifiedOrderModel.builder().appid(小程序appid).mch_id(微信商家商户号).nonce_str(WxPayKit.generateStr()).body(remark).attach(remark).out_trade_no(订单号).total_fee(金额).spbill_create_ip(ip).notify_url(回调地址).trade_type(TradeType.JSAPI.getTradeType()).openid(小程序openid).build().createSign(微信官方商户密钥, SignType.HMACSHA256);String xmlResult = WxPayApi.pushOrder(false, params);System.out.println(xmlResult);Map<String, String> result = WxPayKit.xmlToMap(xmlResult);String returnCode = result.get("return_code");String returnMsg = result.get("return_msg");String resultCode = result.get("result_code");// 以下字段在 return_code 和 result_code 都为 SUCCESS 的时候有返回String prepayId = result.get("prepay_id");Map<String, String> packageParams = WxPayKit.miniAppPrepayIdCreateSign(wxspAppid, prepayId,wxspSecret, SignType.HMACSHA256);String jsonStr = JSON.toJSONString(packageParams);System.out.println("小程序支付的参数:" + jsonStr);objectObjectMap.put("status","0000");objectObjectMap.put("payMess",packageParams);return objectObjectMap;}
支付结果异步通知接口
/*** 异步通知* 这里面可以写判断支付成功之后的及具体业务需求*/@RequestMapping(value = "/payNotify", method = {RequestMethod.POST, RequestMethod.GET})@ResponseBodypublic String payNotify(HttpServletRequest request) {System.out.println("支付通知=1" + request);String xmlMsg = HttpKit.readData(request);System.out.println("支付通知=" + xmlMsg);Map<String, String> params = WxPayKit.xmlToMap(xmlMsg);String returnCode = params.get("return_code");//通过支付订单号处理业务String order = params.get("out_trade_no");System.out.println("支付订单号:"+order);// 注意重复通知的情况,同一订单号可能收到多次通知,请注意一定先判断订单状态
// 注意此处签名方式需与统一下单的签名类型一致if (WxPayKit.verifyNotify(params, wxspSecret, SignType.HMACSHA256)) {if (WxPayKit.codeIsOk(returnCode)) {// 更新订单信息//支付成功// 发送通知等Map<String, String> xml = new HashMap<String, String>(2);xml.put("return_code", "SUCCESS");xml.put("return_msg", "OK");return WxPayKit.toXml(xml);}}return "success";}
前端唤起支付窗口
pay(e){var that = this;wx.requestPayment({// "appId":e.appId, //公众号ID,由商户传入 "timeStamp":e.timeStamp, //时间戳,自1970年以来的秒数 "nonceStr":e.nonceStr, //随机串 "package":e.package, "signType":e.signType, //微信签名方式: "paySign":e.paySign, //微信签名 success (res) { //支付成功},fail (res) { },})},