|
|
4 órája | |
|---|---|---|
| .. | ||
| src | 4 órája | |
| README.md | 4 órája | |
| pom.xml | 4 órája | |
对齐目标:F:\shop\shop(ThinkPHP 6.1.5,约 4.45 万行)。核心原则:不改任何前端代码即可切换后端。
../API清单.md / ../API清单.csv:全部 253 个接口(store 151 / api 74 / admin 24 / timer 4),由 ../tools/extract_api.py 自动扫描生成。| 约定 | 内容 |
|---|---|
| 响应体 | {"status":200,"message":"success","data":{...}},业务成败看 status,HTTP 恒为 200 |
| 状态码 | 200 成功 / 401 未登录 / 403 无权限 / 500 错误(对齐 config/status.php) |
| 分页 | data.list = {total, per_page, current_page, last_page, data:[...]},snake_case;页码越界时 current_page 夹到 last_page |
| 认证 | 请求头 Access-Token;登录态存 ThinkPHP File 缓存(runtime/cache),格式见下文「认证」 |
| 时间 | yyyy-MM-dd HH:mm:ss,东八区 |
| 软删除 | is_delete(10=正常 / 30=删除,以模型为准逐表核对) |
| 枚举 | 状态值用 10/20/30 数字(如订单 status、支付 trade_status),禁止自创枚举值 |
cn.yoshop
├── common ← app/common(实体、业务 service、library)
├── admin ← app/admin(平台后台,24 个接口)
├── store ← app/store(商家后台,151 个接口,重头)
├── client ← app/api(H5+小程序,74 个接口)
├── timer ← app/timer(定时任务,用 @Scheduled 替代)
└── config
请求头 Access-Token
→ md5(token) → {runtime}/cache/{前2位}/{后30位}.php
→ 文件头 32 字节("<?php
//" + 12位过期时间戳 + "
exit();?>
")+ PHP serialize 数据
StoreAuthInterceptor 校验登录态,白名单 passport/login、passport/logout、map/transfer,
失败返回 {"status":401,"message":"请先登录后再访问","data":{"isPrompt":true}}。
配置 yoshop.auth.mode:"off" 开发/双跑放行;"file" 真实校验(需与 PHP 同机或目录可见)。
注意必须带引号,裸 off 会被 YAML 解析成布尔 false。
详情多出的 skuList/video/videoCover/categoryIds/serviceIds/isSpecLocked/specList/content
用 @JsonView(Views.Detail.class) 标注,列表接口用 @JsonView(Views.List.class)。
需 spring.jackson.mapper.default-view-inclusion: true,否则未标注字段会被全部排除。
PHP 与 Java 同时在线(Nginx 按比例分流),用脚本对同一请求双发、diff 响应 JSON;API清单.csv 可直接生成冒烟用例清单。
is_delete 各表实际取值checkPrivilege(API 级权限)尚未实现:PHP 按角色查 store_api 表,Java 端只校验登录态,上线前需补齐API清单.md 中 URL 为推断值)