云开发无法提供代码片段,粘贴主要逻辑部分代码:
wx.getUserInfo({ success: res => { console.log(res) wx.cloud.callFunction({ name: 'openapi' , data: { action: 'getOpenData' , openData: { list: [ res.cloudID ] } } }).then(res2 => { console.log( '[getUserInfo] 调用成功:' , res2) }). catch (err => { console.log( '[getUserInfo] 调用失败:' , err) }) } }) |
因为已经授权过了,这里直接演示getUserInfo获取用户授权信息。
现在遇到的问题是,不是所有账号/手机设备才出现这个问题,完全不清楚是什么原因导致的。
社区搜索了一下“cloudID expired.”,不止我一人遇到,这些帖子都无官方给出解答。
@微信开发团队 @微信官方 手动AT了,希望能看到引起注意!~
已找到解决办法:
不要使用getOpenData去解密encryptedData数据,直接借用wx.cloud.CloudID(res.cloudID),传递参数过程替换来实现。
详细参考:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html
wx.cloud.CloudID(e.detail.cloudID)
<button open-type="getUserInfo" type="warn" bindgetuserinfo="userInfo">同意授权</button>
const app = getApp()
Page({
data: {},
userInfo: function(e) {
console.log('[button.getUserInfo]:', e)
if (e.detail.errMsg != 'getUserInfo:ok') return
wx.showLoading({
title: '授权中',
mask: true
})
wx.cloud.callFunction({
name: 'login',
data: {
userInfo: wx.cloud.CloudID(e.detail.cloudID)
},
success: res => {
console.log('[wx.cloud.login]:', res)
wx.hideLoading()
if (res.result.code == 200) {
console.log('loginSuccess')
wx.navigateBack()
} else {
wx.showToast({
icon: 'none',
title: res.result.result
})
}
},
fail: err => {
wx.hideLoading()
wx.showToast({
icon: 'none',
title: '登录失败'
})
}
})
}
})