吓得我赶紧爬起来翻文档(需要代码直接往后翻)
原因就像微信所说的,很多开发者在打开小程序时就通过组件方式唤起getUserInfod窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。
这里我会给出Uni-app的适配代码,针对CRMEB系统进行修复,各位同学举一反三(4.13号之前发布的正式包暂不影响)
1.修改pages/users/wechat_login/index.vue中关于微信登录的按钮
<button span=""
class="bg-green btn1">微信登录
<button span=""
class="bg-green btn1">微信登录
2.默认data中添加canUseGetUserProfile: false,然后在加载页面调用的方法里面增加uni.getUserProfile的判断,是否显示新的按钮。
canUseGetUserProfile: false
if (uni.getUserProfile) {
this.canUseGetUserProfile = true
}
3.方法中新增getUserProfile方法用户获取用户信息
//小程序授权api替换 getUserInfo
getUserProfile() {
uni.showLoading({
title: '正在登录中'
})
let self = this
Routine.getUserProfile()
.then(res =>{
let userInfo = res.userInfo
userInfo.code = this.code
userInfo.spread_spid = app.globalData.spid//获取推广人ID
userInfo.spread_code = app.globalData.code//获取推广人分享二维码ID
Routine.authUserInfo(userInfo)
.then(res =>{
if (res.data.key !== undefined &&res.data.key) {
uni.hideLoading()
self.authKey = res.data.key
self.isPhoneBox = true
} else {
uni.hideLoading()
let time = res.data.expires_time - self.$Cache.time()
self.$store.commit('LOGIN', {
token: res.data.token,
time: time
})
this.getUserInfo()
}
})
.catch(res =>{
uni.hideLoading()
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
})
})
.catch(res =>{
uni.hideLoading()
})
},
4.然后在libs/routine.js中增加getUserProfile方法
/**
* 新版小程序获取用户信息 2021 4.13微信小程序开始正式启用
*/
getUserProfile(code) {
return new Promise((resolve, reject) =>{
uni.getUserProfile({
lang: 'zh_CN',
success(user) {
if (code) user.code = code
resolve({
userInfo: user,
islogin: false
})
},
fail(res) {
reject(res)
}
})
})
}
这里要注意
if (!isset($userInfoCong['openid'])) {
throw new ValidateException('openid获取失败')
}
if (!isset($userInfoCong['openid'])) {
throw new ValidateException('openid获取失败')
}
userInfo['unionId'] = isset( userInfo [′ unionId ′]= isset (userInfoCong['unionid']) ? $userInfoCong['unionid'] : ''
userInfo['openId'] = userInfo [′ openId ′]=openid = $userInfoCong['openid']
修复完成之后重新编译小程序就可以解决授权之后微信用户的问题啦。
getuserprofile点击允许后无数据是因为没有写desc字段。并且要保证desc里面的文字必须是获取你的昵称,头像地区及性别,差一个字有可能会掉不起来,或者没有任何反应,获取用户头像信息,手机端还有开发工具点击正常。
getuserprofile的点击无数据的解决办法
在电脑微信端打开小程序点击无反应,看下基础库是否达到wxgetUserProfile所规定,一般是因为desc字段超过了30个字符,但这个问题很容易被忽略,因为超过了30个字符开发者工具并无给出报错或者提示,将desc字段值小于30个字符即可。
增加了wxgetUserProfile之后,小程序将不支持getUserInfo来返回个人的信息以及不会d窗,即回收该接口的开放能力,得到的用户信息将为匿名信息,故以后的小程序如果要使用用户的昵称,头像等个人信息必须通过wxgetUserProfile方法来返回。
1、用户打开小程序,在页面上调用小程序中的wx.login(Object object)接口,调用该接口获取登录凭证(code)通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。更多使用方法详见小程序登录。
2、获取openid、unionId和session_key。将登录态code发送给自己的后台服务器,后端服务调用auth.code2Session接口
登录凭证校验。通过wx.login接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程。更多使用方法详见小程序登录。
3、首次登录获取用户信息。微信小程序API近期又做了调整,之前用的好好的getUserInfo做了重大调整,无法直接获取用户信息了,比如昵称头像等等,当然2021年4月13日上线前的小程序不受影响,如果想要再次升级新版本,即必须涉及到更换获取用户授权的修改,将getUserInfo改成getUserProfile接口。
推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认开发者妥善保管用户快速填写的头像昵称,避免重复d窗。建议保存信息,这样后面就无需重新获取。
4、通过上面三步,保存相关信息。就可成功登录微信小程序了,但是还需要做登录维护。
如果用户登录小程序后,然后又退出该小程序了。在一段时间内,再次进入该小程序,视为有效登陆,如果超出指定的时间,则视为无效登陆,需要重新登陆。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)