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

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

  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日

相关文章

  • 关于base64编码和解码的js工具函数

    下面我将为您详细讲解“关于base64编码和解码的js工具函数”的完整攻略。 什么是Base64编码? Base64是一种用于将二进制数据转换成可打印ASCII字符的编码方式。Base64编码使用64种ASCII字符来表示二进制数据,每三个字节为一组,每组由四个字符表示。 为什么需要Base64编码? 由于许多应用程序只能处理ASCII字符,而不能处理二进制…

    JavaScript 2023年5月19日
    00
  • js判断文件是否为utf-8编码的方法

    要判断一个文件是否为UTF-8编码,可以通过检查文件的字节序标记(BOM)或通过解析文件内容来确定。下面是两种不同的方案。 方案一:通过检查BOM BOM是UTF-8文件的可选字节序标记,它在文件头部前三位表示UTF-8编码方式,它的作用是告诉文本编辑器该文件使用UTF-8编码。因此,可以先读取文件的前三个字节,判断它们是否是BOM来判断文件是否为UTF-8…

    JavaScript 2023年5月20日
    00
  • 浅析javascript的间隔调用和延时调用

    浅析javascript的间隔调用和延时调用 在JavaScript中,有两种常见的调用方式:间隔调用和延时调用。 延时调用 延时调用意思是在一段时间之后才执行函数,在JavaScript中使用setTimeout()方法来实现。 setTimeout()方法需要接收两个参数,第一个参数是要执行的函数,第二个参数是时间(单位为毫秒)。在例子中,代码会在3秒之…

    JavaScript 2023年6月11日
    00
  • JS基于FileSaver.js插件实现文件保存功能示例 原创

    c1 简介 本文介绍了如何使用FileSaver.js插件实现Javascript文件保存功能。 FileSaver.js是一个Javascript库,提供了将文件保存到本地的功能。该库主要用于浏览器端,支持多种类型的文件格式,包括文本、CSV、PDF、Image等等。 c2 安装 要使用FileSaver.js插件,需要先将其引入到HTML页面中。可以通过…

    JavaScript 2023年5月27日
    00
  • 向fckeditor编辑器插入指定代码的方法

    关于向Fckeditor编辑器插入指定代码的方法,可以分为以下两种方式: 一、在源码视图中添加指定代码 步骤如下: 打开Fckeditor编辑器,点击源码视图按钮; 在源码视图中添加你的代码段,注意代码段必须符合HTML标准; 回到正常视图,此时你的代码段会被正确渲染出来。 以下是一个示例代码,添加了一个带有样式的Button按钮: <button s…

    JavaScript 2023年6月11日
    00
  • 浅谈js中function的参数默认值

    什么是函数参数默认值 函数参数默认值是指在函数定义的时候,定义一个默认的参数值,当函数调用时,如果没有传递该参数的值,就会使用默认的参数值。可以方便地定义带有默认值的函数。 函数参数默认值的语法 在 ES6 中,为函数参数设置默认值的语法如下: function func(param1 = defaultValue1, param2 = defaultVal…

    JavaScript 2023年5月27日
    00
  • JavaScript代码优化技巧示例详解

    JavaScript代码优化技巧示例详解 作为一个合格的JavaScript开发者,不仅要求编写出正确的代码,还要考虑代码的性能和可维护性。下面是一些JavaScript代码优化技巧: 1. 避免使用全局变量 在JavaScript中,全局变量会存在全局作用域中,可以被任何函数访问,这样会造成变量污染和内存泄漏问题。因此,我们应该尽量避免使用全局变量,可以将…

    JavaScript 2023年5月28日
    00
  • 关于ES6中的箭头函数超详细梳理

    关于ES6中的箭头函数超详细梳理 箭头函数的概述 ES6中新增的箭头函数,是一种新的函数表达式,可以简化函数的创建过程,提高代码的可读性。它具有以下几个特点: 采用箭头符号“=>”作为函数定义符号。 函数体中只有一句代码时,可以省略花括号和return。 箭头函数没有自己的this,它的this由外部的上下文决定。 箭头函数不可以作为构造器使用,也不能…

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