微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案

半年前做的个小程序,更新了二个文字,重新上传审核通过,悲剧了,新用户的昵称全部变为微信用户,头像全部变为默认头像,查了半天代码没找到原因,相当头大,搜了一下文档,尴尬了,11月9号新更新的规则,不再返回昵称和头像值....需要用头像昵称获取能力去触发获取!

 解决方案

第一步,点击登录按钮,弹出层,通过授权获取OPENID值和手机号信息,先完成注册。

 

 第二步,完成注册后验证昵称和头像是否为空,如为空弹出资料设置层,验证资料是否填写。点击头像按钮获取微信或者自定义上传头像,点昵称栏获取微信昵称或自定义昵称。保存!

 

 

 

 

wxml代码 

  <view class="index"><view class="head"><view class="headbox"><view class="position"><view class="face"><view class="img"><block wx:if="{{avatarimg}}"><image class="self" mode="widthFix" src="{{avatarimg}}"></image></block><block wx:else><image mode="widthFix" src="headlogonew.png"></image></block></view><block wx:if="{{nickname}}"><view class="name">{{nickname}}</view></block><block wx:else><view class="name" bindtap="getUserProfile">点击登录/注册</view></block></view><block wx:if="{{isShowPhone}}"><view class="dialog-mask"></view><view class="dialog-info"><view class="dialog-title">请点击获取授权选择绑定的手机号</view><view class="dialog-footer"><button class="button" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取授权</button></view></view></block> <block wx:if="{{isShowUserInfo}}"><view class="dialog-mask"></view><view class="dialog-info"><view class="dialog-title">请设置头像和昵称</view><view class="dialog-footer dialog-line"><div class="set"><button open-type="chooseAvatar"  bindchooseavatar="onChooseAvatar"><block wx:if="{{avatarimg}}"><image mode="widthFix" src="{{avatarimg}}"></image></block><block wx:else><image mode="widthFix" src="/images/uploadface.png"></image></block></button></div><div class="set"><input  placeholder="请输入您的昵称" type="nickname" value="{{nickname}}" bindblur="bindblur"></input></div><div class="set"><button class="button" bindtap="setBtnTap">保存</button></div></view></view></block> <div class="clear"></div></view></view></view></view>

js代码

/*** 页面的初始数据*/data: {isShowPhone: false, //默认先不显示获取手机号isShowUserInfo: false,user_id: '',phone: '',avatarimg: '',nickname:'',},/** 获取昵称信息 */bindblur(e) {this.data.nickname = e.detail.value},/** 更换头像 */onChooseAvatar(e) {var that = thiswx.getFileSystemManager().readFile({filePath: e.detail.avatarUrl, //选择图片返回的相对路径 encoding: 'base64',success: res => {wx.request({url: app.SiteUrl + "imgupload",data: {file: 'data:image/png;base64,' + res.data,},header: {'content-type': 'multipart/form-data'},success: function (res) {if (res.data.status == 'success') {that.setData({avatarimg: res.data.data.image_name,//isShowUserInfo: false,})} else {console.log('fail');}}})console.log('data:image/png;base64,' + res.data)}})},setBtnTap() {var that = thisif (that.data.avatarimg.length == 0) {wx.showToast({title: '请上传头像!',icon: 'error',duration: 1500})} else if (that.data.nickname.length == 0) {wx.showToast({title: '请填写昵称!',icon: 'error',duration: 1500})} else {wx.request({url: app.SiteUrl + "setUserInfo",data: {user_id: that.data.user_id,nickname: that.data.nickname,avatarimg: that.data.avatarimg,},method: 'GET',header: {'content-type': 'application/json'},success: function (res) {if (res.data.data.phone != '') {that.setData({isShowPhone: false,isShowUserInfo: false,nickname: that.data.nickname,})wx.setStorageSync('user_id', res.data.data.user_id);wx.setStorageSync('phone', res.data.data.phone);wx.setStorageSync('nickname', that.data.nickname);wx.setStorageSync('avatarimg', that.data.avatarimg);wx.showToast({title: '更新成功!',icon: 'success',duration: 1500});} else {that.setData({isShowUserInfo: false,isShowPhone: true,})}}})}},getUserProfile() {var that = thiswx.showLoading({title: '获取授权中'})wx.getUserProfile({desc: '使用户得到更好的体验',success: (res) => {wx.hideLoading()wx.request({url: app.SiteUrl + "getopenid",data: {code: that.data.code},method: 'GET',header: {'content-type': 'application/json'},success: function (res) {that.setData({session_key: res.data.data.session_key,openid: res.data.data.openid})wx.request({url: app.SiteUrl + "checkuser",data: {openid: res.data.data.openid},method: 'GET',header: {'content-type': 'application/json'},success: function (res) {if (res.data.data.phone == '') {that.setData({isShowUserInfo: false,isShowPhone: true,})}else if (res.data.data.nickname == '') {that.setData({isShowUserInfo: true,isShowPhone: false,})}else {that.setData({isShowPhone: false,isShowUserInfo: false,user_id:res.data.data.user_id,phone:res.data.data.phone,nickname:res.data.data.nickname,avatarimg:res.data.data.avatarimg,})wx.setStorageSync('user_id', res.data.data.user_id);wx.setStorageSync('phone', res.data.data.phone);wx.setStorageSync('nickname', res.data.data.nickname);wx.setStorageSync('avatarimg', res.data.data.avatarimg);} }})}}),that.setData({})},fail: res => {wx.hideLoading()console.log("获取用户信息失败", res)}})},getLogin() {//code获取成功,保存为当前页面的全局变量codewx.login({success: res => {this.setData({code: res.code})},fail: res => {//失败}})},getPhoneNumber: function (e) {// 登录wx.showLoading({title: '加载中...'})var self = thiswx.login({success: res => {wx.hideLoading()var encryptedData = encodeURI(e.detail.encryptedData) // 完整的加密数据var iv = e.detail.iv //加密算法的初始向量console.log('encryptedData', encryptedData)console.log('iv', iv)wx.request({url: app.SiteUrl + 'getPhoneNumber',data: {'session_key': self.data.session_key,'encryptedData': encryptedData,'iv': iv,},method: 'GET',header: {'content-type': 'application/json'},success: function (res) {wx.hideLoading()if (res.data.status == 1) {self.setData({phone: res.data.data.phoneNumber,isShowPhone: false,isShowUserInfo: false,})wx.setStorageSync('phone', res.data.data.phoneNumber);if (self.data.nickname == '') {wx.request({url: app.SiteUrl + 'login',data: {phone: self.data.phone,password: 888888,openid: self.data.openid,},success: function (res) {if (res.data != null) {wx.showToast({title: "" + res.data.msg + "",icon: 'loading',duration: 2000})self.setData({user_id: res.data.data.user_id,isShowPhone: false,isShowUserInfo: true,})wx.setStorageSync('user_id', res.data.data.user_id);}}});}}},fail: function (err) {console.log(err);}})}})},

TP5接口

    //登陆时先判断用户是否存在,OPENID唯一值public function api_checkuser() {$attr = $this->getattr();$openid = trim($attr['openid']);$usercount = db('user')->where(['openid' => $openid])->count();if ($usercount!=0) {$usercheck = db('user')->where(['openid' => $openid])->find();$newid = $usercheck['id'];$phone = $usercheck['phone'];$nickname = $usercheck['nickname'];$avatarimg=$usercheck['avatarimg'];$tiptext = "0";} else {$newid='';$phone = '';$nickname = '';$avatarimg='';$tiptext = "1";}$json = $this->message(1,$tiptext,["user_id" => $newid,"phone" => $phone,"nickname" => $nickname,"avatarimg" => $avatarimg]);return $this->returnjson($json, $attr['callback']);}//登陆/注册public function api_login() {$attr = $this->getattr();$phone = trim($attr['phone']);$password = trim($attr['password']);$openid = trim($attr['openid']);$nickname = trim($attr['nickname']);$avatarimg = trim($attr['avatarimg']);$gender = trim($attr['gender']);$params = ["phone" => $phone,"password" => md5($password),"openid" => $openid,"nickname" => $nickname,"avatarimg" => $avatarimg,"gender" => $gender,"status" => 1,"create_time" => time(),];$newid = 0;try {$newid = db('user')->where(['openid' => $openid])->count() >= 1 ? true : false;if (!$newid) {$newid = db('user')->insert($params, false, true, "id");$tiptext = "注册成功";} else {$newid = db('user')->where(['openid' => $openid])->find();$newid = $newid['id'];$tiptext = "登陆成功";}} catch (Exception $ex1) {$json = $this->message(0, "网络错误,请刷新后再填写!");return $this->returnjson($json, $attr['callback']);} catch (PDOException $ex) {$json = $this->message(0, "网络错误,请刷新后再填写!");return $this->returnjson($json, $attr['callback']);}if ($newid <= 0) {$json = $this->message(0, "网络错误,请刷新后再填写!");return $this->returnjson($json, $attr['callback']);}$json = $this->message(1, $tiptext, ["user_id" => $newid]);return $this->returnjson($json, $attr['callback']);}//更新头像和昵称public function api_setUserInfo() {$attr = $this->getattr();$user_id = trim($attr['user_id']);$nickname = trim($attr['nickname']);$avatarimg = trim($attr['avatarimg']);$params = ["nickname" => $nickname,"avatarimg" => $avatarimg,];$newid = 0;try {$newid = db('user')->where(['id' => $user_id])->count() >= 1 ? true : false;//	echo($newid);if (!$newid) {//	$newid = db('user')->update(['nickname' => 'thinkphp','avatarimg'=>1])->where('id',$user_id);//	echo($newid);$tiptext = "更新失败";} else {//	$tiptext = "更新失败";$newid = db('user')->where(['id'=>$user_id])->update($params);$tiptext = "更新成功";}} catch (Exception $ex1) {$json = $this->message(0, "网络错误,请刷新后再填写!");return $this->returnjson($json, $attr['callback']);} catch (PDOException $ex) {$json = $this->message(0, "网络错误,请刷新后再填写!");return $this->returnjson($json, $attr['callback']);}if ($newid <= 0) {$json = $this->message(0, "网络错误,请刷新后再填写!");return $this->returnjson($json, $attr['callback']);}$json = $this->message(1, $tiptext, ["user_id" => $newid]);return $this->returnjson($json, $attr['callback']);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41070.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序中的权限设计

日常我们开发小程序的时候,经常需要考虑权限如何设计,比如在我的页面,管理员可以看到一些菜单,而普通用户可以看到另外一些菜单。那如何设计这种带权限的功能呢?本文就以低代码工具为例,看看低代码中是如何设计小程序的权限的。 1 权限表设计 在通用的RBAC模型中,角色…

chatgpt赋能python:Python画出物体的运动轨迹

Python画出物体的运动轨迹 Python是一种很流行的编程语言&#xff0c;主要用于数据处理、科学计算以及图形绘制。在这篇文章中&#xff0c;我们将探讨如何使用Python画出物体的运动轨迹。 介绍 物体的运动轨迹通常是我们需要关注的问题。当我们在研究物理、机械、运动学、航…

chatgpt赋能python:Python画三维轨迹图:一个引人注目的可视化工具

Python画三维轨迹图&#xff1a;一个引人注目的可视化工具 Python是一种十分适合数据分析及科学计算的编程语言&#xff0c;它的可视化功能非常强大&#xff0c;其中最为出色的一点就是画三维轨迹图。这种图表的本质是一种描绘物体运动轨迹的可视化效果&#xff0c;它可以直观…

英文面试常见问题及回答汇总

今天给大家奉上英文面试常见问题及回答的合集&#xff0c;英语面试主要就是学习如何用英语回答面试常见问题&#xff0c;英文面试常见问题说来说去其实重要的就那么几个&#xff0c;所以今天分享的英文面试常见问题及回答大家只要知道其套路&#xff0c;然后灵活运用就行了。 常…

我的性格类型—— INFP(哲学家型人格 )

测试日期&#xff1a;2019/6/9 基本描述 INFP (Introverted Feeling with Intuition)代表人物&#xff1a;卢梭 语录&#xff1a;虽然我的心既傲慢又温柔&#xff0c;我的性格柔弱&#xff0c;然而&#xff0c;我是不可战胜的。 才储分析&#xff1a;您的性格类型倾向为“…

什么是MBTI,16种人格类型详解

MBTI是Myers-Briggs Type Indicator的缩写&#xff0c;是一种经典的人格类型测评工具&#xff0c;通过对个体心理偏好的测试和分析。 MBTI人格理论认为&#xff0c;人类的人格特征可以从四个角度进行分析&#xff1a;认知功能、信息获取、决策方式和生活方式。每个角度都有两个…

什么是i人,mbti中的i型人格是怎么样的

i人是MBTI总的I型人格&#xff0c;也就是内向型人格&#xff08;Introversion&#xff09;&#xff0c;在MBTI中是其中一个维度。以下是i人的一些常见特征和倾向&#xff1a; 1、内向和独处&#xff1a;I型人格更倾向于独自思考和独处。他们通常从独立的思考和内省中获取精力和…

MBTI性格测试中的 INTP 型人格

摘要&#xff1a;熟悉心理学的朋友&#xff0c;对mbti都不会陌生。而intp&#xff0c;可以说是一种牌玩得好就是天才&#xff0c;玩得不好境遇会十分惨&#xff0c;两极分化很严重的类型。今天我们来讲讲intp型人格都有哪些特征吧。 先来看看intp类型的人一般的倾向性。 MBTI性…

AI风范,院士点赞丨北京人工智能峰会暨AI金雁奖颁奖典礼成功举办,实在智能再获AI金雁奖

4月14日&#xff0c;由中国电子商会人工智能委员会主办&#xff0c;中国创业者俱乐部、北京集智未来人工智能产业创新基地联合主办的“2023北京人工智能峰会暨AI金雁奖颁奖典礼”举行&#xff0c;汇聚了人工智能各领域的产学研专家、院士、人工智能企业代表近300人&#xff0c;…

危!这回,我真的失业了!

因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号&#xff0c;领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇&#xff1a;赞&#xff01;ChatGPT能接入微信了&#xff01; 大家好&#xff0c;…

智能化时代的软件工程:拥抱大模型的正确姿势

智能化时代 Foundation Model Software Engineering 软件工程 以ChatGPT为代表的大模型技术对于包括软件工程在内的很多领域都带来了巨大的冲击&#xff0c;也引发了广泛的焦虑。为了在迷雾中看清一点方向&#xff0c;近期我们基于各种技术文献和实践分享以及我们自身的一些初步…

Apple Watch 发布 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 24 日&#xff0c;中国航天日&#xff0c;在 1970 年的今天&#xff0c;中国第一颗卫星“东方红一号”发射升空。“东方红一号”是我国于 1970 年 4 月 24…

若依前后端分离 使用富文本编辑器 wangEditor

用于 Vue React | wangEditor 组件下载地址 有视频教程 vue版本 2的使用 进入项目cmd输入安装命令 yarn add wangeditor/editor 新建一个文件夹 新建一个文件名字为MyEditor <template><div><div><div class"header-height"><el-bu…

智能AI伪原创工具文章在线生成源码

​ 今天我将分享一个更有趣的PHP源码&#xff0c;您可以直接使文章在线伪原创&#xff0c;有需要的朋友可以尝试 它。 所有网站管理员朋友都必须对网站的原始内容感到头疼。 作为草根网站管理员&#xff0c;您不可能自己撰写原创文章。 当然&#xff0c;我并不是说您不能写一个…

百度编辑器ueditor的简单使用

最近刚被分配了以个消息发布的任务&#xff0c;其中用到了富文本编辑器。以前也用过&#xff0c;不过这次我选择的是百度富文本编辑器ueditor1_4_3-utf8-jsp版的。 其实看ueditor功能很强大&#xff0c;不过百度的设计还是很不错的。只需要稍微配置一下就可以用了。 首先下载到…

只需2步uniapp集成富文本编辑器wangEditor4

官网文档地址 首先安装 npm i wangeditor --save 使用 <div id"div1"><p>欢迎使用 <b>wangEditor</b> 富文本编辑器</p> </div>import E from wangeditoronReady() {this.initEditor() },/*** 初始化富文本编辑器*/ initEdi…

tui-editor富文本编辑器组件

tui-editor富文本编辑器 记录项目中使用富文本编辑器 安装 npm init & npm install --save tui-editor创建组件文档 tuieditor 在 default-options.js中 // doc: https://nhnent.github.io/tui.editor/api/latest/ToastUIEditor.html#ToastUIEditorexport default {minH…

ueditor 百度富文本编辑器后端配置(上传图片)

在前端已经写好的情况下进行以下操作 1&#xff0c;在public/assets/addons/ueditor内新建 config.json并加入以下代码 {"imageActionName": "uploadimage","imageFieldName": "upfile","imageMaxSize": 2048000,"im…

百度富文本编辑器UEditor配置及功能实现详解

当前功能基于PHP&#xff0c;其它语言流程大抵相同。 大概流程&#xff1a; 1. 将docx文件上传到服务器中 2. 使用PHPoffice/PHPword实现将word转换为HTML 3. 将HTML代码返回并赋值到编辑器中 1 编辑器配置修改 1.1 新增上传word json配置 在ueditor\php\config.json中新…

开源版ai智能写作软件源码 一键写作生成器 含完整搭建教程

分享一个开源版ai智能写作软件系统的源码&#xff0c;含详细的搭建教程&#xff0c;可以一键生成原创高质量文章。 它是一款人工智能对话系统&#xff0c;它可以聊天&#xff0c;写文章&#xff0c;写论文&#xff0c;写代码&#xff0c;写小说&#xff0c;创意策划&#xff0c…