微信小程序getUserProfile详解,CRMEB系统修复流程

2023-10-11 18:20

本文主要是介绍微信小程序getUserProfile详解,CRMEB系统修复流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小程序所有新进用户的昵称全部变成了“微信昵称”,当时我就

在这里插入图片描述

吓得我赶紧爬起来翻文档(需要代码直接往后翻)

wx.getUserProfile(Object object)

基础库 2.10.4 开始支持,低版本需做兼容处理。

获取用户信息。每次请求都会弹出授权窗口,用户同意后返回 userInfo。

getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息 即wx.getUserInfo接口的返回参数不变,但开发者获取的userInfo为匿名信息。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为优化用户的使用体验,平台将进行以下调整:

2021年2月23日起,若小程序已在微信开放平台进行绑定,则通过wx.login接口获取的登录凭证可直接换取unionID

2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息),获取加密后的openID与unionID数据的能力不做调整。此前发布的小程序版本不受影响,但如果要进行版本更新则需要进行适配。

新增getUserProfile接口(基础库2.10.4版本开始支持),可获取用户头像、昵称、性别及地区信息,开发者每次通过该接口获取用户个人信息均需用户确认。具体接口文档:《getUserProfile接口文档》

由于getUserProfile接口从2.10.4版本基础库开始支持(覆盖微信7.0.9以上版本),考虑到开发者在低版本中有获取用户头像昵称的诉求,对于未支持getUserProfile的情况下,开发者可继续使用getUserInfo能力。开发者可参考getUserProfile接口文档中的示例代码进行适配。

请使用了wx.getUserInfo接口或的开发者尽快适配。开发者工具1.05.2103022版本开始支持getUserProfile接口调试,开发者可下载该版本进行改造。

原因就像微信所说的,很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。

这里我会给出Uni-app的适配代码,针对CRMEB系统进行修复,各位同学举一反三(4.13号之前发布的正式包暂不影响)

1.修改pages/users/wechat_login/index.vue中关于微信登录的按钮

在这里插入图片描述

<button v-if=“canUseGetUserProfile && code” hover-class=“none” @tap=“getUserProfile”

class=“bg-green btn1”>微信登录

<button v-else hover-class=“none” open-type=“getUserInfo” @getuserinfo=“setUserInfo”

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’,

desc: ‘用于完善会员资料’, // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写

success(user) {

if (code) user.code = code;

resolve({

userInfo: user,

islogin: false

});

},

fail(res) {

reject(res);

}

})

})

}

这里要注意

desc为必填项,并且将来有可能会将信息提示在弹窗内,所以要谨慎填写;
getUserProfileAPI不是通过open-type 吊起 而是使用 @tap="getUserProfile"bindtap="getUserProfile" 调用的,且必须为直接调用,不能通过其他函数回调调用。否则会报getUserProfile:fail can only be invoked by user TAP gesture.错误

后台代码修改地方比较少集中在app/services/wechat/RoutineServices.php文件中
在这里插入图片描述

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’];

修复完成之后重新编译小程序就可以解决授权之后微信用户的问题啦。

如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 !

这篇关于微信小程序getUserProfile详解,CRMEB系统修复流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/189968

相关文章

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

MySQL count()聚合函数详解

《MySQLcount()聚合函数详解》MySQL中的COUNT()函数,它是SQL中最常用的聚合函数之一,用于计算表中符合特定条件的行数,本文给大家介绍MySQLcount()聚合函数,感兴趣的朋... 目录核心功能语法形式重要特性与行为如何选择使用哪种形式?总结深入剖析一下 mysql 中的 COUNT

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架