必须先调 wx.login 获取 code 再调 wx.getUserProfile,code 5分钟有效且仅能用一次;后端用 code 调用微信 auth.code2Session 接口换取 openid 和 session_key;解密 encryptedData 需用 openssl_decrypt 配合正确 session_key 和 iv;必须校验 signature 防伪造。

小程序前端调用 wx.login 拿 code 是第一步,别漏掉
用户点击授权按钮后,前端必须先调用 wx.login 获取临时登录凭证 code,而不是直接调用 wx.getUserProfile 或 wx.getUserInfo(后者已废弃且不返回有效用户标识)。这个 code 有效期 5 分钟,且只能使用一次,后端拿它去微信接口换 openid 和 session_key。
常见错误:前端只调 wx.getUserProfile 就以为拿到用户信息了,结果后端没 code,根本没法登录态校验,也拿不到真实 openid。
-
wx.login必须在用户触发行为(如按钮点击)后调用,不能 onLoad 自动执行,否则 iOS 会静默失败 - 拿到
code后应立即通过wx.request发送给 PHP 后端,不要缓存或延迟 - 若需获取昵称头像等信息,应在后端解密
encryptedData+iv(由前端调wx.getUserProfile提供),而非依赖旧式 getUserInfo 接口
PHP 后端用 code 换 openid 要调微信 auth.code2Session 接口
PHP 收到前端传来的 code 后,需拼接 URL 请求微信服务器:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code。注意参数名是 js_code,不是 code,写错就返回 {"errcode":40029,"errmsg":"invalid code"}。
返回的 JSON 中,openid 是用户唯一标识(同一小程序下不变),session_key 用于后续解密用户敏感数据,unionid 仅当小程序绑定开放平台才存在。
立即学习“PHP免费学习笔记(深入)”;
抖猫高清去水印微信小程序,源码为短视频去水印微信小程序全套源码,包含微信小程序端源码,服务端后台源码,支持某音、某手、某书、某站短视频平台去水印,提供全套的源码,实现功能包括:1、小程序登录授权、获取微信头像、获取微信用户2、首页包括:流量主已经对接、去水印连接解析、去水印操作指导、常见问题指引3、常用工具箱:包括视频镜头分割(可自定义时长分割)、智能分割(根据镜头自动分割)、视频混剪、模糊图片高
- 务必校验返回中是否有
openid字段,空值说明appid/secret配错,或code已过期/重复使用 -
session_key必须安全存储(如 Redis 且设 TTL),不可返回给前端,也不可硬编码进 JS - 微信接口可能有频率限制,建议对失败请求做简单重试(最多 1 次),避免因网络抖动导致登录失败
解密 encryptedData 得用户信息得用 openssl_decrypt,别用 base64_decode 直接解
前端调 wx.getUserProfile 后得到 encryptedData、iv 和 rawData,其中 encryptedData 是 AES-128-CBC 加密后的 Base64 字符串,PHP 必须用 openssl_decrypt 配合 session_key 解密,不能跳过加密步骤直接解析。
关键点:先将 session_key Base64 解码为二进制密钥,iv 同样处理;加密模式必须是 OPENSSL_CIPHER_AES_128_CBC,填充方式为 PKCS7(PHP 7.1+ 默认支持)。
- 解密前检查
encryptedData和iv是否为空或非法 Base64,否则openssl_decrypt返回 false 且不报错 - 解密失败常见原因:用了错误的
session_key(比如缓存了旧值)、iv长度不是 16 字节、未去除 Base64 补位字符 - 解密成功后得到的是 JSON 字符串,需
json_decode,字段含nickName、avatarUrl、gender、city、province、country、language
敏感操作必须校验 signature,防前端伪造 rawData
微信要求对用户资料进行完整性校验:前端传来的 rawData(JSON 字符串)和 signature(SHA1(rawData + session_key)),PHP 必须重新计算签名比对,一致才认为数据未被篡改。
这步常被忽略,但它是防止用户伪造昵称、头像的关键防线。如果跳过,攻击者可构造任意 rawData 并配出对应 signature(只要知道 session_key),而 session_key 若泄露或复用,风险极大。
- 计算 signature 时,
rawData必须是原始字符串(不含空格/换行),不能是 json_encode 后再处理过的 -
session_key必须和解密encryptedData时用的是同一个,且未被覆盖或过期 - 校验失败应直接拒绝入库,记录日志,不抛异常也不提示具体原因,避免暴露校验逻辑
code、encryptedData、iv、rawData、signature),PHP 后端负责凭证交换、密钥管理、加解密、签名验证——任何一环把本该后端做的逻辑挪到前端,都会带来安全隐患或兼容问题。










