微信小程序手机号授权获取与AES加密
在微信小程序中获取用户的手机号通常需要用户的授权,并涉及到AES加密的解密过程。以下是实现这一功能的基本步骤:
1. 获取用户的授权
要获取用户手机号,需要用户进行授权。可以通过调用 wx.login()
获取用户的登录凭证(code
),然后通过 wx.getUserProfile()
请求用户授权。
wx.login({
success: loginRes => {
// 登录成功,获取code
const code = loginRes.code;
// 使用获取的 code 换取用户的 session_key
}
});
2. 调用微信服务端接口
将获取的 code
发送到你的服务器,通过你的服务器向微信后台的接口(auth.code2Session
)请求,获取用户的 session_key
和 openid
。
3. 获取加密的手机号数据
在前端,使用 button
组件的 open-type="getPhoneNumber"
属性获取用户的加密手机号数据。
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>
Page({
getPhoneNumber(e) {
if (e.detail.errMsg === "getPhoneNumber:ok") {
const { encryptedData, iv } = e.detail;
// 进一步处理加密数据
} else {
console.error("用户拒绝授权获取手机号");
}
}
});
4. 解密数据
将 encryptedData
和 iv
以及之前获取到的 session_key
一起发送到你的服务器。服务器需要使用 AES 算法解密数据。
Python示例代码(假设服务器使用Python):
from Crypto.Cipher import AES
import base64
import json
def decrypt(encrypted_data, iv, session_key):
# Base64 decode the data
session_key = base64.b64decode(session_key)
encrypted_data = base64.b64decode(encrypted_data)
iv = base64.b64decode(iv)
# Create cipher
cipher = AES.new(session_key, AES.MODE_CBC, iv)
# Decrypt the message
decrypted = cipher.decrypt(encrypted_data)
# Strip PKCS#7 padding
decrypted = decrypted[:-decrypted[-1]]
# Return decoded JSON
return json.loads(decrypted)
# Example usage:
# decrypted_data = decrypt(encryptedData, iv, sessionKey)
# phone_number = decrypted_data['phoneNumber']
注意事项
- 确保你的服务器是安全的,能够安全地处理
session_key
和用户的加密数据。 - 请及时更新你的微信开发者文档,以获得最新的 API 方法与安全建议。
- 加密和解密操作涉及敏感数据处理,遵循相关的数据保护法律法规。
综上,通过结合前端的小程序 API 和后端的 decrypt 函数,实现对用户手机号的安全获取。