两种调起微信支付的方式

5,480 阅读2分钟

方式一:wx.chooseWXPay()

当你登陆微信公众号之后,左边有两个菜单栏,一个是微信支付,一个是开发者中心。

在开发者中心中,有一个微信JS-SDK说明文档。

在此说明文档中,有一个发起微信支付的请求API 

wx.chooseWXPay({ 
        timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 
        nonceStr: '', // 支付签名随机串,不长于 32package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) 
        signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' 
        paySign: '', // 支付签名 
        success: function (res) { 
            // 支付成功后的回调函数 
        } 
});

方式二:WeixinJSBridge.invoke()

在微信支付菜单栏中,有一个使用教程。里面有一个使用JS API发起支付请求的小菜单。

进入之后,里面一个公众号支付的菜单栏。在里面,有一个H5调起支付API的页面。

它里面发起一个支付的代码是: 

function onBridgeReady(){ 
    WeixinJSBridge.invoke( 
    'getBrandWCPayRequest', { 
        "appId" : "wxxxxxxxxx", //公众号名称,由商户传入 
        "timeStamp":" 1395712654", //时间戳,自1970年以来的秒数 
        "nonceStr" : "e6sssssssssssssssss", //随机串 "package" : "prepay_id=u802345jgfjsdfgsdg888", 
        "signType" : "MD5", //微信签名方式: 
        "paySign" : "70EA570631E4BB79628FBCA90ABCWEDFWEF23423423" //微信签名 
        }, 
        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(); 
}

两者的区别:

1.weixinjsbridge.invoke()出现的版本更早,无需引用jssdk,无需使用wx.config方法注入,需要appId参数;而wx.choosewxpay出现的版本比较晚,需要jssdk注入,不需要参数appId。

2.weixinjsbridge.invoke()是微信浏览器的内置方法,只能在微信浏览器内部使用;其实wx.choosewxpay在引用的微信jssdk文件中,也调用了weixinjsbridge.invoke(),是对weixinjsbridge.invoke() 的再次封装。

知识点:微信支付授权获取code

调取微信支付,需要前端获取到用户的授权code码。获取步骤如下:

1.进入收银台,需要请求微信提供的接口地址,如下:

open.weixin.qq.com/connect/oau…

微信支付.png

接着,请求接口进行跳转:

window.location.href = 'open.weixin.qq.com/connect/oau…'

随后,我们需要获取code的该页面地址链接就会变成:

http://localhost:3001/activity.html?code=081QnhGa1F1GlB0C3eGa13UuJL0QnhGe&state=123#/checkstand/30aa3c4aff2a46233333333333333

此时,便可通过url的code参数获取到code,就可以调用后端的支付接口了。