微信小程序获取用户信息

个人博客

微信小程序获取用户信息

个人微信公众号,求关注,求收藏,求指错。

文章概叙

本文主要讲的是小程序获取用户信息的,更新测试时间是2023-10-25

更改原因

首先,官网上的解释是这样的,为了安全合规,检验用户的微信名称以及用户的头像,所以修改了小程序获取用户基本信息的方式。

根据相关法律法规,为确保信息安全,由用户上传的图片、昵称等信息微信侧将进行安全检测,组件从基础库2.24.4版本起,已接入内容安全服务端接口(mediaCheckAsync、msgSecCheck),以减少内容安全风险对开发者的影响。

获取逻辑

获取用户的微信头像,依旧需要用户手动的触发,所以需要使用Button组件 ,并设置open-type类型为chooseAvatar ,寓意为获取选择头像,接着再绑定我们的chooseavatar事件来获取我们的信息。在我们不知道的地方,发生的事情就是小程序会将用户的头像进行安全检测,如果成功的话就会返回到绑定的chooseavatar事件中,不成功则无法获取。

获取用户的昵称,依旧是需要用户手动的触发,但是不再使用按钮组件,而是使用Input组件 ,但是需要将Input组件的type设置为nickname ,这样子,当onBlur事件触发的时候,我们就可以获取到用户提供给我们的信息,而当我们使用onBlur事件的时候,如果不用表单,很容易跟别的按钮的bindTap事件发生冲突,触发bindTap事件在先,onBlur事件在后,因此就需要再使用一个form表单包裹起来。

接下来,将代码放出来。

代码实例

wxml文件如下

javascript 复制代码
<view class="userprofile_container" data-weui-theme="{{theme}}">
  <mp-toptips msg="{{error}}" type="error" show="{{error}}"></mp-toptips>
  <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
    <image class="avatar" src="{{avatarUrl}}"></image>
  </button>
  <form id="form" bindsubmit="saveUserInfo">
    <input type="nickname" class="single_input" name="nickName" placeholder="请输入昵称" />
    <button class="weui-btn btn" type="primary" form-type="submit">确认</button>
  </form>
​
</view>

文章中最主要的两行,分别是第四行到第六行的获取用户头像,第七行到第十行的获取用户的昵称,实现的逻辑在获取逻辑的章节也写清楚了。

index.ts

javascript 复制代码
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
Page({
  data: {
    redirectUrl: '',
    avatarUrl: defaultAvatarUrl,
    userInfo: {},//用户的信息
    error: '',
    rules: [{
      name: 'nickName',
      rules: { required: true, message: '请输入昵称' },
    }],
    theme: wx.getSystemInfoSync().theme,
  },
  formInputChange(e:any) {
    const { field } = e.currentTarget.dataset
    this.setData({
      [`userInfO.${field}`]: e.detail.value
    })
  },
  onLoad(e) {
    console.log(e);
    wx.onThemeChange((result) => {
      this.setData({
        theme: result.theme
      })
    })
  },
  //获取用户的头像
  onChooseAvatar(e:any) {
    const { avatarUrl } = e.detail
    this.setData({
      avatarUrl,
    })
  },
  //保存用户信息
  async saveUserInfo(e: any) {
    const { nickName } = e.detail.value;
    const { avatarUrl } = this.data;
    if (!nickName) {
      wx.showToast({
        icon: "none",
        title: "请输入您的昵称!"
      })
      return
    }
    if (!avatarUrl) {
      this.setData({
        error: '用户头像不能为空'
      })
      return
    }
    // 保存到app.ts
    getApp().globalData.userInfo = { nickName, avatarUrl };
  //回去来之前的页面
    if (this.data.redirectUrl.match("mine")) {
      wx.switchTab({
        url: this.data.redirectUrl
      })
    }
    wx.redirectTo({
      url: this.data.redirectUrl
    })
  }
})

最主要的代码如下

javascript 复制代码
  //获取用户的头像
  onChooseAvatar(e:any) {
    const { avatarUrl } = e.detail
    this.setData({
      avatarUrl,
    })
  },

对应的是wxml文件中,获取用户的头像,将用户的头像路径设置在我们的data中,因为返回的是https开头的头像路径,所以不用考虑长度问题。

javascript 复制代码
 async saveUserInfo(e: any) {
    const { nickName } = e.detail.value;
    const { avatarUrl } = this.data;
    if (!nickName) {
      wx.showToast({
        icon: "none",
        title: "请输入您的昵称!"
      })
      return
    }
    if (!avatarUrl) {
      this.setData({
        error: '用户头像不能为空'
      })
      return
    }

而这一段代码,当用户点击了Button的时候,获取到form表单的数据,并且将获取到的头像还有用户昵称做校验。而因为我们是从其他的页面跳转过来的,因此需要跳转回去。

最终效果

吐槽

从18年开始,小程序从一开始的getUserInfo到中间的按钮获取,再到现在,感觉一改再改...真的是学习永无止境...

相关推荐
计算机毕设指导620 小时前
基于微信小程序的校园食堂点餐系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
项目題供诗21 小时前
微信小程序黑马优购(项目)(八)
微信小程序·小程序
Chloe.Zz1 天前
微信小程序接入大模型实战 4:塔罗咨询室(含代码)
语言模型·微信小程序·小程序
风月歌1 天前
小程序项目之“健康早知道”微信小程序源码(java+小程序+mysql)
java·微信小程序·小程序·毕业设计·源码
ee82ee2 天前
uniapp小程序底部键盘唤起问题处理,包含间隙处理,动画处理
微信小程序
qq_12498707532 天前
基于springboot健康养老APP的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·微信小程序·毕业设计
夏源2 天前
【微信小程序】实现引入 Echarts 并实现更新数据
微信小程序
猿究院_xyz2 天前
微信小程序与echarts联动安卓真机测试出现黑色阴影
前端·javascript·微信小程序·小程序·echarts
李慕婉学姐2 天前
基于微信小程序的运动会信息管理系统k6kqgy34(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·微信小程序·小程序
咸虾米_2 天前
uniapp+unicloud实战项目,九两酒微信小程序商城及后台管理系统前后端部署运行步骤
微信小程序·uni-app·uniapp实战项目·unicloud云开发·vue3后台管理