【微信小程序用户信息获取全攻略 | 逻辑详解+代码避坑指南 】

【微信小程序用户信息获取全攻略 | 逻辑详解+代码避坑指南 】

💡 一、用户授权基础逻辑

静默授权获取 OpenID

通过 wx.login() 获取临时 code(5分钟有效),传给后端。后端用 code + AppSecret 请求微信接口,换取 openid 和 session_key。作用:建立用户唯一标识,无感登录,无需弹窗!

主动授权获取用户详情(头像、昵称等)

必须用户主动触发!使用

// JS

onAuth(e) {

if (e.detail.userInfo) {

// 用户同意授权

const { encryptedData, iv } = e.detail;

// 发送给后端解密

} else {

// 用户拒绝,提示引导重新授权

}

}

🔐 三、后端解密处理(Java 示例)

关键:用 session_key 解密 encryptedData!

public String wxDecrypt(String encryptedData, String sessionKey, String iv) {

byte[] encData = Base64.decode(encryptedData);

byte[] ivData = Base64.decode(iv);

byte[] key = Base64.decode(sessionKey);

// AES-128-CBC 解密

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), new IvParameterSpec(ivData));

return new String(cipher.doFinal(encData), "UTF-8");

}

避坑:

session_key 可能过期(需重新 wx.login 获取)。解密失败常见于 session_key 不匹配或 Base64 解码错误!

🌐 四、全局状态管理(MobX 方案)

目标:用户信息全局共享,避免重复请求。

// store.js

import { observable, action } from 'mobx-miniprogram';

export const store = observable({

userInfo: {},

setUserInfo: action(function(info) {

this.userInfo = info;

wx.setStorageSync('user', JSON.stringify(info)); // 持久化

}),

// 从缓存初始化

initUser() {

const cache = wx.getStorageSync('user');

if (cache) this.userInfo = JSON.parse(cache);

}

});

使用场景:

个人页展示用户头像昵称;订单页关联用户身份。

❓ 五、高频问题解答

用户拒绝授权怎么办?

引导跳转到设置页:wx.openSetting()。关键功能入口再次提示授权(如“点击收藏需先授权”)。

UnionID 如何获取?

条件:小程序绑定微信开放平台 + 用户同主体公众号已授权。后端用 code 换 session_key 时,微信自动返回 unionid(无需用户授权)!

为何不推荐首页强制授权?

用户体验差!微信明确禁止❌,可能导致审核不通过。

💎 总结最佳实践

静默登录优先:先用 openid 建立用户体系。按需授权:在用户触发敏感操作时再申请详细信息。全局状态+本地缓存:用 MobX 或 Vuex 管理用户数据。后端解密防篡改:校验签名 + 异常捕获(避免 BadPaddingException)。

代码全开源:[Github 链接] | 更多实战案例点我主页👉

#微信小程序 #用户授权 #前端开发 #实战教程

相关推荐

驾驶人多少岁就不能开车?60岁?还是70岁?
365足球外围网站官网

驾驶人多少岁就不能开车?60岁?还是70岁?

🕒 07-07 👁️ 7678
2023中国肉鸽养殖行业市场现状分析
365bet娱乐场投注

2023中国肉鸽养殖行业市场现状分析

🕒 10-29 👁️ 6245
汽车之家
365足球外围网站官网

汽车之家

🕒 08-12 👁️ 5672