前端微信支付流程总结

本文会介绍移动端浏览器调起微信支付微信内部h5调起微信支付

我先把文档放在前面:
移动端浏览器调起微信支付微信内部h5调起微信支付

  1. 先说一说移动端浏览器调起微信支付的一些的细节,其实那些复杂的微信校验逻辑,后端都已经处理完毕了。我们只需要请求后端的接口,然后后端返回一个url地址,这个url如果后端没有做其他处理的话,应该类似这样的
https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2916263004719461949c84457c735b0000&package=2150917749

前端拿到这个地址,前端可以在后面拼一个其他的参数:

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2916263004719461949c84457c735b0000&package=2150917749&redirect_url=http://www.baidu.com

这样拼写完毕之后微信会根据redirect_url,当支付成功或者支付失败时,会重定向到这个地址。最后执行location.href=url进行跳转即可。

  1. 然后是微信内部h5调起微信支付的一些细节

第一步是前端需要拿到这个微信用户的code码,类似这样的链接

"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx123456&redirect_uri=http://www.baidu.com&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

执行这个链接之后,微信会根据redirect_uri,把code写到这个链接上,例如上面的链接,微信那边会做重定向,重定向之后的链接就是http://www.baidu.com?code=123,然后前端拿到code之后,请求后端接口,获取openId,前端获取到openId之后,存在本地。当前端调用微信支付的时候再把openId传给后端。
后端会返回一些参数,例如:

"appId": "wx2421b1c4370ec43b",     //公众号ID,由商户传入     
"timeStamp": "1395712654",     //时间戳,自1970年以来的秒数     
"nonceStr": "e61463f8efa94090b1f366cccfbbb444",      //随机串     
"package": "prepay_id=wx21201855730335ac86f8c43d1889123400",
"signType": "RSA",     //微信签名方式:     
"paySign": 

前端拿到这些参数之后,再执行微信内置的方法,调起微信支付:

function onBridgeReady() {
    WeixinJSBridge.invoke('getBrandWCPayRequest', {
        "appId": "wx2421b1c4370ec43b",     //公众号ID,由商户传入     
        "timeStamp": "1395712654",     //时间戳,自1970年以来的秒数     
        "nonceStr": "e61463f8efa94090b1f366cccfbbb444",      //随机串     
        "package": "prepay_id=wx21201855730335ac86f8c43d1889123400",
        "signType": "RSA",     //微信签名方式:     
        "paySign": "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==" //微信签名 
    },
    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();
}

需要注意的是WeixinJSBridge、WeixinJSBridgeReady,这些东西是微信内置的,只有在微信内部才有效,不需要前端自己安装sdk啥的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值