授权获取code(⽀付)
摘要:最近在做h5⽀付,然后发现⼀个问题,⾃带浏览器不⽀持h5⽀付,然后后台⼜做了⼀个⽀付的接⼝,然后要传code参数,代码写好总结后,就发到这⾥记录⼀下;
因为有两个⽀付接⼝,所以⾸先判断打开页⾯的是浏览器还是其他浏览器,代码如下:
if(ua.match(/MicroMessenger/i) == "micromessenger") {
//浏览器
}else{
//其他浏览器
}
然后,请求接⼝实例如下:
open.weixin.qq/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE&connect_redirect=1#wechat_redirect
参数的意思为:
接着我们要准备的就是,把我们⽀付的这个APPID与REDIRECT_URI填写好,appid问产品要,然后redirect_url⾃⼰到⾃⼰需要跳转的地址链接,然后需要获取code的页⾯通过上
⼀个页⾯跳转链接传值获取code即可;
例如:
window.location.href = 'open.weixin.qq/connect/oauth2/authorize?appid=wx9cxxxxxxxxxx42c&redirect_uri=xxxxx/wap/payOrder.html&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect';随后,我们需要获取code的该页⾯地址链接就会变成:
xxxxx/wap/payOrder.html/?code=abc677adaduiadi7838&state=STATE
最后,我们通过获取链接取到code,传值给后台:
function getQueryString(name){
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
var code = getQueryString("code");
这样,我们就获取到code。
然后,⽀付的时候发现⼀个问题,弹出⼀个⽀付窗⼝,然后闪⼀下,⼜消失了,然后打印排查,最后发现是产品没把⽀付域名加上去,如图:
附上⽀付js代码以及需要的参数:(你的参数和后台的参数要严格按照规定的命名来写,注意⼤⼩写)
var wxpay = JSON.parse(data).result;
function onBridgeReady() {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": 'wx9cxxxxxxxx442c', //名称,由商户传⼊ ok
"timeStamp": wxpay.timeStamp, //时间戳,⾃1970年以来的秒数 ok
连接不上网络"nonceStr": Str, //随机串
"package": wxpay.package,
"signType": wxpay.signType, //签名⽅式
"paySign": wxpay.paySign //签名
},
function(res) {
_msg == "get_brand_wcpay_request:ok") {
// 使⽤以上⽅式判断前端返回,团队郑重提⽰:
//_msg将在⽤户⽀付成功后返回ok,但并不保证它绝对可靠。
console.log('⽀付成功!')
}
});
}
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();
}
希望对⼤家有所帮助。