以下为二次调用时的代码:
/** * 根据付款单号查询微信付款参数 * @param relationId 交易编号 * @param type 支付类型 * @return payment * * @author yclimb * @date 2018/6/28 */ public Map<String, String> queryChooseWXPayMapByRelationId(Integer relationId, String type) throws Exception { // 微信支付对象 WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance()); // 1.查询付款对象 Payment payment = this.queryPaymentByRelationId(relationId, type); // 2.根据微信统一下单接口返回数据组装微信支付参数,返回结果 return wxPay.chooseWXPayMap(payment.getPrepayId(), payment.getNonceStr()); }此时我们已经调用微信统一下单接口成功,并为我们返回了需要的参数,下一步需要组装为微信支付调起时前端需要的参数。
生成支付签名下面为组装支付签名的代码:
/** * 作用:生成微信支付所需参数,微信支付二次签名<br> * 场景:根据微信统一下单接口返回的 prepay_id 生成微信支付所需的参数 * 接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 * * @param prepay_id 预支付id * @param nonce_str 随机字符串 * @return 支付方法调用所需参数map * @throws Exception e */ public Map<String, String> chooseWXPayMap(String prepay_id, String nonce_str) throws Exception { // 支付方法调用所需参数map Map<String, String> chooseWXPayMap = new HashMap<>(); chooseWXPayMap.put("appId", config.getAppID()); chooseWXPayMap.put("timeStamp", String.valueOf(WXPayUtil.getCurrentTimestamp())); chooseWXPayMap.put("nonceStr", nonce_str); chooseWXPayMap.put("package", "prepay_id=" + prepay_id); chooseWXPayMap.put("signType", WXPayConstants.MD5); WXPayUtil.getLogger().info("wxPay.chooseWXPayMap:" + chooseWXPayMap.toString()); // 生成支付签名 String paySign = WXPayUtil.generateSignature(chooseWXPayMap, config.getKey()); chooseWXPayMap.put("paySign", paySign); WXPayUtil.getLogger().info("wxPay.paySign:" + paySign); return chooseWXPayMap; }组装好需要的参数以后,就可以调起微信支付窗口了,如果是微信公众号支付,需要使用以下的方式调起微信支付:
function weixinConfig(appid, timestamp, noncestr, signature) { wx.config({ debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 // debug : true, appId :appid, // 必填,公众号的唯一标识 timestamp : timestamp, // 必填,生成签名的时间戳 nonceStr : noncestr, // 必填,生成签名的随机串 signature : signature,// 必填,签名,见附录1 jsApiList: [ 'checkJsApi', 'chooseWXPay' // 必须增加此参数,用户微信支付功能 ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); } wx.chooseWXPay({ appId: appId, timestamp: timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 nonceStr: nonceStr, // 支付签名随机串,不长于 32 位 package: package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*) signType: signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' paySign: paySign, // 支付签名 success: function (res) { // 支付成功后的回调函数 alert('支付成功!'); }, cancel: function (res) { // 支付取消 }, fail: function (res) { // 支付失败 alert("支付失败!"); } });PS:小程序调用方法类似,参数一致。
结语以上就是微信支付统一下单接口的调用方式了,具体的源码可以参考作者github,最好在开发之前先通读一遍微信官方文档,此时再使用作者源码开发事半功倍,更易理解。
预告:下一篇文章,作者将讲 支付结果通知,敬请期待!!!
如果想要提前一览源码的小伙伴,可以先看看我的 github,地址如下:
https://github.com/YClimb/wxpay-sdk/blob/master/README.md
加作者私人微信,作者微信号如下 yclimb,标明 微信支付 可拉入微信支付讨论群与小伙伴一起探讨哦,一定要标明 微信支付 哦~
到此本文就结束了,关注公众号查看更多推送!!!