如何通过ThinkPHP获取微信用户的手机号_解密加密数据AES算法实例

陌磊君_7334

陌磊君_7334

2026-04-07

416人浏览

原创

微信手机号解密必须用openssl_decrypt而非mcrypt_decrypt,因php 7.2+已废弃mcrypt;需先base64_decode session_key和iv,再用aes-128-cbc解密encrypteddata,最后json_decode提取phonenumber。

如何通过thinkphp获取微信用户的手机号_解密加密数据aes算法实例

微信手机号解密必须用 openssl_decrypt,不是 mcrypt_decrypt

ThinkPHP 自身不提供微信手机号解密的封装,得自己写 AES-128-CBC 解密逻辑。微信返回的 encryptedData 是标准 PKCS#7 填充、AES-128-CBC 加密结果,密钥是会话密钥 session_key(32 字节),IV 是 iv(16 字节)。PHP 7.2+ 已废弃 mcrypt 扩展,硬上会报 Function mcrypt_module_open() is deprecated 或直接失败。

实操建议:

  • 确认 PHP 启用了 openssl 扩展(extension=openssl 在 php.ini 中启用)
  • session_key 必须原样使用,不能 base64_decode 多次;它本身是 base64 编码过的,解密前需先 base64_decode($session_key)
  • iv 同理,也必须 base64_decode 一次再传给 openssl_decrypt
  • 解密后得到的是 JSON 字符串,需 json_decode 提取 phoneNumber 字段

ThinkPHP 中解密代码要避开 input() 自动过滤和字符截断

微信回调或小程序前端传来的 encryptedData、iv、session_key 都是 base64 字符串,含 +、/、=。ThinkPHP 的 input() 默认会做 URL 解码和空格/加号转换(把 + 当空格),导致 base64 解码失败,报 data length is not multiple of block size 或空结果。

实操建议:

  • 改用 $_POST['encryptedData'] 或 $request->post('', '', null)(第三个参数设为 null 禁用过滤)
  • 不要对 base64 字符串做任何 trim、urldecode、htmlspecialchars 处理
  • 校验三者长度:strlen(base64_decode($encryptedData)) % 16 === 0(AES-CBC 要求明文长度是块大小倍数)

解密失败常见错误现象及对应检查点

返回空数组、null、false,或解密出乱码(如 U\u001f~...),基本是以下某处错了:

  • session_key 过期或已被其他接口(如 getPhoneNumber)用过 —— 微信 session_key 一次有效,且 2 小时过期
  • encryptedData 和 iv 来自不同次调用 —— 必须是同一 button 点击后一次性获取的三元组
  • 误把 errCode 为 0 当作成功 —— 得看响应体是否含 phoneNumber,微信有时 errCode=0 但 data 为空(权限未授权、用户拒授)
  • 没验证签名(signature)和 rawData —— 虽然不影响解密,但跳过校验会导致伪造请求直接进解密流程,风险极高

ThinkPHP 日志里别直接打 session_key 和 encryptedData

这些属于敏感凭据,日志一旦落盘就等于泄露用户手机号解密能力。TP 默认日志级别包含 debug,Log::debug('session_key: ' . $session_key) 这种写法在生产环境极其危险。

实操建议:

  • 日志中只记录 substr(md5($session_key), 0, 8) 或哈希摘要,不记录原文
  • 解密失败时,只记错误类型(如 "aes_decrypt_failed: invalid iv length"),不记输入数据
  • 确保 runtime/log 目录不在 Web 可访问路径下,避免被扫描下载
微信手机号解密看着只是几行代码,但每个参数的生命周期、编码状态、传输完整性都得卡死。最容易被忽略的是:session_key 不可重用、base64 字符串不能被框架自动处理、日志不能留明文凭据——这三点出问题,调试时根本看不出哪步断了。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

360借条
360借条

3分钟审核,最快5分钟放款,极速到账,低服务费,年化综合息费率7.2%起。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2075

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3082

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1036

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3519

7

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

3941

7

thinkphp性能怎么样
thinkphp性能怎么样

thinkphp 是一款高性能的 php 框架,具备缓存机制、代码优化、并行处理和数据库优化等优势。官方性能测试显示,它每秒可处理超过 10,000 个请求,实际应用中被广泛用于京东商城、携程网等大型网站和企业系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

1320

7

ThinkPHP6后台管理系统开发与RBAC权限控制实践
ThinkPHP6后台管理系统开发与RBAC权限控制实践

本专题围绕 ThinkPHP6 在后台管理系统开发中的应用展开,重点讲解基于 RBAC 模型的权限控制实现方案。内容涵盖管理员角色设计、菜单权限分配、接口鉴权、中间件拦截机制以及后台模块化开发思路。同时结合实际案例,讲解如何构建完整的后台管理系统,包括用户管理、权限管理与操作日志记录,帮助开发者搭建安全、可扩展的企业级后台系统。

2026.03.20

543

14

ThinkPHP API接口开发与前后端分离实战
ThinkPHP API接口开发与前后端分离实战

本专题围绕ThinkPHP在前后端分离项目中的 API 开发展开,系统讲解 RESTful 接口设计规范、统一返回结构、参数验证与异常处理机制。内容涵盖 Token 鉴权、跨域处理、接口版本管理以及接口文档生成方案。通过完整项目案例,帮助开发者构建规范、高效、易维护的后端接口服务体系。

2026.03.20

344

14

ThinkPHP ORM模型关系与数据库操作优化实践
ThinkPHP ORM模型关系与数据库操作优化实践

本专题聚焦ThinkPHP中 ORM 模型的高级用法与数据库操作优化技巧。内容包括一对一、一对多、多对多关系定义与使用、关联预加载、查询构建器优化以及复杂查询封装方法。同时结合实际业务场景,讲解如何避免 N+1 查询问题、提升数据库访问效率,帮助开发者编写高性能的数据访问层代码。

2026.03.20

239

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习