ThinkPHP开发小程序后端核心是守住四条线:一需路由显式映射;二控制器必须返回标准JSON;三跨域通过中间件处理并正确响应OPTIONS预检;四登录鉴权采用Token+Redis,严禁暴露session_key或secret。

ThinkPHP 开发小程序后端,核心不是堆功能,而是守住四条线:路由能定位、输出是标准 JSON、跨域不拦路、身份不裸奔。只要这四点稳住,接口就立得住,后续扩展也顺。
路由必须显式映射,不依赖默认规则
小程序前端调用如 /api/user/info,后端不能指望 ThinkPHP 自动解析“api/user/info”到对应控制器——必须在 route/api.php 中明确定义:
- 用
Route::get('api/user/info', 'api/User/info');或Route::post('api/login', 'api/Auth/login'); - 控制器文件路径严格为
application/api/controller/User.php,类名首字母大写,命名空间为app\api\controller - 避免使用带模块前缀的 URL(如
/index.php/api/...),上线前务必隐藏入口文件并配置伪静态
所有接口统一返回 JSON,禁用 HTML 或调试信息
小程序只认 JSON,任何额外输出(如 Warning、Notice、HTML 标签、var_dump)都会导致前端解析失败。控制器中必须:
- 全程使用
return json([...]);,不拼接字符串、不 echo/print_r - 关闭调试模式(
APP_DEBUG = false)或至少确保生产环境show_error_msg = false - 统一结构建议:
{"code":0,"msg":"ok","data":{...}},错误时code非 0,msg为简明提示,不暴露敏感路径或数据库信息
跨域处理走中间件,不靠前端 hack
小程序开发工具和真机调试都受浏览器同源策略影响,不能让前端加 header 或改域名绕过。正确做法是服务端主动放行:
立即学习“PHP免费学习笔记(深入)”;
- 新建中间件
app/middleware/Cors.php,在handle()中设置:$response->header('Access-Control-Allow-Origin', '*');和'Access-Control-Allow-Methods', 'GET,POST,OPTIONS' - 在
app/middleware.php中全局注册该中间件,或仅对 API 路由组启用 - 注意:预检请求(OPTIONS)需直接返回 200,不走业务逻辑
登录鉴权用 Token + Redis,绝不碰 session_key
微信登录环节最易出错也最危险。关键动作必须后端闭环:
-
js_code由小程序传入,后端用appid和secret向微信接口换openid和session_key;严禁前端拼 URL 或暴露 secret -
session_key不落库、不返回、不缓存明文;用bin2hex(random_bytes(16))生成 token,Redis 存键值对:token → ['openid'=>'xxx', 'session_key'=>base64_decode(...), 'expire_time'=>time()+7200] - 解密手机号等敏感数据时,
encryptedData和iv必须先base64_decode()成二进制,再传给openssl_decrypt



















