关键词

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

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

本文链接:http://task.lmcjl.com/news/11342.html

展开阅读全文