当需要获取微信小程序用户的手机号时,我们需要先进行用户授权,具体步骤如下:
- 在小程序中使用
button
组件,设置属性open-type="getPhoneNumber"
,代码如下:
<button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNumber">获取手机号</button>
- 在
Page
页面js文件中定义事件处理函数,处理获取手机事件,代码如下:
Page({
onGetPhoneNumber: function(e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
})
-
在微信公众平台中登录开发者账号,在 “开发” -> “开发设置” -> “服务器域名” 中配置以下两个域名:
-
api.weixin.qq.com
-
wechatapi.weixin.qq.com
-
在小程序后端服务中使用微信提供的解密算法,将加密数据解密为用户手机号。示例代码如下:
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技术站