微信小程序获取手机号受权登陆

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


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


<span style="font-size:14px;"><button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button></span>
2.在使用这个组件以前必须先调用login接口,若是没有调用login点击button时会提示先调用login。
App({  
    onLaunch: function () {  
        wx.login({  
            success: function (res) {  
                if (res.code) {  
                    //发起网络请求  
                    console.log(res.code)  
                } else {  
                    console.log('获取用户登陆态失败!' + res.errMsg)  
                }  
            }  
        });  
    }  
})

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

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

iv:加密算法的初始向量(若是用户没有赞成受权则为undefined)。微信

encryptedData: 用户信息的加密数据(若是用户没有赞成受权一样返回undefined)网络




getPhoneNumber: function(e) {   
    console.log(e.detail.errMsg)   
    console.log(e.detail.iv)   
    console.log(e.detail.encryptedData)   
    if (e.detail.errMsg == 'getPhoneNumber:fail user deny'){  
      wx.showModal({  
          title: '提示',  
          showCancel: false,  
          content: '未受权',  
          success: function (res) { }  
      })  
    } else {  
      wx.showModal({  
          title: '提示',  
          showCancel: false,  
          content: '赞成受权',  
          success: function (res) { }  
      })  
    }  
  }

4.最后咱们须要根据本身的业务逻辑来进行处理,若是用户不一样意受权的话可能咱们会有一个让他手动输入的界面,若是不是强制获取手机号的话能够直接跳转页面进行下一步。(用户不一样意受权errMsg返回‘getPhoneNumber:fail user deny’)

5.用户赞成受权,咱们能够根据login时获取到的code来经过后台以及微信处理拿到session_key,最后经过app_id,session_key,iv,encryptedData(用户赞成受权errMsg返回‘getPhoneNumber:ok’)session

6.解密的方法能够去微信官方开发文档查看,有很详细说明。