微信小程序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无限级分类方法及代码

    解析PHP无限级分类方法及代码 在网站开发中,分类列表是常见的需要处理的数据类型,其中涉及到无限级分类问题。在PHP语言中,常见的有两种方式实现无限级分类,分别为递归和非递归方法。 递归实现无限级分类 递归实现是常见的无限级分类方法,主要思路是从顶级分类开始,逐级遍历下一级分类,直到最底层的子分类全部遍历完。 下面是一个递归实现无限级分类的PHP代码示例: …

    PHP 2023年5月26日
    00
  • 微信小程序提取公用函数到util.js及使用方法示例

    下面是关于“微信小程序提取公用函数到util.js及使用方法示例”的完整攻略: 1. 创建util.js文件 在开发者工具中,打开小程序项目,右键“根目录”,选择“新建文件”,创建一个名为util.js的文件。 2. 定义公用函数 在util.js中,定义公用函数,例如: // util.js function formatTime(date) { cons…

    PHP 2023年5月23日
    00
  • php守护进程 加linux命令nohup实现任务每秒执行一次

    下面是详细讲解“php守护进程加linux命令nohup实现任务每秒执行一次”的完整攻略。 什么是php守护进程 在Linux系统中,守护进程是一种长期运行的程序,常驻在系统中并且不会因交互式用户登录而受到影响。守护进程一般由另一个程序(如系统初始化脚本)启动,并在后台运行,一般起着监控系统的作用,将会在商业项目中大量使用。而PHP守护进程则是运行在PHP环…

    PHP 2023年5月23日
    00
  • PHP向浏览器输出内容的4个函数总结

    下面我详细讲解“PHP向浏览器输出内容的4个函数总结”的完整攻略。 1. 什么是向浏览器输出内容? 向浏览器输出内容指的是,当PHP脚本被执行时,将产生的结果输出给Web浏览器,以便在浏览器中显示。 2. PHP向浏览器输出内容的4个函数 常用的PHP向浏览器输出内容的函数有4个,分别是:echo,print,print_r和var_dump。 2.1 ec…

    PHP 2023年5月26日
    00
  • javascript中直接写php代码的方法

    首先,需要明确一点:JavaScript和PHP是两种完全不同的编程语言,不能直接在JavaScript中使用PHP代码。但是,有时候我们需要在JavaScript中与后台的PHP代码进行交互,比如获取PHP程序返回的数据。这种情况下,我们可以使用AJAX技术(Asynchronous JavaScript And XML,异步 JavaScript 和 X…

    PHP 2023年5月23日
    00
  • PHP输出控制功能在简繁体转换中的应用

    概述 PHP是一种非常流行的服务器端脚本语言,具有强大的输出控制功能,包括gzip压缩、页面缓存、简繁体转换等。在中文网站开发中,简繁体转换是一种常见的需求。本攻略将详细介绍PHP输出控制功能在简繁体转换中的应用。 安装PHP的mbstring扩展 在PHP中进行简繁体转换需要使用mbstring扩展。如果您的PHP没有安装该扩展,请参考以下步骤安装: 步骤…

    PHP 2023年5月26日
    00
  • PHP字符串的递增和递减示例介绍

    PHP字符串的递增和递减操作在字符串拼接和遍历方面非常常用,本文将重点介绍这两种操作。 字符串递增 字符串的递增操作实际上是在字符串末尾添加一个字符,通过PHP运算符.连接两个字符串,可以实现字符串递增的效果。 下面是一个示例代码: <?php $str = ‘a’; $str++; // ‘b’ echo $str; // output: ‘b’ $…

    PHP 2023年5月26日
    00
  • PHP删除数组中指定值的元素常用方法实例分析【4种方法】

    PHP删除数组中指定值的元素常用方法实例分析【4种方法】 1.使用unset函数 使用unset函数可以删除数组中指定下标的元素。使用如下: unset($array[$key]); 代码示例: $arr = array(‘a’,’b’,’c’,’d’,’e’); unset($arr[2]); //删除下标为2的元素 print_r($arr); //输出…

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