IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信小程序获取用户头像昵称手机号最新版 -> 正文阅读

[移动开发]微信小程序获取用户头像昵称手机号最新版

微信小程序获取用户头像昵称手机号最新版

1. 微信又双叒叕改了获取用户头像和昵称的接口

小程序用户头像昵称获取规则调整公告

这里我们通过uniapp的方式展示,通过弹窗的方式来实现用户登录授权、获取昵称、头像

第一次弹窗,获取用户手机号,做自动登录使用

第二次弹窗,让用户补全头像、昵称信息,便于用户在系统中操作

这里还有两个小坑

  1. 注意基础库的版本 2.21.2 版本开始支持

  2. type=nickname的input通过:value的方式获取不到
    需要通过 @blur绑定的事件才能获取

2. 效果图

话不多说先贴图。

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

3. 微信获取手机号弹窗

   <u-modal v-model="showAuthorizePhone" :show-title="false"
                 :show-confirm-button="false">
            <view class="slot-content">
                <div class="auth-card">
                    <div class="img">
                        <img class="avatar-img"
                               src="@/static/logo-min.png"
                               mode="widthFix">
                    </div>
                    <div class="title">{{bname}}</div>
                    <div class="content">申请获得您的手机号</div>
                </div>
                <div class="auth-btncard">
                    <div class="btn-unok"><u-button :hair-line='false' :custom-style="customStyleUnOk" @click="showAuthorizePhone=false"> 拒绝</u-button></div>
                    <div class="btn-ok"><u-button :hair-line='false' :custom-style="customStyleOk" open-type="getPhoneNumber" @getphonenumber="authPhone"> 允许</u-button></div>
                </div>
            </view>
        </u-modal>

4. 微信获取用户头像昵称弹窗

<u-modal v-model="showAuthorizeUser" :show-title="false"
                 :show-confirm-button="false">
    <view class="slot-content">
        <div class="auth-card">
            <div class="img">
                <img class="avatar-img"
                     src="/static/logo-min.png"
                     mode="widthFix">
            </div>
            <div class="title">{{bname}}</div>
            <div class="content">邀请您补全个人信息<br></br>(昵称、头像)</div>
        <div style="margin-left: 100rpx;margin-right: 100rpx">
            <u-form :model="user" ref="uForm">
                <u-form-item label="头像">
                    <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar" slot="right">
                        <image class="avatar" :src="user.avatarUrl"></image>
                    </button>
                </u-form-item>
                <u-form-item label="昵称">
                    <input type="nickname" class="weui-input" @blur="userNameInput" placeholder="请输入昵称"/>
                </u-form-item>
            </u-form>
        </div>
        </div>
    <div class="auth-btncard">
        <div class="btn-unok"><u-button :hair-line='false' :custom-style="customStyleUnOk" @click="showAuthorizeUser=false"> 拒绝</u-button></div>
        <div class="btn-ok"><u-button :hair-line='false' :custom-style="customStyleOk" @click="authUser"> 允许</u-button></div>
    </div>
    </view>
</u-modal>

5. 逻辑部分

微信登录的逻辑如下:

  1. 进入页面先静默获取code。后续需要获取code去后台换用户的手机号。打开授权手机号的弹窗
  2. 用户在授权手机号的弹窗点击允许后,拿code去获取用户的手机号,完成注册功能。并且把返回的用户信息放入userinfo的缓存中。然后判断用户有无头像信息,如果没有就打开授权用户头像昵称的弹窗。
  3. 用户通过chooseAvatar的button获取微信头像或者自定义上传头像
  4. 用户通过nickname的input的@blur方法获取昵称。然后保存给用户
export default {
    data() {
        return {
            user:{   avatarUrl:'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0',
                nickName:'',
            },
            hasUserInfo:false,
            
            // 用户基本信息
            userInfo: null,
            // 微信,支付宝用户code
            code: '',
            // 是否弹出登录注册授权弹窗
            showAuthorizeUser: false,
            showAuthorizePhone: false,
        }
    },
     onShow() {
         this.getWxCode()
         setTimeout(() => {
             this.showAuthorizePhone = true
         }, 100);
    },
    methods: {
          // 静默获取code
        async getWxCode() {
            const loginResult = await uni.login()
            const { code } = loginResult[1]
            this.code = code
            console.log('-------------------code', code)
        },
        //获取昵称输入内容
        userNameInput(e){
            this.user.nickName = e.detail.value
        },
        onChooseAvatar(e) {
            console.log('头像信息》')
            console.log(e)
            this.user.avatarUrl = e.detail.avatarUrl;
        },
        authPhone(e){
            let _this = this
            const { errMsg, iv, encryptedData } = e.detail;
            if (errMsg !== 'getPhoneNumber:ok') return;
            let data = {
                code: this.code,
                encryptedData: encryptedData,
                iv: iv
            }
            console.log('----------登陆中')
            this.$api.register(data, res => {
                console.log('微信登录返回结果========')
                if(res.data.data.avatarurl){
                    _this.hasUserInfo = true;
                    _this.userInfo = res.data.data;
                }else{
                    _this.showAuthorizeUser = true
                }
                uni.setStorageSync('userInfo', res.data.data)
                setTimeout(() => {
                    _this.$interactive.toast('登陆成功')
                }, 300);
                console.log('---------登陆成功')
            })
            this.showAuthorizePhone = false
        },
        authUser(){
            let userInfo = uni.getStorageSync('userInfo')
            if(this.user.nickName==''){
                this.$interactive.toast('请输入您的昵称!')
                return;
            }
            userInfo.avatarurl = this.user.avatarUrl;
            userInfo.nickname =  this.user.nickName;
            this.userInfo = userInfo;
            uni.setStorageSync('userInfo', userInfo)
            this.user.id = userInfo.id;
            this.$api.saveUserInfo(this.user, res => {
                this.hasUserInfo = true;
                this.showAuthorizeUser = false;
            },res =>{})
        },
        openAuth(){
            let userInfo = uni.getStorageSync('userInfo')
            console.log('userInfo>>>>>>>>>>>>>>>>>>>>>')
            console.log(userInfo)
            if(userInfo){
                this.showAuthorizeUser = true;
            }else{
                this.showAuthorizePhone = true;
            }
        }
    }
}        

6.结尾

下一篇:

? 微信支付宝双端兼容授权手机号

? springboot微信支付宝双端兼容授权手机号后台接口(待完善)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:46:08  更:2022-10-17 12:47:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:02:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码