
吓得我赶紧爬起来翻文档(需要代码直接往后翻)
原因就像微信所说的,很多开发者在打开小程序时就通过组件方式唤起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'];
修复完成之后重新编译小程序就可以解决授权之后微信用户的问题啦。
let userInfo = {}; //需要传递的参数,这里用对象举例。
let pages = getCurrentPages(); //返回pages的所有信息;数组格式
let prevPage = pages[ pageslength - 2 ]; //返回上一个页面的所有信息 上一级为-2
prevPagesetData({
user:userInfo //user为上个页面需要修改的数据,如data里面的数据,数据格式要对应。
});
wxnavigateBack({
delta:1 // 返回上一级页面。
})
一个很常用的功能,但是我还是发现有一些需要注意的地方在里面,简单记录一下。
第一个问题就是这个 button 组件需要添加 open-type 属性,并指定为 getUserInfo 类型,来获取用户基本信息。还有另外一种做法,具体可以参考 官方文档的说明 。
放一个动图哈哈哈
js 部分就是响应点击事件,使用 api wxgetUserInfo(Object object)
获取用户信息,注意传递给 wxgetUserInfo 的是一个字典其中包含了两个函数分别作为成功和失败的回调函数(callback function)
注意 this 的指代对象发生了变化,最开始的this是指代 Page() 构造出来的对象,在函数里面使用 this 会说未指定,所以我们使用了 that 承接一下,这也算传统艺能咯。
另外一点:获取用户信息时会自动d出一个对话框问用户是否提供信息,这个d窗只d出一次,如果用户点击了拒绝后来又想改为允许,可以使用 wxopenSetting({})
除了可以获取用户的昵称之外还有很多信息可以得到,还有一个比较常用的就是用户头像了也就是 resuserInfoavatarUrl 。
如果你要提交一篇文章,肯定只能用post,因为数据量太大,get请求类似浏览器url请求,你把一篇文章放到url里面肯定请求不过去,如果你只是个简单的传id或者比较少的参数可以用get,还有就是有密码输入建议用post,post请求参数不会以明文显示在url上
1、设置id的方法标识跳转后传递的参数值;
2、通过使用data - xxxx 的方法来标识要传递的值 微信小程序设置id的方法标识来传值在要跳转的item处,设置一个id并给当前的id赋值上对应的key值,比如一部**的id(后面带着id去下一个页面查询,详细信息)如:
后我们在js的bindtap的响应事件中获取,并传递到下一个界面中;
获取到id传的值
通过ecurrentTargetid;获取设置的id值,并通过设置全局对象的方式来传递数值,
获取全局对象 var app=getApp(); //设置全局的请求访问传递的参数 apprequestDetailid=id;
提示:其实我们也可以在,wxml中查看到我们设置的每一个item的id值
通过使用data - xxxx 的方法标识来传值通过使用data - xxxx 的方法标识来传值,xxxx可以自定义取名 比如data-key等等都可以。
如何获取data-xxxx传递的值
在js的bindtap的响应事件中:
通过数据解析一层层找到数据,var id=etargetdatasetid(根据你的data-id的取名)
微信小程序如何跨页面获取值
依据上面的方式设置要传递的值,页面跳转后,我们就需要在下一个页面拿到传递的数据(这个数据在传递前,就已经被设置成全局变量)
在跳转后的js页面,接收传递过来的数据detailjs
同样通过全局额方式取值出来,(即和appjs中取某个变量的值是一样的)
var movieid=getApp()MovieDetailid;
consolelog(movieid);
到此为止,我们数值传递并接收成功,后面就可以根据我们接收的参数,进行进一步的 *** 作了。
以上就是关于微信小程序getUserProfile详解,CRMEB系统修复流程全部的内容,包括:微信小程序getUserProfile详解,CRMEB系统修复流程、微信小程序页面返回传递参数、微信小程序获取当前用户信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)