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

这篇具有很好参考价值的文章主要介绍了微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

 解决方案

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

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

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

 

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

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

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

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

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

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

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 = this
        wx.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 = this
        if (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 = this
        wx.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获取成功,保存为当前页面的全局变量code
        wx.login({
            success: res => {
                this.setData({
                    code: res.code
                })
            },
            fail: res => {
                //失败
            }
        })
    },
    getPhoneNumber: function (e) {
        // 登录
        wx.showLoading({
            title: '加载中...'
        })
        var self = this
        wx.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接口文章来源地址https://www.toymoban.com/news/detail-513278.html

    //登陆时先判断用户是否存在,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']);
	}
	

到了这里,关于微信小程序授权登录wx.getUserProfile获取不到昵称及头像解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序:授权登录获取手机号及获取基本信息等

    微信文档 1)需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,通过 getphonenumber 事件获取回调信息; 2)将 getphonenumber 事件回调中的动态令牌code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机

    2024年02月06日
    浏览(36)
  • 微信小程序中如何获取用户手机号授权登录

    随着微信小程序的普及,许多应用程序需要用户登录才能提供更好的服务。而获取用户手机号码是验证用户身份和确保账户安全的重要步骤之一。因此,在本文中,我们将介绍如何在微信小程序中实现手机号授权登录。 首先,在小程序后台开发设置中勾选“获取手机号”选项

    2024年02月11日
    浏览(76)
  • uniapp微信小程序授权登录并获取手机号

    新版:前端要授权两次,一次获取用户信息授权码code,另外一次获取用户手机授权码code,全部传给后端。后端通过用户信息授权码获取openid,通过手机授权码获取手机号码。老版:前端传给后端授权码code和用户手机授权回调 里的iv和encryptedData给后端,后端通过code获取ope

    2024年02月11日
    浏览(68)
  • 微信小程序:登录授权,根据手机号获取凭证,获取用户手机号

    1.微信小程序授权 controller 层代码 wxUtils 工具类 2.微信小程序,用户手机号获取 微信小程序,根据code(code为手机号获取凭证)获取用户加密手机号 获取用户手机号方法

    2024年02月14日
    浏览(42)
  • 微信小程序授权登录(含获取基本信息及绑定的手机号)

    1、授权获取微信个人信息 2、调用 wx.login() 获取临时登录凭证code 3、用code调用接口换取用户唯一标识openId、用户在微信开放平台账号下的唯一标识unionId和会话密钥session_key (1)前端获取 注意点 :正常开发中不会通过这种方法获取,会通过后台获取调用微信公众平台接口获

    2024年02月09日
    浏览(34)
  • .NET6使用微信小程序授权登录,获取手机号

    1.在appsettings配置你的小程序配置信息 2.请求接口时先获取Access_token 3.授权时获取手机号 4.微信接口要求必须使用Post请求方法 //小程序官方文档 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html

    2024年02月13日
    浏览(34)
  • 微信小程序实现登录授权,并将获取到的用户授权信息存储到数据库中

    官方开发文档 注意:在实现授权登录时,不要使用测试号进行 wx.getUserProfile使用文档 config文件代码如下 路由模块 主要代码(如果不想多个文件,可以将wxuserHandle.wxuser这个位置内容替换为exports.wxuser的内容) 注意: 在返回token的字符串拼接时,Bearer 后面必须有一个空格 数据

    2024年02月10日
    浏览(39)
  • 基于uniapp+java实现微信小程序无感登录,授权手机号登录,获取昵称头像,获取定位信息

    使用uniapp开发微信小程序,避免不了微信登录。但自动微信2022年升级了api版本后,不再允许返回昵称和头像信息,所以才出现无感登录或授权手机号登录。实现方式大同小异。 java后端所需maven 前端实现代码: 由于使用uni.login并不需要用户授权,所以能做到无感登录。 后端

    2024年02月16日
    浏览(40)
  • 微信小程序获取用户的openid以及授权登录拿到用户头像及姓名

    在微信小程序中,往往需要将用户信息录入自己的数据库中,就得有一个唯一标记区分用户,这个标记就是openid。 我这里用云函数的方式,比较简单 先创建一个名为getOPenid的云函数  在云函数中获取微信调用上下文cloud.getWXContext  可选择性的返回openid、appid、unionid等,可详细查

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包