先通过微信wx.login获取code,再由ThinkPHP后端请求jscode2session接口换取openid和
session_key,实现用户登录与会话管理。

小程序登录流程在 ThinkPHP 中实现,核心是结合微信的登录机制完成用户身份识别和本地会话管理。整个过程不需要用户输入账号密码,依赖微信授权获取临时登录凭证(code),再通过后端与微信接口通信换取用户唯一标识(openid 和 session_key)。以下是具体实现步骤:
1. 小程序前端调用 wx.login 获取 code
在小程序中,调用
wx.login()
获取临时登录凭证 code,这个 code 只能使用一次。
wx.login({ success(res) { if (res.code) { // 将 code 发送给你的 ThinkPHP 后端 wx.request({ url: 'https://yourdomain.com/api/user/login', method: 'POST', data: { code: res.code }, success: (result) => { // 接收后端返回的 token 或用户信息 const token = result.data.token; wx.setStorageSync('token', token); // 存储 token } }); } } });
2. ThinkPHP 后端接收 code 并请求微信接口
后端收到 code 后,需调用微信官方接口
https://api.weixin.qq.com/sns/jscode2session
换取 openid 和 session_key。
示例控制器代码(ThinkPHP 6):
立即学习“PHP免费学习笔记(深入)”;
<?php namespace appcontroller; use thinkController; use thinkfacadeHttpClient; class UserController extends Controller { public function login() { $code = input('post.code'); if (!$code) { return json(['error' => '缺少 code'], 400); } $appid = 'your_appid'; // 替换为你的小程序 AppID $secret = 'your_secret'; // 替换为你的小程序 AppSecret $url = "https://api.weixin.qq.com/sns/jscode2session"; $params = [ 'appid' => $appid, 'secret' => $secret, 'js_code' => $code, 'grant_type' => 'authorization_code' ]; $response = HttpClient::get($url, $params); $wxData = json_decode($response->getBody(), true); if (isset($wxData['errcode'])) { return json(['error' => $wxData['errmsg']], 400); } $openid = $wxData['openid']; $sessionKey = $wxData['session_key']; // 根据 openid 查找或创建用户 $user = appmodelUser::firstOrCreate(['openid' => $openid]); // 生成本地 token(可使用 JWT 或自定义随机串) $token = md5($openid . time() . rand(1000, 9999)); // 将 token 存入数据库或缓存,并设置过期时间 $user->token = $token; $user->save(); return json([ 'token' => $token, 'user' => $user ]); } }
3. 后续请求携带 token 验证身份
用户登录后,小程序每次请求需在 header 中携带 token,后端中间件验证 token 是否有效。
例如创建中间件
CheckToken
:
<?php namespace appmiddleware; class CheckToken { public function handle($request, Closure $next) { $token = $request->header('Authorization') ?? $request->param('token'); if (!$token) { return json(['error' => '未登录'], 401); } $user = appmodelUser::where('token', $token)->find(); if (!$user) { return json(['error' => '登录已失效'], 401); } // 将用户信息绑定到请求对象 $request->user = $user; return $next($request); } }
在需要验证的路由中使用该中间件即可。
4. 可选:解密用户敏感信息(如手机号、昵称)
如果需要获取用户加密数据(如手机号),前端调用
wx.getPhoneNumber
得到 encryptedData 和 iv,发送到后端。
后端使用
session_key
对数据进行解密(注意:session_key 不可暴露给前端)。
ThinkPHP 中可通过官方提供的加密工具类解密:
$pc = new WXBizDataCrypt($appid, $sessionKey); $result = $pc->decryptData($encryptedData, $iv, $data);
其中
WXBizDataCrypt
是微信官方提供的 PHP 解密类,需引入项目中。
基本上就这些。流程清晰:前端拿 code → 后端换 openid → 创建/查找用户 → 返回 token → 后续请求靠 token 认证。安全关键点是 session_key 绝不能传给前端,所有解密操作必须在服务端完成。
以上就是thinkphp php js 前端 微信 qq 小程序 session 后端 ai 会话管理 api开发 php 中间件 thinkphp Token 接口 https


