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

先通过微信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):

立即进入“豆包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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang如何实现文件压缩与解压_Golang文件压缩解压实践详解
上一篇 2025年12月2日 02:20:57
mysql镜像配置如何设置备份压缩_mysql镜像配置备份文件压缩设置方法
下一篇 2025年12月2日 02:20:59

相关推荐

发表回复

登录后才能评论
关注微信