用户在使用小程序时,经常需要授权登录,授权登录的作用是获取用户的基本信息,如头像、昵称以及openid等,openid可用于微信授权手机号、微信支付。
微信授权登录
.xhtml如下,wxLogin为自定义方法
<button open-type="getUserInfo" bindgetuserinfo="wxLogin"></button>
.js如下
// 微信登录
wxLogin (event) {
let reqUrl = getApp()['globalData']['domain'] + 'v1.Indexc/wxSignIn'; // 后台请求接口
let signature = event.detail.signature;
let rawData = event.detail.rawData;
let encryptedData = event.detail.encryptedData;
let iv = event.detail.iv;
let reqData = {
'signature': signature,
'rawData': rawData,
'encryptedData': encryptedData,
'iv': iv
}
if (event.detail.userInfo) {
wx.login({
success: (res) => {
let code = res.code;
reqData['code'] = code;
wx.request({
url: reqUrl,
method: 'POST',
data: reqData,
success: (res) => {
let resData = res.data;
if (resData.code != 1) {
getApp().showToast(resData.msg);
}
else {
let token = resData.data.data;
let openid = resData.data.openid;
let session3rd = resData.data.session3rd;
wx.setStorageSync("token", token);
wx.setStorageSync("openid", openid);
wx.setStorageSync("session3rd", session3rd);
}
}
})
}
})
}
},
微信授权绑定手机号
.xhtml如下,getPhoneNumber为自定义方法
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
.js如下
getPhoneNumber (event) {
let reqUrl = getApp()['globalData']['domain'] + 'v1.Userc/decryptData2'; // 后台请求得接口
let encryptedData = event.detail.encryptedData;
let iv = event.detail.iv;
let session3rd = wx.getStorageSync("session3rd"); // 由第一步"微信授权"操作后台返回
let openid = wx.getStorageSync("openid"); // 由第一步"微信授权"操作后台返回
let token = wx.getStorageSync("token"); // 由第一步"微信授权"操作后台返回
let reqData = {
'encryptedData': encryptedData,
'iv': iv,
'3rd_session': session3rd,
'openid': openid
}
wx.request({
url: reqUrl,
header: {'token': token},
method: 'POST',
data: reqData,
success: (res) => {
let resData = res.data;
if (resData.code != 1) {
getApp().showToast(resData.msg);
}
else {
let phone = resData.data.data;
wx.setStorageSync('phone', phone);
getApp().showToast('绑定成功');
}
}
})
},
值得注意的是:以上代码中的session3rd并不是固定的变量名,具体由后台同事声明,也可能是session_3rd,session_key