公众化网页,微信支付 JSAPI
1. 根据接口所需参数和签名,服务端调统一下单接口,主要获取 prepay_id 字段
文档路径:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
签名算法可以下载微信的sdk https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
2. 拿到 prepay_id 进行二次签名
重新进行签名计算,参与签名的参数为:appId、timeStamp、nonceStr、package、signType,参数区分大小写。
注意:
signType 类型要与服务端一致
nonceStr: 跟第一次签名的一样
package:'prepay_id=123456789...'
还有就是 使用SDK生成签名时,注意签名类型
签名类型,目前支持HMAC-SHA256和MD5,默认为MD5(虽然文档写的默认是MD5,但是SDK里面不一定)
3.服务端将整理好的字段,返回网页端
{
appId:'',
timeStamp:'',
nonceStr:'',
package:'',
ignType:'',
paySign:''
}
4. 网页端调起支付接口
文档路径:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6
// 示例代码
function onBridgeReady(){
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入
"timeStamp":"1395712654", //时间戳,自1970年以来的秒数
"nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串
"package":"prepay_id=u802345jgfjsdfgsdg888",
"signType":"MD5", //微信签名方式:
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名
},
function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}
});
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
// 如果包支付签名验证失败,可以在线校验签名,看看生成的签名和自己生成的是否一样,注意字段的大小写。
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1
若是还报错,检查一下参数字段是否正确 ,
signType 签名类型是否一致

浙公网安备 33010602011771号