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

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

浏览量:593 时间: 来源:mazegong

说明

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

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

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

使用方法

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

注意

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

例子

返回参数说明

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

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

参数类型说明
phoneNumberString用户绑定的手机号(国外手机号会有区号)
purePhoneNumberString没有区号的手机号
countryCodeString区号

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.解密的方法可以去微信官方开发文档查看,有很详细说明。










版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎