1.取code问题
//进入自己H5页面,然后去微信的地址拿code,注意一个code只能使用一次
if(this.$route.query.code){
let local = window.location.href;
window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
this.appid + "&redirect_uri=" + encodeURIComponent(local) +
"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
}
2.调起微信支付
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": obj.appid, //公众号ID,由商户传入
"timeStamp": obj.timestamp, //时间戳,自1970年以来的秒数
"nonceStr": obj.noncestr, //随机串
"package": obj.package,
"signType": obj.signType, //微信签名方式:
"paySign": obj.paySign //微信签名
}, function (res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
setTimeout(() => {
//关闭当前页面
WeixinJSBridge.call('closeWindow');
}, 1000);
//支付完成回调页面(可要可不要)
// window.location.replace('paysuccess')
return
} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
_this.$toast.fail("用户取消支付!");
} else {
_this.$toast.fail("支付失败!");
}
//取消支付清除code,避免code 使用后台报错
let url = window.location.href + new Date().getTime()
let local = _this.funcUrlDel(url, 'code')
window.location.href = local
})
3.url参数过滤
funcUrlDel(loca, name) {
let baseUrl = '';
if (loca.indexOf('&') > -1) {
baseUrl = loca.split('?')[0] + '?';
} else {
baseUrl = loca.split('?')[0];
}
let query = loca.split('?')[1];
if (query && query.indexOf(name) > -1) {
var obj = {};
var arr = query.split("&");
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].split("=");
obj[arr[i][0]] = arr[i][1];
}
delete obj[name];
var url = baseUrl + JSON.stringify(obj).replace(/[\"\{\}]/g, "").replace(/\:/g, "=").replace(/\,/g, "&");
return url;
} else {
return loca;
}
}