先通过微信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):
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
'缺少 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
:
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小程序API开发登录流程怎么实现的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/144700.html
微信扫一扫
支付宝扫一扫