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

相关文章

  • js对数字的格式化使用说明

    下面是关于js对数字的格式化使用说明的完整攻略。 什么是数字格式化 数字格式化是在将数字数据呈现给用户时,在数字上应用特定格式,以便于理解和解释。 js对数字的格式化有哪些方法 在JavaScript中,我们可以使用toExponential()、toFixed()、toPrecision()和toLocaleString()四种不同的方法来格式化数字。 t…

    JavaScript 2023年5月28日
    00
  • JavaScript基础之Array forEach使用示例

    当我们学习JavaScript的时候,需要掌握数组的常用操作,其中forEach是非常常用的方法。本篇攻略将详细讲解如何使用Array forEach方法。 forEach简介 forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。通过forEach方法,能够对数组中的元素进行操作,使其更加灵活。 forEach方法的参数 forEach(…

    JavaScript 2023年5月27日
    00
  • 微信小程序项目实践之九宫格实现及item跳转功能

    以下是《微信小程序项目实践之九宫格实现及item跳转功能》的完整攻略。 1. 确定页面结构 首先,我们需要确定页面的基本结构,包括 view、scroll-view、block 等组件。页面结构如下: <!– page.wxml –> <scroll-view class="grid-container"> &…

    JavaScript 2023年6月11日
    00
  • JS动画效果打开、关闭层的实现方法

    JS动画效果打开、关闭层的实现方法可以通过以下步骤来完成: 准备HTML、CSS和JS代码 首先,需要准备好HTML页面和相应的CSS样式。创建一个HTML页面,在其上添加一个按钮或其他元素, 用于打开和关闭层。 <!DOCTYPE html> <html> <head> <title>JS动画效果打开、关闭层…

    JavaScript 2023年6月10日
    00
  • JS实现响应鼠标点击动画渐变弹出层效果代码

    这里为您详细讲解JS实现响应鼠标点击动画渐变弹出层效果的攻略。 实现思路 实现该效果的基本思路是通过 JavaScript 来控制 CSS 样式的变化,从而达到动画渐变弹出层的效果。 具体实现步骤如下:1. 创建一个静态 HTML 页面,包含需要点击的按钮和弹出层。2. 利用 CSS 设置弹出层的初始样式和动画样式。3. 使用 JavaScript 监听按钮…

    JavaScript 2023年6月10日
    00
  • JS面试题中深拷贝的实现讲解

    让我来详细讲解一下“JS面试题中深拷贝的实现讲解”的完整攻略。 什么是深拷贝 深拷贝是创建一个新的对象,复制原始数据的所有属性,并且递归地复制该对象的所有属性,原始对象中的所有嵌套对象也被递归复制,即所有的嵌套对象都得到相同的值的一个全新的独立的拷贝,与原始对象没有任何联系。 深拷贝的实现 实现方式 递归拷贝 JSON.parse && JS…

    JavaScript 2023年6月10日
    00
  • jQuery右下角旋转环状菜单特效代码

    要实现“jQuery右下角旋转环状菜单特效”,需要按以下步骤进行操作: 1. 引入jQuery库文件和相关CSS文件 <!DOCTYPE html> <html> <head> <title>Right bottom rotating menu</title> <meta charset=&q…

    JavaScript 2023年6月11日
    00
  • JavaScript使用encodeURI()和decodeURI()获取字符串值的方法

    JavaScript使用encodeURI()和decodeURI()获取字符串值的方法 在JavaScript中,有时候需要将字符串数据转换成URI格式,或者从URI格式中获取字符串数据。这时候可以使用encodeURI()和decodeURI()方法来完成转换。 encodeURI() encodeURI()方法将字符串数据作为URI进行编码,其中一些字…

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