获取微信绑定的手机号

小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写。

1.getPhoneNumber这个组件通过button来实现(别的标签无效)。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。

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

这个组件之前必须先调用login接口,如果没有调用login点击button时会提示先调用login。


2.html:

 wx.login({
           success: function (res) {
           //   console.log(res);
                if (res.code) {
                    //发起网络请求
                    wx.request({
                  
                      url: ''
                      data: {
                          code: res.code
                      },
                        
                      success: function (response) {
                          console.log(response);
                          var openId = response.data.openid;
                          var session_key = response.data.session_key;
                          var app = getApp();                    
                          app.globalData.openid = openId;
                          app.globalData.session_key = session_key;
                          typeof cb == "function" && cb()

                      }
                   })
                } else {
                    console.log('获取用户登录态失败!' + res.errMsg)
                }
            }
        });

 

3.通过bindgetphonenumber绑定的事件来获取回调。回调的参数有三个,

errMsg:用户点击取消或授权的信息回调。

iv:加密算法的初始向量(如果用户没有同意授权则为undefined)。

encryptedData: 用户信息的加密数据(如果用户没有同意授权同样返回undefined)

getPhoneNumber: function(e) {   
    
   var that=this;
    var session_key=app.globalData.session_key;

    if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
      wx.showModal({
        title: '提示',
        showCancel: false,
        content: '未授权',
        success: function (res) { }
      })
    } else {
      

      wx.checkSession({
        success: function () {
          console.log(1);
         wx.request({
            url: 'https://m.xianmaogame.com/sd_idiom/xcx/getPhoneNumber/demo.php',
            data: {
              encryptedData:e.detail.encryptedData,
              iv:e.detail.iv,
              sessionKey:session_key
            },
            method: 'GET',
            success: function (res) {
              console.log('获取手机号码成功');
              console.log(res);
            }
          })
        },
        fail: function () {
          console.log(2);
          wx.login({
            success: function (res) {
              if (res.code) {
                //发起网络请求
                wx.request({
                  url: ''
                  data: {
                    code: res.code
                  },
                  success: function (response) {
                    var openId = response.data.openid;
                    var session_key = response.data.session_key  
                    wx.request({
                      url: '',
                      data: {
                        encryptedData: e.detail.encryptedData,
                        iv: e.detail.iv,
                        sessionKey: session_key
                      },
                      method: 'GET',
                      success: function (res) {
                        console.log('获取手机号码成功');
                        console.log(res);
                      }
                    })
                  }
                })
              } else {
                console.log('获取用户登录态失败!' + res.errMsg)
              }
            }
          });      
        }
      })
    }

    
  } 

 

4.最后我们需要根据自己的业务逻辑来进行处理,如果用户不同意授权的话可能我们会有一个让他手动输入的界面,如果不是强制获取手机号的话可以直接跳转页面进行下一步。(用户不同意授权errMsg返回‘getPhoneNumber:fail user deny’)
5.用户同意授权,我们可以根据login时获取到的code来通过后台以及微信处理拿到session_key,最后通过app_id,session_key,iv,encryptedData(用户同意授权errMsg返回‘getPhoneNumber:ok’)

6.解密的方法可以去微信官方开发文档查看,有很详细说明。
原文:https://blog.csdn.net/weixin_38984353/article/details/80484951

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值