以获取用户手机号为例子,自己亲测。可以获取,可以保持
(1)首先调取小程序登陆接口,拿到code;
(2)然后把这个code传给后台,后台会根据这个code返回数据;
(3)用原生小程序,调取手机号接口,获取到encryptedData,iv等值,然后调取后台接口,要把code,encryptedData,iv传递给后台,后台会根据这两个值进行解密,解密完以后后台会获取到手机号,然后会返回给前端。
如何保持登陆状态?
(1)在上面已经说到,先登陆拿到code,在获取手机号接口的时候,后台会请求小程序的接口,获取到skey,然后后台把这个skey值返回给前端。
(2)前端拿到这个key值以后要利用 wx.setStorageSync(‘skey’, res.data.skey)保存到storage里面。
(3)再请求其他接口的时候,要带着storage里保存的skye值,放到请求头header里面去请求其他接口。这样才可以做到登陆保持状态
<button bindtap="login">登陆</button>
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">getPhoneNumber</button>
login: function () {
var _this = this
wx.login({
success: function (res) {
_this.setData({
code: res.code
})
}
})
},
// 获取用户手机号
getPhoneNumber: function (e) {
if (e.detail.errMsg == "getPhoneNumber:ok") {
// 调用封装好的promise请求
request({
url: 'xxx',
data: JSON.stringify({
code: this.data.code,
encryptedData: e.detail.encryptedData,
iv: e.detail.iv
}),
method: 'POST',
}).then(res => {
wx.setStorageSync('skey', res.data.skey)
this.setData({
phoneNumber: res.data.userInfo.phoneNumber
})
request({
url: 'xxx',
method: 'GET',
header: {
'token': wx.getStorageSync('skey')
}
}).then(res => {
console.log(res.data.message)
})
})
// 请求结束
}
},