文章目录
微信公众号支付
提示:第一步:当用户完成登录时,判断浏览器环境(微信内置浏览器/手机浏览器);
第二步:判断用户是否关注了微信公众号;
最后一步:调起微信公众号支付;
第一步:点击登录完成后,开始判断环境(微信内置浏览器/手机浏览器),如果运行环境是微信的话,请求后端接口判断该账号是否绑定微信公众号,如果没绑定则请求微信官方接口并获得包含code的回调链接;
os:把判断绑定微信公众号方法写在登录页面,可以让订单支付页面代码更干净;
Login() { //登录
let that = this;
uni.$u.http.post('接口地址', {
data:'参数'
}).then(res => {
if (res.code == 0) {
uni.$u.toast(res.msg);
return false;
}
let userInfo = res.data.userinfo;
uni.setStorageSync('userInfo', userInfo);
uni.setStorageSync('token', userInfo.token);
that.is_wx()
}).catch(err => console.log(err))
},
is_wx() { // 判断是否在微信环境中
let that = this;
let en = window.navigator.userAgent.toLowerCase();
if (en.match(/MicroMessenger/i) == 'micromessenger') { // 微信内置浏览器
uni.$u.http.post('接口路径').then(res => {
if (res.code == 0) { // 未绑定微信公众号
that.getWeChatCode()
} else {
uni.switchTab({
url: '/pages/mine/mine'
})
that.$router.go(0);
}
}).catch(err => console.log(err))
} else { // 手机浏览器
uni.switchTab({
url: '/pages/mine/mine'
})
that.$router.go(0);
}
},
第二步:判断用户是否关注了微信公众号;
思路:因为授权成功后微信会跳转到我们设置的回调地址,需要提前在onload中设置一下;
onLoad(e) {
const hasWechatLogin = uni.getStorageSync('wechat_login_tag') || null;
if (hasWechatLogin) {
this.checkWeChatCode();
}
},
思路:把后台所需的code以及其他信息调用接口传参
;
// 重定向回来本页面检查有没有code
checkWeChatCode() {
let code = this.getUrlCode('code');
if (code) {
this.bindingXH5(code)
}
},
// 正则匹配请求地址中的参数函数
getUrlCode(name) {
return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) ||[, ''])[1].replace(/\+/g, '%20')) || null
},
// 看地址中有没有code参数,如果没有code参数的话则请求微信官方的接口并获取包含code的回调链接
getWeChatCode() {
//用于退出登录回来不会再调一次授权登录
uni.setStorageSync('wechat_login_tag', 'true');
const appID = ''; //公众号appID
const callBack = ''; //回调地址
//通过微信官方接口获取code之后,会重新刷新设置的回调地址【redirect_uri】
window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
appID + '&redirect_uri=' + encodeURIComponent(callBack) +
'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect'
},
// 绑定微信把后端需要的code以及其他信息调用接口传过去
bindingXH5(code) {
let that = this;
uni.$u.http.post('/user/third', {
code
}).then(res => {
if (res.code == 0) {
uni.$u.toast("绑定失败")
} else {
uni.switchTab({
url: '/pages/mine/mine'
})
that.$router.go(0);
}
}).catch(err => console.log(err))
},
最后一步:页面调起微信公众号支付;
提示:h5 绑定微信公众号,res是后端返回的数据,里面包含需要的信息;
appId 参数必填(公众号唯一标识);timeStamp 参数必填(生成签名的时间戳);
nonceStr 参数必填(生成签名的随机串);signType 参数必填(签名);
wxH5Pay(res) {
let that = this;
var data = res;
WeixinJSBridge.invoke('getBrandWCPayRequest', {
debug: true,
appId: res.data.appId,
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package,
paySign: res.data.paySign,
signType: res.data.signType,
}, function(res) {
if (res.err_msg === 'get_brand_wcpay_request:ok') {
// 支付成功的处理逻辑
uni.showToast({
title: '微信支付成功',
icon: 'none'
})
uni.navigateTo({
url:'/pages/mine/订单列表/订单列表'
})
} else if (response.err_msg == "get_brand_wcpay_request:cancel") {
// 支付过程中取消支付
uni.showToast({
title: '取消支付',
icon: 'none'
})
} else {
uni.showToast({
title: '支付失败',
icon: 'none'
})
}
});
},
支付宝支付
OS:你没有看错,你不用怀疑!只有两行代码,不信的话你试一下就知道喽!对了对了,怕一些笨蛋不知道怎么用,我就再多嘴几句哈。这里只需要把请求后端接口成功后返回的订单信息,也就是接口成功返回的res赋值就可以了。
document.querySelector('body').innerHTML = res;
document.forms[0].submit();
尾结
提示:文章会有些思路断点但重点部分没问题,等我下次重新整理一下!