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

yizhihongxing

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

一、前置条件

在小程序中,获取用户手机号需要前置条件:
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 闭包详解及实例代码

    PHP 闭包详解及实例代码 什么是闭包函数 闭包函数(Closure),俗称“匿名函数”,是一种可以被存储在变量中的函数,可以作为参数传递给其他函数,也可以从函数中返回。 闭包函数是满足以下条件的函数: 函数的定义没有名称 函数定义时使用了 use 关键字绑定了外部变量 函数可以被赋值给变量 闭包函数的语法 闭包函数的语法如下: $functionName …

    PHP 2023年5月23日
    00
  • Session Fixation 攻防实战(图)

    Session Fixation 是一种利用漏洞定制 Session ID 的攻击方法。攻击者可通过伪造 Session ID 伪装成受害者来进行危害性行为,例如个人信息盗取、在线欺诈等,因此对于 Session Fixation 的攻击防范显得尤为重要。 为了防范 Session Fixation 攻击,我们可以遵循以下实际指南: 1. 在用户登录时使用随…

    PHP 2023年5月27日
    00
  • 通过PHP简单实例介绍文件上传

    文件上传是Web开发中常见的功能之一,用户可以通过将本地文件上传到服务器,实现数据传输和共享。PHP提供了丰富的函数和扩展库来处理文件上传操作。本文将通过一个简单的实例,介绍PHP如何实现文件上传。 如何实现文件上传 创建上传界面HTML代码 文件上传需要用户界面来触发操作,一般是HTML表单,可以通过<input>标签的type=file属性来…

    PHP 2023年5月23日
    00
  • PHP array_shift()用法实例分析

    PHP array_shift()用法实例分析 简介 array_shift() 函数用于将数组的第一个元素移除并返回该元素的值,同时将数组的第一个元素的键名也删除。注意,该函数会对数组产生影响,即会改变原数组。如果想得到第一个元素的同时不改变原数组,可以使用 reset() 函数。 语法 array_shift(array $array): mixed 示…

    PHP 2023年5月26日
    00
  • PHP pthreads v3使用中的一些坑和注意点分析

    PHP pthreads v3使用中的一些坑和注意点分析 什么是PHP pthreads v3 PHP pthreads v3是一个能够在PHP语言中使用多线程的扩展库,使得PHP程序员们能够更加高效地开发并行处理代码。这个扩展库在PHP 7.x版本中支持,而且它是开源的,可以在官方Github仓库查看和下载源代码。 使用PHP pthreads v3时需要…

    PHP 2023年5月27日
    00
  • 微信朋友圈评论怎么发语音? 朋友圈发送语音评论的技巧

    微信朋友圈评论怎么发语音? 要在微信朋友圈中发语音评论,我们需要先按照以下步骤将语音转化并上传至微信服务器: 进入微信聊天页面,找到要添加语音的聊天对象。 在聊天页面下方的输入框中,长按语音按钮,开始录制语音。 录制完成后,停止录音。此时,按住该语音长按,选择“发送给朋友”,然后选择朋友圈。 在弹出窗口中编辑语音描述和选择发送范围。 完成编辑后,点击“发送”…

    PHP 2023年5月30日
    00
  • php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)

    下面是关于PHP的array_push()函数的详细讲解。 一、函数定义 array_push()函数是用于将一个或多个元素压入数组的末尾的PHP内置函数。将元素压入数组就像向栈中压入元素一样(也称作入栈)。 该函数的语法如下: array_push(array $array, mixed $value1 [, mixed $… ]) 其中,参数$arr…

    PHP 2023年5月26日
    00
  • 利用perl、python、php、shell、sed、awk、c 实现字符串的翻转

    实现字符串的翻转可以使用多种编程语言,下面将分别介绍如何利用perl、python、php、shell、sed、awk、c来实现字符串的翻转。 Perl实现字符串的翻转 使用Perl可以很容易地实现字符串的翻转。如下所示,通过reverse()函数可以实现字符串的翻转: #!/usr/bin/perl use strict; use warnings; my…

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