吓得我赶紧爬起来翻文档(需要代码直接往后翻)
原因就像微信所说的,很多开发者在打开小程序时就通过组件方式唤起getUserInfod窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。
这里我会给出Uni-app的适配代码,针对CRMEB系统进行修复,各位同学举一反三(413号之前发布的正式包暂不影响)
1修改pages/users/wechat_login/indexvue中关于微信登录的按钮
<button span=""
class="bg-green btn1">微信登录
<button span=""
class="bg-green btn1">微信登录
2默认data中添加canUseGetUserProfile: false,然后在加载页面调用的方法里面增加unigetUserProfile的判断,是否显示新的按钮。
canUseGetUserProfile: false
if (unigetUserProfile) {
thiscanUseGetUserProfile = true
}
3方法中新增getUserProfile方法用户获取用户信息
//小程序授权api替换 getUserInfo
getUserProfile() {
unishowLoading({
title: '正在登录中'
});
let self = this;
RoutinegetUserProfile()
then(res => {
let userInfo = resuserInfo;
userInfocode = thiscode;
userInfospread_spid = appglobalDataspid; //获取推广人ID
userInfospread_code = appglobalDatacode; //获取推广人分享二维码ID
RoutineauthUserInfo(userInfo)
then(res => {
if (resdatakey !== undefined && resdatakey) {
unihideLoading();
selfauthKey = resdatakey;
selfisPhoneBox = true;
} else {
unihideLoading();
let time = resdataexpires_time - self$Cachetime();
self$storecommit('LOGIN', {
token: resdatatoken,
time: time
});
thisgetUserInfo()
}
})
catch(res => {
unihideLoading();
unishowToast({
title: resmsg,
icon: 'none',
duration: 2000
});
});
})
catch(res => {
unihideLoading();
});
},
4然后在libs/routinejs中增加getUserProfile方法
/
新版小程序获取用户信息 2021 413微信小程序开始正式启用
/
getUserProfile(code) {
return new Promise((resolve, reject) => {
unigetUserProfile({
lang: 'zh_CN',
success(user) {
if (code) usercode = 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'];
修复完成之后重新编译小程序就可以解决授权之后微信用户的问题啦。
做小程序授权登录获取openid时遇到以下错误:
{"errcode":40029,"errmsg":"invalid code, hints: [ req_id: m3yw8a0472th20 ]"}
在网上搜了下,有两种说法:1、code被使用了两次;2、appid与secret不一致
看了一下自己的项目,这两个错误都不是,后来在另一篇博文里看到只需要重新创建项目就可以了,试了一下,还真是。
仔细想了一下原因,当一开始创建项目的时候使用的是之前的appid,后来自己又在appjs里设置appid,但是这里设置没起作用,所有会报这个错误。
我遇到的情况是:{ errMsg: "cloudcallFunction:ok", result: null }
方法一:先检查是否在开发前安装好nodsjs和npm;
在cmd输入:
node -v
npm -v
可以看到安装好的对应版本;
云函数中使用 wx-server-sdk 需在对应云函数目录下安装 wx-server-sdk 依赖,可通过:
npm install --save wx-server-sdk@latest安装;
最后会提示:+wx-server-sdk@版本号。
成功安装依赖后,相应的云函数文件夹将生成一个package-lockjson文件。
再次上传并部署云函数:所有文件。
方法二:
在云端和本地上都要删除函数,再重新创建和上传,也许问题就会解决了!
方法三:
在云端上删除已经部署过的login函数:再次上传的时候可能会出现:
"Code": "ResourceNotFoundFunction", "Message": "未找到函数版本,请创建后再
然后此时在云端上新建函数,如下图:
再次上传并部署云函数,此时提醒函数已存在,不能重复上传,此时编译一下。
发现原本获取openid值为null的,现在能够成功获取到了用户的openid。
1用户点击微信授权,小程序端获取手机号。
2小程序端将手机号和code传给后台,
3后台通过code获取openid
如果openid已经存在,返回用户信息
如果openid不存在,并且该手机号未和openid绑定,那么该openid和手机号均可用户登录,返回用户信息
如果openid不存在,并且该手机号已经和某个openid绑定了,那么返回错误信息
补充:
前端传给后台code,后台通过小程序的一个方法(使用code,小程序appid和secret)从微信获取唯一标识openid(或unionid)
1前端传给后台code,后台(使用code,小程序appid和secret获取)从微信获取唯一标识openid(或unionid)
2如果后台存在该openid用户,返回登录成功的参数
如果不存在该openid用户,返给前端openid和一个失败的标识
3前端界面跳转,变成输入手机号和验证码界面。
如果手机号存在,登录成功,返回参数。并且如果没有绑定微信,那么绑定openid
如果手机号不存在,那么注册该手机号为用户,并且绑定openid
或者第三步骤为:
3前端将openid和手机号+密码给后台
如果登录成功,返回登录成功参数,并且如果没有绑定微信,那么绑定微信
如果用户(手机号)存在,密码错误,提示密码错误
如果用户(手机号)不存在,那么注册该密码为登录密码
班级云相册code获取失败怎么解决,
首先,调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的会话密钥(session_key)。用户数据的加解密通讯需要依赖会话密钥完成。
获取openid,拿到上一步获取的code,结合小程序 appid 和 secret 请求接口一同被返回的,还包括 session_key,其中 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。
直接使用wxgetUserInfo是不能获取更多的信息的,如微信用户的openid。
需要发送获取到的code进行请求到微信的后端API,进行用户解密之类的 *** 作才可以获取,根据文档,只需要进行一个get请求到如下地址。
需要发送获取到的code进行请求到微信的后端API,才能正确获取更多信息,这也许是为了安全起见。
最后,都要求判断登录的用户是不是唯一的,这也就需要使用微信账号唯一的openid来验证了。
方法/步骤
5/6 分步阅读
微信公众号新的验证方式,比之前的安全性高了,所以要获取openid,也不在直接写在url上
2/6
配置 《网页授权获取用户基本信息》的回调地址,也是就我们url的指向地址,
在修改里写上url ,但是 不要加>
RSOPEN SQL,CONN,A,B
A:
ADOPENFORWARDONLY(=0)
只读,且当前数据记录只能向下移动
ADOPENKEYSET(=1)
只读,当前数据记录可自由移动
ADOPENDYNAMIC(=2)
可读写,当前数据记录可自由移动
ADOPENSTATIC(=3)
可读写,当前数据记录可自由移动,可看到新增记录
B:
ADLOCKREADONLY(=1)
缺省锁定类型,记录集是只读的,不能修改记录
ADLOCKPESSIMISTIC(=2)
悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。
ADLOCKOPTIMISTIC(=3)
乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。
ADLOCKBATCHOPTIMISTIC(=4)
批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。
当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。
对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,
数据在这段时间被更新。这减少了资源的使用。
以上就是关于微信小程序getUserProfile详解,CRMEB系统修复流程全部的内容,包括:微信小程序getUserProfile详解,CRMEB系统修复流程、微信小程序:40029错误(invalid code)、小程序获取用户的openid,得到为null!我的解决办法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)