微信小程序获取当前用户手机号

获取用户的基本信息

可以使用 wx.getUserInfo 或者 <button open-type="getUserInfo"/>

在小程序开发中,wx.getUserInfo 接口可以获取到一些当前微信用户的一些基本信息,但是没法获取手机号,那是因为手机号等敏感信息,微信对用户隐私有严格限制。

获取用户手机号

由于获取手机号属于用户敏感隐私信息,所以微信对这方面有一定限制。

1、首先要去微信公众平台里面的隐私协议里面完善“用户隐私保护指引”

ps:如果已经完善了的可以忽略这一步;更新后微信那边会审核,需要等一下,所以在开发前一定要去完善。

2、使用 button 标签里面的 getPhoneNumber 获取动态令牌 code

<button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNumber">获取手机号</button>

注意:这里获取的 code 和 wx.login 获取的 code 是不一样的

  • 登录 code:通过 wx.login() 获取,用于换取 session_key
  • 动态令牌 code:通过 getPhoneNumber 返回(旧版接口返回 encryptedData,新版返回动态 code)。

旧版接口是需要通过获取 encryptedData、iv、code(wx.login获取)传给后端去解密换取手机号,兼容低版本微信客户端

  // 旧版获取手机号
  onGetPhoneNumber(e) {
    if (e.detail.errMsg === "getPhoneNumber:ok") {
      const encryptedData = e.detail.encryptedData;
      const iv = e.detail.iv;
      
      // 优先使用之前保存的code
      const code = this.data.code || '';
      
      // 如果没有有效的code,则重新调用login获取
      if (!code) {
        wx.login({
          success: (loginRes) => {
            this.getUserPhoneNumber(loginRes.code, encryptedData, iv);
          }
        });
      } else {
        this.getUserPhoneNumber(code, encryptedData, iv);
      }
    } else {
      // console.log("用户拒绝授权");
    }
  },

新版接口相对来说就会简单一些,通过获取动态 code 调用微信接口 phonenumber.getPhoneNumber 换取手机号(无需 session_key 解密,微信服务器直接返回明文手机号),仅需支持微信 7.0.0+ 版本。

  // 获取手机号
  onGetPhoneNumber(e) {
    if (e.detail.errMsg === "getPhoneNumber:ok") {
      // 获取动态 code
      const { code } = e.detail;
      // 调用后端接口获取用户手机号
      wx.$http2
        .getUserPhoneNumber({
          code,
        })
        .then((res) => {
          // 此时后端就会把手机号返回
        });
    } else {
      // console.log("用户拒绝授权");
    }
  },
接口类型前端返回参数后端解密方式适用场景
旧版接口encryptedDataiv使用 session_key 解密兼容低版本微信客户端
新版接口动态 code直接调用微信接口换取手机号仅需支持微信 7.0.0+ 版本

Numb息

不管是新版还是旧版,前端都是使用 getPhoneNumber 去获取信息,主要取决于后端的解密方式

下面是 getPhoneNumber 获取到的信息:

如果点击的时候报错,那就是没有在隐私协议中完善信息或者微信那边还没通过

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值