微信小程序用户授权获取手机号(getPhoneNumber)

yizhihongxing

当需要获取微信小程序用户的手机号时,我们需要先进行用户授权,具体步骤如下:

  1. 在小程序中使用 button 组件,设置属性 open-type="getPhoneNumber",代码如下:
<button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNumber">获取手机号</button>
  1. Page 页面js文件中定义事件处理函数,处理获取手机事件,代码如下:
Page({
  onGetPhoneNumber: function(e) {
    console.log(e.detail.errMsg)
    console.log(e.detail.iv)
    console.log(e.detail.encryptedData)
  }
})
  1. 在微信公众平台中登录开发者账号,在 “开发” -> “开发设置” -> “服务器域名” 中配置以下两个域名:

  2. api.weixin.qq.com

  3. wechatapi.weixin.qq.com

  4. 在小程序后端服务中使用微信提供的解密算法,将加密数据解密为用户手机号。示例代码如下:

import requests

appid = "your_appid"
secret = "your_secret"

session_key = "" # 从微信 API 中获取得到

def decrypt_data(encrypted_data, iv):
    from Cryptodome.Cipher import AES
    import base64

    session_key_bytes = base64.b64decode(session_key)
    encrypted_data_bytes = base64.b64decode(encrypted_data)
    iv_bytes = base64.b64decode(iv)

    cipher = AES.new(session_key_bytes, AES.MODE_CBC, iv_bytes)
    decrypted_data_bytes = cipher.decrypt(encrypted_data_bytes)
    decrypted_data = decrypted_data_bytes.decode()

    return decrypted_data

def get_phone_number(encrypted_data, iv):
    decrypted_data = decrypt_data(encrypted_data, iv)
    data_json = json.loads(decrypted_data)

    return data_json.get("phoneNumber")

示例1:在 onGetPhoneNumber 事件处理函数中获取手机号码,代码如下:

Page({
  onGetPhoneNumber: function(e) {
    var that = this;
    wx.login({
      success: function (res) {
        if (res.code) {
          console.log(res.code);
          wx.request({
            url: 'https://your_server_url/login',
            method: 'POST',
            data: {
              code: res.code
            },
            success: function (res) {
              console.log(res.data);
              wx.getUserInfo({
                success: function (res2) {
                  console.log(res2);
                  wx.request({
                    url: 'https://your_server_url/getPhoneNumber',
                    method: 'POST',
                    data: {
                      sessionKey: res.data.session_key,
                      encryptedData: e.detail.encryptedData,
                      iv: e.detail.iv
                    },
                    success: function (res3) {
                      console.log(res3.data);
                    }
                  });
                }
              });
            }
          });
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    });
  }
})

示例2:在小程序后端服务中获取手机号码,代码如下:

import json
from flask import Flask, request

app = Flask(__name__)

@app.route('/getPhoneNumber', methods=['POST'])
def get_phone_number():
    session_key = request.form.get("sessionKey")
    encrypted_data = request.form.get("encryptedData")
    iv = request.form.get("iv")

    phone_number = get_phone_number(encrypted_data, iv)
    return json.dumps({"phone_number": phone_number})

if __name__ == '__main__':
    app.run()

以上就是微信小程序用户授权获取手机号的完整攻略,希望能对你有所帮助!

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

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript之引用类型介绍

    下面是详细讲解“JavaScript之引用类型介绍”的完整攻略。 引用类型介绍 在JavaScript中,除了基本类型(number、string、boolean、null、undefined)之外,还有一类特殊的类型,被称为引用类型。引用类型是由多个值组成的对象。 对象 对象是引用类型的最基本类型。对象是由多个键值对组成的属性集合。 创建对象有两种方式,一…

    JavaScript 2023年5月19日
    00
  • JavaScript实现简易购物车最全代码解析(ES6面向对象)

    JavaScript实现简易购物车最全代码解析(ES6面向对象)是一篇详细讲解JavaScript购物车实现的文章,提供了完整的代码和注释,可以帮助初学者更好地理解面向对象的编程思想和JavaScript语言的运用。 该文章的实现过程主要分为以下几个步骤: 定义CartItem类 首先定义一个CartItem类,用于表示某一个商品的信息,包括商品的id、na…

    JavaScript 2023年6月10日
    00
  • CesiumJS源码杂谈之从光到 Uniform

    下面是关于“CesiumJS源码杂谈之从光到Uniform”的完整攻略的详细讲解。 前置知识 在讲解这个话题之前,需要对一些基本的知识有一定的了解。包括:WebGL的基础知识、Shader的基础知识、CesiumJS的基础知识等。 从光开始 在WebGL的渲染过程中,光是非常重要的一个环节。CesiumJS中的光源主要有以下几种: sun:太阳光。 moon…

    JavaScript 2023年6月10日
    00
  • JavaScript实现系统防挂机(无操作弹窗)的示例详解

    下面我来为您详细讲解“JavaScript实现系统防挂机(无操作弹窗)的示例详解”。 什么是系统防挂机? 系统防挂机是指通过一定的技术手段和操作,防止用户长时间不进行操作而导致系统挂起或进程崩溃的现象。常见的方式包括弹出操作提示框或计时器等。 实现无操作弹窗的方法 实现无操作弹窗的方法有很多,下面列举两条示例: 示例一:使用计时器 使用计时器的方法就是在用户…

    JavaScript 2023年6月11日
    00
  • JavaScript中输出标签的方法

    当我们想要在JavaScript中输出一个 </script> 标签时,通常会面临一个困境:由于该标签的内容与JavaScript结束标签的语法相同,因此我们无法直接输入该标签,否则会被解析为结束当前脚本的标记。那么应该如何输出该标签呢? 下面介绍两种常见的方法。 1. 使用转义字符 在JavaScript中,可以使用转义字符对标签进行转义,在输…

    JavaScript 2023年5月28日
    00
  • javascript nextSibling 与 getNextElement(node) 使用介绍

    下面我将为你详细讲解“javascript nextSibling 与 getNextElement(node) 使用介绍”的完整攻略。 1.介绍 nextSibling 和 getNextElement(node) 这两个 JavaScript 函数都用于获取某元素的下一个元素节点。不同之处在于,getNextElement(node) 只会返回下一个元素…

    JavaScript 2023年6月10日
    00
  • JavaScript Base64编码和解码,实现URL参数传递。

    首先我们需要了解什么是Base64编码。Base64编码是将二进制数据通过特定算法转换成文本字符串的一种编码方式。在浏览器中使用Base64编码的最常见场景就是在URL中传递参数,因为URL中不能包含某些字符,Base64编码后的字符串是可以安全传递的。 接下来我们讲一下如何使用JavaScript进行Base64编码和解码。 在JavaScript中,我们…

    JavaScript 2023年5月20日
    00
  • javascript教程:关于if简写语句优化的方法

    针对“javascript教程:关于if简写语句优化的方法”的优化攻略,我将进行完整的讲解。首先我们来了解下if语句的简写方法: 三元运算符 三元运算符是JavaScript中最常用的简写方法,它可以将一个if语句简化为一个表达式。 if (condition) { value = true; } else { value = false; } // 简化为…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部