微信小程序获取用户绑定手机号方法示例

下面是详细讲解微信小程序获取用户绑定手机号的方法示例:

一、前置条件

在小程序中,获取用户手机号需要前置条件:
1. 首先开通了微信开放平台帐号。如果您还没有开通或者不清楚如何开通,可以参考这篇文章《微信开放平台申请(绑定)流程及账号类型查询》
2. 授权用户手机号。在调用微信提供的API获取用户手机号前,需要先授权用户手机号。具体流程是,在小程序中弹出授权请求,让用户授权同意后才能获取用户手机号码。

二、调用微信提供的API

小程序提供了wx.login和wx.getUserInfo方法可供使用。其中wx.getUserInfo方法可用于获取用户昵称、头像等信息。为了获取用户手机号,还需要调用wx.login方法获取code。之后使用wx.request方法请求微信提供的API,获取sessionkey和openid。

wx.login({
  success: res => {
    if (res.code) {
      let code = res.code;
      wx.request({
        url: 'https://api.weixin.qq.com/sns/jscode2session',
        data: {
          appid: 'your appid',
          secret: 'your secret',
          js_code: code,
          grant_type: 'authorization_code'
        },
        success: res => {
          // 将sessionkey和openid存储到本地
        }
      })
    }
  }
})

三、解密包含用户手机号的数据

获得sessionkey和openid之后,就可以对包含用户手机号的数据进行解密。由于包含用户手机号的数据是加密的,需要借助微信提供的API进行解密,并将解密后的数据保存在本地。解密的过程包含了以下几个步骤:

1. 获取encryptedData和iv

在授权用户手机号后即可获取encryptedData和iv。

wx.getUserInfo({
  success: res => {
    let encryptedData = res.encryptedData;
    let iv = res.iv;
    // 解密encryptedData并保存到本地
  }
})

2. 将sessionkey转为Base64格式

将从微信服务器获得的sessionkey用Base64格式进行编码。

let sessionKey = res.session_key;
let sessionKeyBase64 = wx.base64ToArrayBuffer(sessionKey);

3. 解密数据

使用CryptoJS包进行解密。

let CryptoJS = require('crypto-js');
let key = sessionKeyBase64;
let iv = wx.base64ToArrayBuffer(iv);
let encryptedData = wx.base64ToArrayBuffer(encryptedData);
let decryptedData = CryptoJS.AES.decrypt(encryptedData, key, {
  iv: iv,
  mode: CryptoJS.mode.CBC,
  padding: CryptoJS.pad.Pkcs7
});

四、示例演示

下面是几个示例,供参考:

示例一

在小程序中,通过wx.getUserInfo方法获取用户信息。其中,包含用户绑定的手机号码。获取逻辑如下:

wx.getUserInfo({
  success: res => {
    let encryptedData = res.encryptedData;
    let sessionKey = wx.getStorageSync('session_key');
    let iv = res.iv;
    let decryptedData = '';
    let phoneNumber = '';

    sessionKey = wx.base64ToArrayBuffer(sessionKey);
    iv = wx.base64ToArrayBuffer(iv);
    encryptedData = wx.base64ToArrayBuffer(encryptedData);
    decryptedData = CryptoJS.AES.decrypt(encryptedData, sessionKey, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });

    decryptedData = decryptedData.toString(CryptoJS.enc.Utf8);
    phoneNumber = JSON.parse(decryptedData).phoneNumber;

    wx.showModal({
      title: '手机号获取成功',
      content: phoneNumber,
      showCancel: false
    })
  }
})

示例二

这是一个获取用户手机号的demo,完整代码可在Github的项目中找到。

该示例通过wx.login方法获取code,并调用wx.request方法请求微信提供的API,然后将sessionkey和openid保存在本地。在用户同意授权后,获取encryptedData和iv。最后,使用CryptoJS解密数据,获取用户手机号。

wx.login({
  success: res => {
    if (res.code) {
      let code = res.code;
      wx.request({
        url: 'https://api.weixin.qq.com/sns/jscode2session',
        data: {
          appid: 'your appid',
          secret: 'your secret',
          js_code: code,
          grant_type: 'authorization_code'
        },
        success: res => {
          wx.setStorageSync('session_key', res.data.session_key);
        }
      })
    }
  }
})

// 授权手机号
bindgetphonenumber: function(res) {
  let encryptedData = res.detail.encryptedData;
  let iv = res.detail.iv;
  let sessionKey = wx.getStorageSync('session_key');

  sessionKey = wx.base64ToArrayBuffer(sessionKey);
  iv = wx.base64ToArrayBuffer(iv);
  encryptedData = wx.base64ToArrayBuffer(encryptedData);

  decryptedPhoneNumber = CryptoJS.AES.decrypt(encryptedData, sessionKey, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });

  // 解密后的数据
  console.log(decryptedPhoneNumber.toString(CryptoJS.enc.Utf8));
}

这样,就通过以上的示例,讲解了获取微信小程序用户绑定手机号的方法。

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

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

相关文章

  • PHP去掉从word直接粘贴过来的没有用格式的函数

    要去掉从Word直接粘贴过来的没有用格式的内容,可以采用以下步骤: 使用strip_tags()函数去除HTML和PHP标记,只保留纯文本。 示例1: // 原文本内容 $text = ‘<p>这是一段从Word直接粘贴过来的内容。</p><p>没有任何格式</p>’; // 去除HTML和PHP标记,只保留文…

    PHP 2023年5月23日
    00
  • php中自定义函数dump查看数组信息类似var_dump

    当我们在PHP中编程时,经常需要查看变量、数组等数据类型的值和结构信息。在PHP中,我们通常使用var_dump函数来查看变量的信息。但是有时候,我们需要更加清晰和详细地查看数组的信息,而此时使用var_dump输出的信息可能会比较混乱,不够直观。因此,我们可以自定义一个函数dump,来更加清晰地查看数组信息。 下面是,如何自定义一个函数dump查看数组信息…

    PHP 2023年5月26日
    00
  • 一个PHP分页类的代码

    下面是一个PHP分页类的完整攻略: 什么是分页? 分页,是指将一段较长的数据分割成若干个小的数据块,以方便用户浏览,也叫翻页。常见于各种网站的查询结果、产品列表、文章列表等。 为什么需要分页? 不分页可能会导致页面加载速度过慢,用户体验不佳;同时,对于长篇文章、产品列表等较为冗长的信息,通过分页能够更方便地进行相关信息之间的筛选和比较。 PHP分页类示例说明…

    PHP 2023年5月23日
    00
  • PHP通过iconv将字符串从GBK转换为UTF8字符集

    当我们需要在PHP代码中使用多种语言时,就需要将字符串从一种字符集(例如GBK)转换为另一种字符集(例如UTF-8)。我们可以使用PHP内置的iconv函数来完成这个任务。 以下是将字符串从GBK转换为UTF-8的步骤: 1. 构造iconv函数的参数 首先,我们需要构造iconv函数的三个参数: iconv($in_charset, $out_charse…

    PHP 2023年5月26日
    00
  • Apache Prefork、Worker和Event三种MPM详解

    Apache 是一款轻量级的Web服务器软件,但在高并发环境下可能无法满足业务需求。因此,通过配置不同的多进程模块(MPM)可以提高Apache的性能。本文将详细介绍Apache三种MPM(Prefork、Worker和Event),并提供示例说明。 一、 Apache MPM 简介 多进程模块(MPM)是Apache的一个重要组成部分,用于调节Apache…

    PHP 2023年5月27日
    00
  • 深入学习微信网址链接解封的防封原理visit_type

    我来详细讲解一下“深入学习微信网址链接解封的防封原理visit_type”的完整攻略。 什么是visit_type? visit_type是微信对于用户访问链接的一种分类标志,一般分为3种: 正常:表示用户是通过正常的方式访问链接,例如直接在浏览器中输入网址、从搜索引擎跳转等。 自定义来源:表示用户在访问链接时,来源经过了特殊的处理,例如通过自定义的二维码、…

    PHP 2023年5月23日
    00
  • PHP中header函数的用法及其注意事项详解

    具体来讲解一下“PHP中header函数的用法及其注意事项详解”的攻略流程。 什么是header函数 首先,header函数是PHP内置的一种函数,主要用于向客户端发送HTTP头部信息。利用header函数,可以设置网页的状态码、网页编码、缓存、cookie等相关信息,在页面加载过程中起到非常重要的作用。 header函数的基本用法 header函数的基本语…

    PHP 2023年5月26日
    00
  • PHP导出MySQL数据到Excel文件(fputcsv)

    PHP导出MySQL数据到Excel文件(fputcsv) 概述 本篇攻略将会详细介绍使用PHP将MySQL数据导出至Excel文件的方法,采用fputcsv函数实现,其可以在CSV文件中创建一行。 准备工作 在使用该方法之前需要确保以下条件已经满足: PHP环境已经安装并配置成功 已经安装并启动MySQL数据库并成功连接它 了解fputcsv函数的使用方法…

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