前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TP框架集成微信小程序getPhoneNumber获取手机号功能

TP框架集成微信小程序getPhoneNumber获取手机号功能

作者头像
沈唁
发布2018-05-24 17:09:42
2.4K0
发布2018-05-24 17:09:42
举报
文章被收录于专栏:沈唁志

小程序中也有使用手机号作为验证手段的地方,今天又写了一个接入考拉信用查询个人信用分的项目,封装成为小程序,查询信用分需要手机号、姓名、身份证号,所以我直接使用微信官方给提供的 API 直接调用微信绑定的手机号, 也省得发送验证码的钱了~ 这个集成之前写小程序的时候就已经写好了,今天发出来。 

说明

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

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

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

使用方法

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

代码语言:javascript
复制
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>

TP 框架集成

返回的参数是加密的,需要进行解密,同样微信官方也提供了加密数据解密算法,demo 在文末的相关文档中进行下载。

接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和 unionId ),接口的明文内容将不包含这些敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptedData )进行对称解密。 解密算法如下:

  1. 对称解密使用的算法为 AES-128-CBC,数据采用 PKCS#7 填充。
  2. 对称解密的目标密文为 Base64_Decode(encryptedData)。
  3. 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是 16 字节。
  4. 对称解密算法初始向量 为 Base64_Decode(iv),其中 iv 由数据接口返回。

demo 下载后将 wxBizDataCrypt.php 和 errorCode.php 放到自定义目录吧,我是放在 Public 下面了,控制器里写方法,引入文件

代码语言:javascript
复制
/**
 *
 * TP 框架集成微信小程序 getPhoneNumber 获取手机号功能 | 沈唁志
 * 博客地址:https://qq52o.me/1855.html
 */
	    public function Number()
	    {
	      include_once ("./Public/Home/Number/wxBizDataCrypt.php"); //引入 wxBizDataCrypt.php 文件
	      $appid = '你的小程序 appid';
	      $sessionKey = I('get.sessionKey');
	      $encryptedData= I('get.encryptedData');
	      $iv = I('get.iv');
	      
	      $pc = new \WXBizDataCrypt($appid, $sessionKey); //注意使用\进行转义
	      $errCode = $pc->decryptData($encryptedData, $iv, $data );
	      
	      if ($errCode == 0) {
	          print($data . "\n");
	      } else {
	          print($errCode . "\n");
	      }
	    }

小程序请求

小程序请求部分中需要 json 字符串转对象,可查看这篇文章。小程序 getPhoneNumber 获取手机号中 json 字符串转对象

代码语言:javascript
复制
  getPhoneNumber: function (e) {
    var that = this;
    wx.request({
      url: 'https://www.yoursite.com/index.php/Home/Api/Number', //换成你的域名
      data: {
        sessionKey: app.globalData.session_key, //全局变量中的 sessionKey
        encryptedData: e.detail.encryptedData,  //包括敏感数据在内的完整用户信息的加密数据
        iv: e.detail.iv
      },
      header: {
        'content-type': 'application/json'
      },
      success: function (res) {
/**
 * 小程序 getPhoneNumber 获取手机号中 json 字符串转对象 | 沈唁志
 * 博客地址:https://qq52o.me/1638.html
 */
        var jsonStr = res.data;
        jsonStr = jsonStr.replace(" ", "");
        if (typeof jsonStr != 'object') {
          jsonStr = jsonStr.replace(/\ufeff/g, "");
          var sy = JSON.parse(jsonStr);
          res.data = sy;
        }
        that.setData({
          numbers: res.data,
        })
        // console.log(res.data.purePhoneNumber);
      }
    })
  },

这样就可以省去小程序中获取验证码的步骤了,简单快捷,毕竟微信绑定手机是每个正常人都会去做的。我只能说我白写一下午小程序了 好气 没办法 老板任性,过两天分享 wx.login 登陆接口。


2018 年 3 月 21 日补充:

公司通知我获取不到手机号了,上来看看,发现线上接口 API 文件是好的,去找解码文件没了,传上去以后还是报错,仔细看了一下是函数报错。删除以后解决问题,so,用不上以下代码啦

代码语言:javascript
复制
        var jsonStr = res.data;
        jsonStr = jsonStr.replace(" ", "");
        if (typeof jsonStr != 'object') {
          jsonStr = jsonStr.replace(/\ufeff/g, "");
          var sy = JSON.parse(jsonStr);
          res.data = sy;

调用接口直接就可以拿到手机号,特此补充。

相关文档

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:TP框架集成微信小程序getPhoneNumber获取手机号功能

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 使用方法
  • TP 框架集成
  • 小程序请求
  • 相关文档
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档