微信支付如何实现内置浏览器的H5页面支付
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微信⽀付如何实现内置浏览器的H5页⾯⽀付
因为项⽬需要,要在H5页⾯中加⼊微信⽀付,所以便去尝试,只想说真的很坑,尤其调试起来不⽅便
这是微信的官⽅API⽂档
微信⽀付的准备⼯作
申请公众号,申请开通⽀付,这个很简单,⾃⾏百度
申请好之后在微信公众平台页⾯的“微信⽀付”页⾯中的“开发配置”Tab上配置“⽀付授权⽬录”,“测试授权⽬录”,“测试⽩名单”在微信公众平台页⾯的“开发者中⼼”中找到“AppID(应⽤ID)”和“AppSecret(应⽤密钥)”
在商户平台中找到微信⽀付分配的商户号,以及⾃⼰配置⼀个商户⽀付密钥
具体步骤
⾸先通过微信⽀付的api 获得⽀付⽤的prepay_id,这⾥需要⽤到上⾯提到的“AppID(应⽤ID)”,“AppSecret(应⽤密钥)”,“微信⽀付分配的商户号”,“商户⽀付密钥”以及其他的⼀些参数(具体参照微信开发⽂档)⽤MD5加密成签名(第⼀次签名)获得prepay_id后,⽤prepay_id和⼀些其他参数(具体参照微信开发⽂档)⽤MD5加密成签名(第⼆次签名)然后在前端通过微信内置浏览器提供的js API,WeixinJSBridge.invoke来调⽤微信⽀付的弹出页⾯,这⾥需要⽤到上⾯的第⼆次的签名
具体代码如下
$.get('/xxx',function(data){
if(data && data !== ""){
var _data = $.parseJSON(data)[0];
if(parseInt(_erAgent) < 5){
alert('您的微信版本低于5.0,⽆法使⽤微信⽀付!');
return false;
}
WeixinJSBridge.invoke('getBrandWCPayRequest',{
'appId': _data.appId,
'timeStamp': _data.timeStamp,
'nonceStr': _data.nonceStr,
'package': 'prepay_id=' + _data.packageOne,
'signType': _data.signType,
'paySign': _data.paySign
},function(res){
if(res.err_msg === 'get_brand_wcpay_request:ok'){
alert('⽀付成功,返回订单列表!');
}else if(res.err_msg === 'get_brand_wcpay_request:cancel'){
alert('取消⽀付!');
}
});
}
});
⼏个容易失败点需要注意
⽀付链接和在开发平台配置的链接不匹配
总共需要2次签名,并且所需的参数是不同的,在JS中⽤到的签名是第⼆次签名,不要混淆参数传递的不能有错
如果body中有中⽂需要转义其中还有⼀些问题没有完全解决,就是位置⽀付没有⼀个判断失效的时间,如果在微信⽀付的弹出层停留时间太久了,可能这个订单在我们⽹站上已经失效了,可在微信⽀付中仍然能⽀付成功,如果有⾼⼈知道这个问题怎么解决的,希望能告诉解决办法。