微信小程序用户授权获取手机号(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日

相关文章

  • JavaScript实现数组去重的7种方法

    JavaScript实现数组去重的7种方法 在JavaScript中,实现数组去重是一个常见的需求。下面介绍7种实现数组去重的方式。 1.使用 Set 使用ES6中的Set对象可以方便地实现数组去重,使用Set之后,将数组转换为Set之后,再将Set转换为数组即可。 const arr = [1, 2, 1, 2, 3] const newArr = Arr…

    JavaScript 2023年5月27日
    00
  • js验证email的正则

    JS验证 Email 的正则表达式是一项很重要的前端技能,本篇攻略旨在帮助想要掌握这项技能的读者们进行学习。 1. 什么是正则表达式 正则表达式是一种特殊的文本字符串,用于在文本中查找、替换和匹配符合某些特定规则的字符串。利用正则表达式可以简化很多复杂的字符串操作,使代码更加简洁高效。 2. 邮箱正则表达式规则 验证Email的正则表达式需要遵循RFC 53…

    JavaScript 2023年6月10日
    00
  • JavaScript 面向对象之命名空间

    JavaScript 面向对象之命名空间 JavaScript 是一门支持面向对象编程的语言,但在实践中,我们发现 JavaScript 的命名空间机制并不完整或者说不够严谨。因此,我们可以借助 Object 对象和函数声明的方式来实现 JavaScript 的命名空间。 命名空间的概念 命名空间是一个用于“组织代码”的容器,它类似于文件系统中文件夹的概念,…

    JavaScript 2023年5月27日
    00
  • 如何屏蔽防止别的网站嵌入框架代码

    首先,屏蔽防止别的网站嵌入框架代码,需要通过设置 HTTP 头来实现。具体步骤如下: 在服务器端,设置 HTTP 响应头 X-Frame-Options。 X-Frame-Options 可以设置三个参数: DENY:禁止该页面被任何网站嵌入到 iframe 中。 SAMEORIGIN:只允许该页面在相同域名下的网站中被嵌入到 iframe 中。 ALLOW…

    JavaScript 2023年6月11日
    00
  • jquery无法设置checkbox选中即没有变成选中状态

    当使用 jQuery 设置一个 checkbox 的选中状态时,在某些情况下可能会出现并没有设置成功的情况,通常是因为没有正确理解 checkbox 的3种状态:选中(checked)、未选中(unchecked)和半选状态(indeterminate)。 首先,我们需要明确 checkbox 的3种状态,如果一个 checkbox 没有设置“选中”或“未选…

    JavaScript 2023年6月10日
    00
  • Jsonp post 跨域方案

    下面我将详细讲解 Jsonp post 跨域方案的完整攻略。 什么是 Jsonp post 跨域方案? 在前端开发中,常常会遇到需要跨越多个域名进行数据交互的问题,而出于安全考虑,浏览器出于安全策略的限制,不允许通过 ajax 请求访问跨域资源,这时可以采用 Jsonp post 跨域方案来实现数据交互。 Jsonp 是一种通过动态创建 script 标签跨…

    JavaScript 2023年5月27日
    00
  • JavaScript 更严格的相等 [译]

    下面我会为大家详细讲解一下“JavaScript 更严格的相等 [译]”: 1. 什么是“JavaScript 更严格的相等”? 在 JavaScript 中,相等运算符有两种类型:== 和 ===。其中,== 是松散相等运算符,它会自动进行类型转换,而 === 是严格相等运算符,它不进行类型转换。 在 JavaScript 中,有一些特殊的值,比如 NaN…

    JavaScript 2023年5月28日
    00
  • 原生js+ajax分页组件

    下面我详细讲解一下如何实现“原生js+ajax分页组件”。 前置知识 在实现分页组件之前,需要对以下几个知识点有一定的了解。 原生JS的DOM操作 Ajax异步请求及响应 分页算法 分页算法 分页算法是分页组件实现的核心。下面介绍两种常见的分页算法。 基本分页算法 基本分页算法的实现非常简单,直接根据当前页码和每页显示数量计算出起始记录的位置和结束位置,再将…

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