爬出了这个坑 留点记录防止以后重蹈覆辙
流程
用户选择产品 购买->
我生成订单记录 把订单号发给微信->
微信即刻返回微信的支付订单号->
我拿着这个微信的支付订单号 返回前端页面 然后调用一段js->
用户手机就弹出支付框->用户支付完成后->
微信自动访问我在网站上留给微信的回调地址->
如果我不理微信,他就会一直发 一直发,直到我告诉他我收到了才罢休
微信支付的文档其实也还好,完整了 看着文档来 一步一步就没事了
注意点生成sign 大小写 大小写 大小写
支付的sign参数
后端
chooseWXPayMap.put("appId", info.getAppId());
chooseWXPayMap.put("nonceStr", info.getNonceStr());
chooseWXPayMap.put("package", info.getPackageValue());
chooseWXPayMap.put("signType", info.getSignType());
chooseWXPayMap.put("timeStamp", info.getTimeStamp());
前端js
wx.chooseWXPay({
timestamp: timeStamp,
nonceStr: obj.nonceStr, // 支付签名随机串,不长于 32 位
package: obj.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
signType: obj.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: obj.paySign, // 支付签名
success: function (res) {
CommonPerson.Base.showTips.FullScreenShow("支付成功");
setTimeout(function(){
location.reload();
}, 1000);
}
});
建议先使用 微信的这个getBrandWCPayRequest方法
chooseWXPay错了就只会告诉我 chooseWXPay:fail 不会说原因,getBrandWCPayRequest相对详细一点
config的 signature参数
后端
configMap.put("jsapi_ticket", jsapi_ticket);
configMap.put("noncestr", info.getNonceStr());
configMap.put("timestamp", info.getTimeStamp());
configMap.put("url", topUrl);
前端
wx.config({
debug: false, // 开启调试模式
appId: obj.appId, // 必填,公众号的唯一标识
timestamp:timeStamp , // 必填,生成签名的时间戳
nonceStr: obj.nonceStr, // 必填,生成签名的随机串
signature: obj.configSign,// 必填,签名,见附录1
jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表
});