小程序解码wx.getUserInfo中的decryptData数据

小程序使用wx.getUserInfo()获取到的用户信息,

包括用户名称,头像,省份,城市等,

一般情况下使用这些资料已经够用了。


### 使用 `wx.getUserProfile` 获取更新后的用户资料 #### 背景说明 自 2021 年 4 月 13 日起,微信小程序对用户信息获取进行了调整[^3]。原有的 `wx.getUserInfo` 接口仅能返回匿名数据,无法再用于直接获取用户的头像、昵称等敏感信息。为此,微信提供了新的接口 `wx.getUserProfile` 来替代旧的实现方式。 以下是关于如何通过 `wx.getUserProfile` 获取更新后的用户资料的具体方法: --- #### 实现步骤详解 ##### 1. 判断用户是否已授权 在调用 `wx.getUserProfile` 前,可以通过缓存机制判断用户是否已完成授权并存储过用户信息。如果未完成授权,则需要引导用户再次点击触发授权流程。 ```javascript // 检查本地是否有保存的用户信息 const hasUserInfo = wx.getStorageSync('hasUserInfo'); if (!hasUserInfo) { // 如果没有缓存信息,则提示用户重新授权 } ``` 此部分逻辑可以基于业务需求灵活调整[^4]。 --- ##### 2. 调用 `wx.getUserProfile` 当用户尚未授权或者需要重新获取最新资料时,可通过以下代码片段调用 `wx.getUserProfile` 接口: ```javascript wx.getUserProfile({ desc: '用于完善会员资料', // 描述语句,向用户解释为何请求其个人信息 success(res) { console.log('用户同意:', res.userInfo); const { nickName, avatarUrl } = res.userInfo; // 存储到全局变量或数据库中 wx.setStorageSync('nickName', nickName); wx.setStorageSync('avatarUrl', avatarUrl); // 可选:发送至后端服务器进一步处理 sendToServer({ nickName, avatarUrl }); }, fail(err) { console.error('用户拒绝:', err); // 提示用户手动开启权限或其他操作 } }); ``` 上述代码实现了以下功能: - 设置描述字段 (`desc`) 明确告知用户为什么需要这些信息。 - 成功回调函数接收用户基本信息(如昵称和头像链接)[^1]。 - 失败回调记录错误原因以便后续排查问题。 注意:从 2022 年 10 月 25 日之后发布的版本来看,即使成功调用了该 API ,也可能只收到默认灰图作为头像以及固定字符串“微信用户”代表昵称[^2] 。因此,在实际应用过程中还需要特别留意当前运行环境所对应的基础库版本号及其兼容情况。 --- ##### 3. 后端解密 (可选项) 对于某些场景下可能还会涉及到将前端传过来的数据交给后台做进一步验证与解析工作。此时就需要利用 session_key 对 encryptedData 进行 AES-CBC 解码从而得到明文形式下的 openid 和 unionid 等重要参数。 示例伪代码如下所示: ```python from Crypto.Cipher import AES import base64 def decrypt_data(encrypted_data, iv, session_key): cipher = AES.new(base64.b64decode(session_key), AES.MODE_CBC, base64.b64decode(iv)) decrypted_data = cipher.decrypt(base64.b64decode(encrypted_data)).rstrip(b'\x00').decode() return eval(decrypted_data) # Example usage decrypted_info = decrypt_data(request.POST['encryptedData'], request.POST['iv'], user_session_key) print(f"Decoded Info:{decrypted_info}") ``` 以上 Python 片段展示了如何对接收自客户端加密包体执行逆运算还原原始内容的过程。 --- ### 注意事项 - **基础库版本要求**: 确保目标设备安装的是至少支持 v2.10.4 的 WeChat Mini Program SDK 或更高版本。 - **用户体验考量**: 频繁弹窗询问可能导致负面反馈,请合理设计交互界面减少打扰频率。 - **隐私政策声明**: 应提前准备好清晰易懂的服务条款页面供访问者查阅知晓收集哪些种类的信息及其用途范围。 --- #### 总结 综上所述,借助于新版提供的 `wx.getUserProfile` 方法能够有效解决因策略变动带来的不便之处,并且更加贴合现代互联网安全标准的要求。不过与此同时也要密切关注官方公告动态变化以免遗漏任何细节造成不必要的麻烦。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值