微信小程序getPhoneNumber获取用户手机号

下面我将详细讲解“微信小程序getPhoneNumber获取用户手机号”的完整攻略。

1. 获取用户手机号的前提条件

在使用getPhoneNumber获取用户手机号之前,必须满足以下条件:

  • 该用户已经授权过小程序获取用户手机号;
  • 开启了“获取用户手机号”权限;
  • 正在使用微信运行的环境;
  • 用户允许小程序使用手机号码。

2. 如何获取用户手机号

获取用户手机号需要使用微信小程序的API接口:wx.login和wx.getUserInfo。以下分别进行讲解。

2.1. 调用wx.login接口

在调用wx.login接口时,需传递一个success方法,该方法中包含了code,即登入微信的code。代码如下:

wx.login({
  success: function (res) {
    console.log(res.code);
  }
})

2.2. 调用wx.getUserInfo接口

在调用wx.getUserInfo接口时,也需要传递一个success方法,该方法中包含了rawData和signature。代码如下:

wx.getUserInfo({
  success: function(res) {
    console.log(res.rawData);
    console.log(res.signature);
  }
})

2.3. 解密数据

获取到用户信息之后,还需要解密数据才能获取到用户手机号。解密的具体步骤如下:

2.3.1. 引入crypto-js库

在小程序中引入crypto-js库,用于进行解密。需要注意的是,由于微信小程序不能直接使用npm包,所以需要在项目中引入crypto-js.min.js文件。例如:

<script src="/lib/crypto-js.min.js"></script>

2.3.2. 生成session_key和iv

在获取用户信息时,微信会返回session_key和iv两个值,用于解密用户数据。具体代码如下:

// 将session_key和iv转换为Base64编码
var session_key = wx.getStorageSync('session_key');
var iv = wx.getStorageSync('iv');
session_key = CryptoJS.enc.Base64.parse(session_key);
iv = CryptoJS.enc.Base64.parse(iv);

2.3.3. 解密encryptedData

获取到用户信息之后,即可对用户数据进行解密。具体代码如下:

// 获取到用户的encryptedData
var encryptedData = res.encryptedData;

// 将encryptedData转换为Base64编码
encryptedData = CryptoJS.enc.Base64.parse(encryptedData);

// 进行解密
var decryptedData = CryptoJS.AES.decrypt({
  ciphertext: encryptedData
}, session_key, {
  iv: iv,
  mode: CryptoJS.mode.CBC,
  padding: CryptoJS.pad.Pkcs7
});

// 将解密后的数据转换为字符串格式
var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);
console.log(decryptedStr);

2.4. 获取用户手机号

最后,从解密后的数据中提取出用户手机号码。具体代码如下:

var data = JSON.parse(decryptedStr);
console.log(data);

if (data.phoneNumber) {
  console.log('用户手机号码为:' + data.phoneNumber);
} else {
  console.log('获取用户手机号码失败');
}

3. 示例说明

下面,我将使用两个实际的例子来说明如何获取用户手机号。

示例一

wx.login({
  success: function (res) {
    // 获取用户信息
    wx.getUserInfo({
      success: function(res) {
        // 解密用户数据
        var session_key = wx.getStorageSync('session_key');
        var iv = wx.getStorageSync('iv');
        session_key = CryptoJS.enc.Base64.parse(session_key);
        iv = CryptoJS.enc.Base64.parse(iv);
        var encryptedData = res.encryptedData;
        encryptedData = CryptoJS.enc.Base64.parse(encryptedData);
        var decryptedData = CryptoJS.AES.decrypt({
          ciphertext: encryptedData
        }, session_key, {
          iv: iv,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7
        });
        var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);

        // 获取用户手机号
        var data = JSON.parse(decryptedStr);
        console.log(data);
        if (data.phoneNumber) {
          console.log('用户手机号码为:' + data.phoneNumber);
        } else {
          console.log('获取用户手机号码失败');
        }
      }
    })
  }
})

示例二

wx.login({
  success: function (res) {
    // 发送code到后端,获取session_key和openid
    wx.request({
      url: 'https://example.com/api/login',
      data: {
        code: res.code
      },
      success: function(res) {
        wx.setStorageSync('session_key', res.data.session_key);
        wx.setStorageSync('openid', res.data.openid);

        // 获取用户信息
        wx.getUserInfo({
          success: function(res) {
            // 解密用户数据
            var session_key = wx.getStorageSync('session_key');
            var iv = wx.getStorageSync('iv');
            session_key = CryptoJS.enc.Base64.parse(session_key);
            iv = CryptoJS.enc.Base64.parse(iv);
            var encryptedData = res.encryptedData;
            encryptedData = CryptoJS.enc.Base64.parse(encryptedData);
            var decryptedData = CryptoJS.AES.decrypt({
              ciphertext: encryptedData
            }, session_key, {
              iv: iv,
              mode: CryptoJS.mode.CBC,
              padding: CryptoJS.pad.Pkcs7
            });
            var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);

            // 获取用户手机号
            var data = JSON.parse(decryptedStr);
            console.log(data);
            if (data.phoneNumber) {
              console.log('用户手机号码为:' + data.phoneNumber);
            } else {
              console.log('获取用户手机号码失败');
            }
          }
        })
      }
    })
  }
})

以上就是完整的“微信小程序getPhoneNumber获取用户手机号”的攻略说明,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序getPhoneNumber获取用户手机号 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • php和js实现根据子网掩码和ip计算子网功能示例

    我来为您详细讲解“php和js实现根据子网掩码和ip计算子网功能示例”的完整攻略。 1. 子网掩码和IP的概念 子网掩码是一个32位的二进制数字,用于在IPv4地址中区分出网络地址和主机地址的部分。它是用来将IP地址分成网络地址和主机地址两部分的掩码。 IP地址是用来识别网络上的主机的数字标识,它有四个8位二进制数字组成,可以用点分十进制表示。 2. 子网掩…

    PHP 2023年5月26日
    00
  • Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)

    下面是“Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)”的完整攻略: 步骤一:安装Apache 前往Apache官网(http://httpd.apache.org/)下载Apache安装包,选择最新稳定版本进行下载; 执行安装包,按照提示一步步进行安装,一般情况下选择默认选项即可; 打开防火墙设置,添加Apache的端口(默认为…

    PHP 2023年5月23日
    00
  • php利用array_search与array_column实现二维数组查找

    当我们需要在二维数组中查找指定元素或元素集合时,可以采用array_search与array_column函数进行快速匹配。 下面是实现该过程的具体步骤: 1.构建指定二维数组 需要先创建一个需要查找的二维数组,例如: $users = [ [‘id’=>1, ‘name’=>’Tom’, ‘age’=>20], [‘id’=>2, …

    PHP 2023年5月26日
    00
  • 微信小程序体验版本和上线版本的区别介绍

    微信小程序是一个快速开发、方便使用的平台,充分发挥了微信的社交属性和嵌入性,能够帮助开发者快速将自己的产品推广到更多的用户当中。在微信小程序开发过程中,开发者需要了解微信小程序体验版本和上线版本之间的区别,以便更好地掌握微信小程序的开发和发布流程。 体验版本和上线版本的定义 体验版本:小程序项目在提交审核之前,开发者可发布“体验版”供内部测试和研发时使用。发…

    PHP 2023年5月23日
    00
  • 解析PHP之提取多维数组指定列的方法

    接下来我将详细讲解“解析PHP之提取多维数组指定列的方法”的完整攻略。 前言 PHP是一种服务器端脚本语言,其中数组是其最常用的数据类型之一。在PHP开发过程中,开发者经常需要从多维数组中提取指定的一列,这时候就需要使用PHP的相关函数来实现这个功能了。 方法一:使用foreach循环 使用foreach遍历多维数组,然后将指定列的值取出来,再组成一个新的数…

    PHP 2023年5月26日
    00
  • Yii使用queue实现队列流程讲解

    以下是关于“Yii使用queue实现队列流程讲解”的完整使用攻略: 基础知识 在了解Yii使用queue实现队列之前,需要掌握一些基础知识,包括队列的基本概念、Yii中的queue组件等。以下是一些常见的基础知识: 队列的基本概念,包括队列的定义、队列的特点、队列的应用等。 Yii中的queue组件,包括queue组件的定义、queue组件的使用等。 使用攻…

    PHP 2023年5月12日
    00
  • php获取字符串中各个字符出现次数的方法

    当我们需要统计一个字符串中各个字符出现的次数时,可以使用PHP内置函数count_chars()来实现。具体步骤如下: 1. 使用count_chars() 函数 count_chars()函数接受一个字符串参数,并返回一个关联数组,该数组的键是所有出现过的字符ASCII码,对应的值是该字符在字符串中出现的次数。在返回数组中,未出现的字符将被省略,其它字符则…

    PHP 2023年5月26日
    00
  • php中正则表达式中的特殊符号

    正则表达式是PHP中常用的一种文本匹配工具,其中有许多特殊符号常用于表达特定含义,下面我将详细讲解正则表达式中的特殊符号以及它们的用法。 1. 元字符 元字符代表正则表达式中的特殊字符,可以用来匹配特定的字符串片段。 1.1 数字、字母和下划线 在正则表达式中,使用“\d”表示匹配任意一个数字,“\w”表示匹配任意一个字母或数字,“\s”代表一个空白字符。 …

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部