微信小程序获取手机号授权登录详解

说明

获取微信用户绑定的手机号,需先调用login接口。

因为需要用户主动触发才能发起获取手机号接口,所以该功能不由 API 来调用,需用 <button> 组件的点击来触发。 

注意:目前该接口针对非个人开发者,且完成了认证的小程序开放。需谨慎使用,若用户举报较多或被发现在不必要场景下使用,微信有权永久回收该小程序的该接口权限。

使用方法

需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。 

注意

在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

例子

返回参数说明

参数 类型 说明
encryptedData String 包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法
iv String 加密算法的初始向量,详细见加密数据解密算法

encryptedData 解密后为以下 json 结构,详见加密数据解密算法

参数 类型 说明
phoneNumber String 用户绑定的手机号(国外手机号会有区号)
purePhoneNumber String 没有区号的手机号
countryCode String 区号

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


[html]  view plain  copy
  1. <span style="font-size:14px;"><button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button></span>    
2.在使用这个组件之前必须先调用login接口,如果没有调用login点击button时会提示先调用login。
[html]  view plain  copy
  1. App({    
  2.     onLaunch: function () {    
  3.         wx.login({    
  4.             success: function (res) {    
  5.                 if (res.code) {    
  6.                     //发起网络请求    
  7.                     console.log(res.code)    
  8.                 } else {    
  9.                     console.log('获取用户登录态失败!' + res.errMsg)    
  10.                 }    
  11.             }    
  12.         });    
  13.     }    
  14. })    

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

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

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

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




[html]  view plain  copy
  1. getPhoneNumber: function(e) {     
  2.     console.log(e.detail.errMsg)     
  3.     console.log(e.detail.iv)     
  4.     console.log(e.detail.encryptedData)     
  5.     if (e.detail.errMsg == 'getPhoneNumber:fail user deny'){    
  6.       wx.showModal({    
  7.           title: '提示',    
  8.           showCancel: false,    
  9.           content: '未授权',    
  10.           success: function (res) { }    
  11.       })    
  12.     } else {    
  13.       wx.showModal({    
  14.           title: '提示',    
  15.           showCancel: false,    
  16.           content: '同意授权',    
  17.           success: function (res) { }    
  18.       })    
  19.     }    
  20.   }    

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

5.用户同意授权,我们可以根据login时获取到的code来通过后台以及微信处理拿到session_key,最后通过app_id,session_key,iv,encryptedData(用户同意授权errMsg返回‘getPhoneNumber:ok’)

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










猜你喜欢

转载自blog.csdn.net/mazegong/article/details/80262972