首先需要用户授权换取code,
login() {
uni.setStorageSync('zhishiWxlogin',2)
let appid = 'wx02f4a9300750aecb'
let uri = 'http://amzygys.com/h5/'
window.location.href =
`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(uri)}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect`
},
根据跳转的目标页,获取url路径里面的code,拿到之后存储一下,我这里是存到了本地
GetRequest() {
let url = window.location.search; //获取url中"?"符后的字串
if (url.indexOf("?") != -1) { //判断是否有参数
let str = url.substr(1); //从第一个字符开始 因为第0个是?号 获取所有除问号的所有符串
let strs = str.split("="); //用等号进行分隔 (因为知道只有一个参数 所以直接用等号进分隔 如果有多个参数 要用&号分隔 再用等号进行分隔)
// console.log(strs,'payWxCode');
let arr = strs[1].split("&"); // 获取code
uni.setStorageSync('payWxCode', arr[0].trim())
}
// console.log(uni.getStorageSync('payWxCode'),'payWxCode3');
return uni.getStorageSync('payWxCode')
},
调用接口,用code换取openid
getCodeFun() {
this.$http.post('/api/User/wechatLogin', {
code: uni.getStorageSync('payWxCode')
}).then(res => {
// console.log(res, 'payWxCode');
if (res.code == 1) {
uni.setStorageSync('zhiShiToken', res.data.userinfo.token);
}
})
},
在需要的页面进行微信支付
gopay() {
let that = this
let data = {
paytype: 1,
mid: 1
}
that.$http.post("/api/Pay/createorder", data).then(res => {
if (res.code == 1) {
WeixinJSBridge.invoke('getBrandWCPayRequest', {
"appId": res.data.appId, //公众号名称,由商户传入
"timeStamp": res.data.timeStamp, //时间戳
"nonceStr": res.data.nonceStr, //随机串
"package": res.data.package, //扩展包
"signType": res.data.signType, //微信签名方式:MD5
"paySign": res.data.paySign //微信签名
}, function(respay) {
if (respay.err_msg === "get_brand_wcpay_request:ok") {
uni.showToast({
title: '支付成功',
icon: 'success',
duration: 2000
}); //定时器
setTimeout(function() {
uni.navigateBack()
}, 2000);
} else if (respay.err_msg === "get_brand_wcpay_request:cancel") {
uni.showToast({
title: "取消支付",
icon: "none",
duration: 2000
})
} else if (respay.err_msg === "get_brand_wcpay_request:fail") {
uni.showToast({
title: "支付失败",
icon: "none",
duration: 2000
})
}
}, function(err) {
uni.showToast({
title: err,
icon: "none",
duration: 2000
})
})
}
})
}