第一步:获取code
uni.login({
provider: "weixin",
success: (res) => {
this.code = res.code
});
第二步:获取openId和session_key
uni.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
method: 'GET',
data: {
appid: 'appid', //你的小程序的APPID
secret: 'secret', //你的小程序的secret,
js_code: this.code, //wx.login 登录成功后的code
grant_type: 'authorization_code',
},
success: (cts) => { // 换取成功后 暂存这些数据 留作后续操作
this.openId = cts.data.openid //openid 用户唯一标识
this.unionid = cts.data.unionid //unionid 开放平台唯一标识 当公众号和小程序同时登录过才会有
this.session_key = cts.data.session_key //session_key 会话密钥
}
})
},
fail: (err) => {
uni.showToast({
title: '授权登录失败',
icon: 'none'
})
console.error('授权登录失败:' + JSON.stringify(err));
}
第三步:让用户授权:
必须使用button标签,并设置为open-type="getPhoneNumber"
<button class="btn" v-else open-type='getPhoneNumber' @getphonenumber='getPhoneNumber'>立即登录</button>
导入解密所需的文件(服务端获取开放数据 | 微信开放文档)
import WXBizDataCrypt from '../../utils/WXBizDataCrypt.js'
获取手机号
getPhoneNumber(e) {
try {
let pc = new WXBizDataCrypt('appid', this.session_key);
let data = pc.decryptData(e.detail.encryptedData, e.detail.iv);
loginByWeixin({
// code: this.code,
userInfo: {
openid: this.openId,
sessionKey: this.session_key,
phone: data.phoneNumber
}
}).then(res => {
if (res.data.errno == 0) {
this.status = 'loading'
this.setUserId(res.data.data.userInfo.userId)
this.setAdmin(res.data.data.userInfo.admin)
uni.setStorageSync("token", res.data.data.token)
this.userIndexFn()
this.subordinateFn()
this.devListFn()
}
})
} catch (e) {
uni.showToast({
title: '登录失败',
icon: 'none'
})
//TODO handle the exception
}
},