ThinkPHP 5.1对接微信小程序接口的关键在于理清请求路径、数据输出规范、跨域处理和身份校验四环节:一需配置路由映射;二控制器须返回标准JSON;三通过CORS行为解决跨域;四用Token实现登录鉴权。

ThinkPHP 5.1 搭配微信小程序开发接口,对零基础 PHP 开发者来说并不难上手——关键在于理清请求路径、数据输出规范、跨域处理和身份校验四个环节。不需要写复杂中间件,也不必重造轮子,按标准流程走通一次,后续接口基本复用同一套结构。
一、路由配置:让小程序能“找到”你的接口
ThinkPHP 5.1 默认使用 模块/控制器/操作 的 URL 规则。小程序发起请求时,地址如 /api/article/list,就需要在路由中明确映射到对应控制器方法。
- 打开
route/route.php(或route/api.php,若已启用 API 分组) - 添加一条规则:
Route::get('api/article/list', 'api/Article/index'); - 确保控制器命名空间为
apppicontroller,类名首字母大写,文件存于application/api/controller/Article.php
这样,小程序调用 uni.request({ url: '/api/article/list' }) 就能准确命中后端逻辑。
二、控制器写法:返回标准 JSON,不带 HTML 或跳转
小程序只认 JSON 数据,不能有视图渲染、模板输出或重定向。控制器方法必须以 return json(...) 或 return $this->success(...) 结束。
立即学习“PHP免费学习笔记(深入)”;
- 基础示例(无需模型,先跑通):
namespace apppicontroller;
use thinkController;
class Article extends Controller
{
public function index()
{
return json([
'status' => 1,
'msg' => '获取成功',
'data' => [
['id' => 1, 'title' => '入门指南'],
['id' => 2, 'title' => '支付流程说明']
]
]);
}
}
- 实际项目中建议封装统一响应格式,例如新增
app/common.php定义api_response($data, $code = 1, $msg = 'ok')函数,避免每处都写重复结构
三、解决跨域问题:小程序本地调试必过的一关
开发时小程序常通过 localhost:8080 运行,而 ThinkPHP 接口跑在 localhost:8000 或 Nginx 下,浏览器会拦截跨域请求。最稳妥方式是加一个行为(Behavior)统一注入响应头。
- 在
application/api/behavior/CORS.php创建该文件 - 内容直接复制官方推荐写法(适配 TP5.1):
namespace apppiehavior;
use thinkResponse;
class CORS
{
public function appInit()
{
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
}
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
}
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
}
exit(0);
}
}
}
- 再打开
application/tags.php,在'app_init'数组里加上:'app\api\behavior\CORS'
重启服务后,所有 API 响应都会自动带上跨域头,Postman 和小程序调试均能通过。
四、登录与鉴权:用 Token 实现简单但有效的用户识别
小程序没有 Cookie 天然支持,推荐用 Token 方式管理登录态。TP5.1 自带的 thinkacadeCache 可临时存 token,或配合 JWT 扩展增强安全性。
- 登录接口返回示例:
public function login()
{
$code = input('code/s');
// 调用微信接口换取 openid(略去 curl 实现)
$openid = 'oXxxxyyyyzzz'; // 实际从微信返回解析
$token = md5($openid . time() . rand(1000,9999));
cache('token_' . $token, $openid, 7200); // 缓存 2 小时
return json(['status' => 1, 'token' => $token]);
}
- 后续接口校验 token(可抽成公共方法):
protected function checkToken()
{
$token = request()->header('token');
if (!$token || !cache('token_' . $token)) {
return json(['status' => 0, 'msg' => '未登录']);
}
return ['openid' => cache('token_' . $token)];
}
小程序每次请求带上 header: { token: 'xxx' },后端就能识别当前用户,用于订单归属、信息读取等业务。



















