thinkphp小程序API开发登录流程怎么实现

22次阅读

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

thinkphp小程序API开发登录流程怎么实现

小程序登录流程在 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);     } } 

在需要验证的路由中使用该中间件即可。

thinkphp小程序API开发登录流程怎么实现

简篇AI排版

AI排版工具,上传图文素材,秒出专业效果!

thinkphp小程序API开发登录流程怎么实现200

查看详情 thinkphp小程序API开发登录流程怎么实现

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

thinkphp php js 前端 微信 qq 小程序 session 后端 ai 会话管理 api开发 php 中间件 thinkphp Token 接口 https

text=ZqhQzanResources