微信小程序如何获取头像、昵称和手机号(含源代码下载)

1、wx.getUserProfile获取不到头像和昵称

最近一些开发员发现,在真机环境,小程序里使用wx.getUserProfile获取不到头像和昵称了。这是因为微信调整了获取用户头像昵称的规则。
在这里插入图片描述

微信建议使用“头像昵称填写能力”来获取头像和昵称。

2、关键代码

2.1、WXML

    <view>
        <view>
            <text class="title" style="float:left;margin-top: 10px;">头像</text>
            <image wx:if="{{bean['avatarUrlType'] == 1}}" class="avatarUrl"  src="{{bean['avatarUrl']}}" ></image>

            <image wx:if="{{bean['avatarUrlType'] != 1}}" class="avatarUrl"  src="{{baseUrl + bean['avatarUrl']}}" ></image>

            <van-button round type="primary" size="small" 
                    style="border:none;"
                    open-type="chooseAvatar"
                    bind:chooseavatar="onChooseAvatar"
                    style="border:none;float:right;">获取微信头像                
            </van-button>            
        </view>

        <view >
            <text class="title" decode="true">昵称</text>

            <input type="nickname" value="{{bean.nickName}}" bindinput="handleChangeInput"
                   data-field="nickName"
                   maxlength="30"
                   placeholder="请输入昵称"></input>
                   
        </view>

        <view >
            <text class="title" decode="true">手机号</text>
            <input class="input" type="number" value="{{bean['phone']}}" bindinput="onInput"
                   data-field="phone"
                   maxlength="11"
                   placeholder="请输入手机号"></input>
            </van-button>
        </view>
        
        <view >
          <van-button type="info"  class='container-row container-btn-bottom mt-15 btn-opentype  btn-share'
                  style="border:none;margin-top:30px;width:40%"
                  catchtap="userInfoUpdateSelect" block>保存
          </van-button>        
        </view>
    </view>

2.2、JS


var cameraUtil = require("../../utils/camera");
var app = getApp();
Page({
    data: {
        baseUrl: uriUtil.BASE_URL,
        bean: null,
    },

    onShow: function () {
        //let that = this;
        //获取我的个人信息
        this.getMyDataList();

    },
    getMyDataList: function () {
        //从后台获取我的个人信息
    },



    bindgetphonenumber: function (e) {
      //获取微信的手机号
      let that = this;
      let encryptedData = e.detail['encryptedData'];
      let iv = e.detail['iv'];
      if (e.detail['errMsg'] !== 'getPhoneNumber:ok') {
          return;
      }

      wx.login({
          success(res) {
              if (res.code) {
                  httpUtil.postReqAndShowLoading(uriUtil.decriptPhone, {
                      encryptedData: encryptedData,
                      iv: iv,
                      loginCode: res.code
                  }, function (flag, res) {
                      if (flag) {
                          if (res['data']['purePhoneNumber']) {
                            console.info("获取到手机号:" + res['data']['purePhoneNumber']);
                            that.setData({
                              "bean.phone": res['data']['purePhoneNumber']
                            });
  
                          }else {
                            console.info("获取手机号失败,请重试");
                          }

                      } else {
                          publicUtil.showTipError(res.msg)
                      }
                  });
              }
          }
      });
    },

    handleChangeInput : function (e) {
      
      let that = this;
      let field = e.currentTarget.dataset.field;
      let value = e.detail.value;
      let bean = that.data.bean;
      bean[field] = value.trim();
      that.setData({
          bean: bean
      });

    },

    /**
     * 微信选择头像
     */
    onChooseAvatar(e) {
      let that = this;

      const { avatarUrl } = e.detail;
      console.info("头像地址:" + avatarUrl);

      that.setData({
        "bean.avatarUrl": avatarUrl,
        "bean.avatarUrlType": 1
      });

      // wx.hideLoading();
      // wx.hideToast();

      let localImageArr = [];
      localImageArr.push(avatarUrl);
      cameraUtil.uploadImage(localImageArr, 'avatarUrl', function (imgArr) {
        if (imgArr && imgArr.length > 0) {
            console.info("上传后的图片地址:" + imgArr[0]['path']);
            that.setData({
              "bean.avatarUrl":   imgArr[0]['path'],
              "bean.avatarUrlType": 2,          //头像来自本机
            });
        }
      } );


    },
});

3、截图

  • 主页
    获取信息主页

  • 点击获取微信头像,显示出头像供选择,也可以从相册选择,或者拍照
    在这里插入图片描述

  • 点击昵称输入栏,在键盘框上面可以看到 微信获取的昵称,点击即可填入到输入框。
    在这里插入图片描述

  • 点击“获取手机号”,可以弹出微信读取到的手机号
    在这里插入图片描述

4、注意事项

  • 微信开发工具的软件环境和真机环境是不一样的, 这种功能都是在真机环境下做验证为准。
  • 头像填写能力,微信给的是一个以 wxfile://tmp 开头的临时文件, 自己需要上传图片到后端服务器做保存处理。

5、代码下载

点击下载

6、参考

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

头像昵称填写能力

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码递夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值