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

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

说明

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

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

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

使用方法

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

<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 下面了,控制器里写方法,引入文件

/**
 *
 * 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 字符串转对象

  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,用不上以下代码啦

        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获取手机号功能

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿

SSL 证书部署过程

本文演示环境 操作系统(64位):Ubuntu 16.04 CentOS 7.3 服务器软件:Nginx和Apache SSL证书:DV SSL 域名:19...

1.5K60
来自专栏跟着阿笨一起玩NET

关于.NET邮件的收发问题总结

转载:http://www.cnblogs.com/ustbwuyi/archive/2007/05/28/762581.html

6920
来自专栏Kubernetes

聊聊你可能误解的Kubernetes Deployment滚动更新机制

Author: xidianwangtao@gmail.com 定义Deployment时与rolling update的相关项 以下面的frontend...

52180
来自专栏云计算教程系列

如何在Debian 9中为Apache创建自签名SSL证书

TLS或传输层安全性及其前身SSL(代表安全套接字层)是用于将正常流量包装在受保护的加密包装中的Web协议。

20820
来自专栏大内老A

在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail

在项目开发中,发送邮件时一种非常常见的功能。一般的情况下,大型的公司都有自己的邮件系统,我们可以直接通过公司的Pop/SMTP Server进行邮件的发送和接收...

21690
来自专栏FreeBuf

对登录中账号密码进行加密之后再传输的爆破的思路和方式

一. 概述 渗透测试过程中遇到web登录的时候,现在很多场景账号密码都是经过js加密之后再请求发送(通过抓包可以看到加密信息)如图一burp抓到的包,reque...

65690
来自专栏Youngxj

免费申请泛域名ssl全过程-要弄仔细(否则会拦截)

35850
来自专栏我的小碗汤

浅谈json web token及应用

Json Web Token (JWT),是一个非常轻巧的规范,这个规范允许在网络应用环境间客户端和服务器间较安全的传递信息。该token被设计为紧凑且安全的,...

13130
来自专栏黑客秘密

黑客是如何实施暴力破解的?

“没有网络安全,就没有国家安全”,网络安全已经成为了国家战略级目标,如果做过开发的工程师也可能遇到过网站或者服务器被暴力破解的情况。下面我们就来看看,黑客是如何...

50970
来自专栏有趣的django

Django REST framework+Vue 打造生鲜超市(六) 七、用户登录与手机注册

七、用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest...

2.8K80

扫码关注云+社区

领取腾讯云代金券