方式一:wx.chooseWXPay()
当你登陆微信公众号之后,左边有两个菜单栏,一个是微信支付,一个是开发者中心。
在开发者中心中,有一个微信JS-SDK说明文档。
在此说明文档中,有一个发起微信支付的请求API
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: '', // 支付签名随机串,不长于 32 位
package: '', // 统一支付接口返回的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…
接着,请求接口进行跳转:
window.location.href = 'open.weixin.qq.com/connect/oau…'
随后,我们需要获取code的该页面地址链接就会变成:
此时,便可通过url的code参数获取到code,就可以调用后端的支付接口了。