本说明供商家 App 前端对接摊位资料审核。摊位资料属于摊位,不属于某个登录账号;摊主账号(userType=4)可填写、提交和查看本摊位申请。夜市主账号(userType=3)只能通过进度接口查看旗下摊位状态。普通商家资料页不因此改变。本次只交付后端与两个 PC 的代码及 App 对接文档,App 页面代码需由 App 前端实现。
顶部照片使用已有的摊位现场照片 stallImageUrls。摊位名称、地址、所属夜市由 GET /stall/qualification 返回,页面只展示,不作为保存参数提交。所有摊位使用同一套字段和必填规则,不区分个人或公司经营。
| 页面项目 | 请求字段 | 提交时要求 | 限制 |
|---|---|---|---|
| 负责人姓名 | responsibleName |
必填 | 最多 100 字符 |
| 手机号码 | contactPhone |
必填 | 最多 32 字符 |
| 身份证/护照号码 | identityNumber |
必填 | 最多 64 字符 |
| 身份证/护照图片 | identityImageUrls |
至少 1 张 | 图片数组 |
| 摊位现场照片 | stallImageUrls |
至少 1 张 | 图片数组 |
| 银行账户户名 | bankAccountName |
必填 | 最多 100 字符 |
| 银行名称 | bankName |
必填 | 最多 100 字符;见下方银行列表 |
| 银行账号 | bankAccountNo |
必填 | 最多 64 字符 |
| 银行账户证明 | bankProofImageUrls |
至少 1 张 | 图片数组 |
| 电子邮箱 | email |
选填 | 最多 255 字符;填写时须为有效邮箱 |
| 摊位介绍 | stallIntroduction |
选填 | 最多 1000 字符 |
| 营业登记证明 | businessRegistrationImageUrls |
选填 | 图片数组 |
| 董监事资料查询截图 | directorScreenshotImageUrls |
选填 | 图片数组 |
| 食品业者登录字号 | foodRegistrationNumber |
选填 | 最多 64 字符 |
| 食品业者登录证明 | foodRegistrationImageUrls |
选填 | 图片数组 |
| 实质受益人声明(UBO) | uboDeclarationImageUrls |
选填 | 图片数组 |
每组图片最多 5 张,每张最多 5 MB,仅支持 JPEG/PNG。草稿允许缺必填项;提交时 App 应先提示缺失项,服务端仍会再次校验。选填文本可传空字符串,选填图片可传空数组。银行四项只作为审核材料快照保存,不会自动修改实际收款银行卡或支付设置。
摊位资料接口沿用商家 App 的 token 请求头;成功响应为 { "code": 200, "msg": "...", "data": ... }。storeId 从登录账号的摊位绑定推导,保存时不要传 storeId、状态、审核人、摊位名称或地址。
GET /stall/qualification:进入页面及保存、提交后刷新资料。读取 data.version 作为下一次保存或提交请求的版本;首次没有申请时为 0。data.currentApplication 是当前申请,data.approvedApplication 是当前有效的已通过申请,二者可能不是同一版本。还返回 storeId、stallName、stallAddress、nightMarketId 和 history。history 是摘要,查看某条完整材料再调用详情接口。GET /infouser/user/bankList:银行名称下拉数据来自 data 数组,选项显示 dictLabel,保存 dictLabel 到 bankName,与商家 PC 一致。POST /utils/Upload:使用 multipart/form-data,文件字段名 file。成功后把响应的 data(例如 /profile/upload/2026/10/16/photo.png)放入对应图片数组;保存路径字符串,不传图片二进制或完整外部 URL。上传中禁止保存、提交。公共路径可按后端域名加返回路径预览。POST /stall/qualification/draft:JSON body 保存草稿。即使资料不完整也可保存;填写了邮箱或上传了图片时仍须符合格式和文件规则。POST /stall/qualification/submit:与草稿使用相同 JSON body,服务端校验必填资料并提交审核。成功后使用返回的 data.version 和 data.currentApplication 更新页面。GET /stall/qualification/applications/{id}:点击 history 中的某条记录时,读取该版本完整资料与图片;只能查看本人摊位。历史申请只读。GET /stall/qualification/market:如夜市主 App 要展示旗下摊位进度,可使用此接口;只返回进度摘要,不返回负责人、证件及图片。保存或提交请求示例(图片路径和填写内容仅为格式示例):
{
"version": 0,
"responsibleName": "负责人姓名",
"contactPhone": "09xxxxxxxx",
"identityNumber": "证件号码",
"email": "",
"stallIntroduction": "",
"bankAccountName": "账户户名",
"bankName": "银行名称",
"bankAccountNo": "银行账号",
"identityImageUrls": ["/profile/upload/2026/10/16/id.png"],
"stallImageUrls": ["/profile/upload/2026/10/16/stall.png"],
"bankProofImageUrls": ["/profile/upload/2026/10/16/bank.png"],
"businessRegistrationImageUrls": [],
"directorScreenshotImageUrls": [],
"foodRegistrationNumber": "",
"foodRegistrationImageUrls": [],
"uboDeclarationImageUrls": []
}
currentApplication.status |
页面显示 | 可操作行为 |
|---|---|---|
null(无申请) |
未提交 | 填写、保存草稿、提交 |
0 |
草稿 | 编辑、保存草稿、提交 |
1 |
待审核 | 展示已提交资料,不允许修改或重复提交 |
2 |
已通过 | 展示审核结果;再次修改时会创建新申请版本,旧有效版本在新申请通过前继续有效 |
3 |
已驳回 | 展示 rejectReason;修改后保存或重新提交会创建新申请版本 |
不要仅凭当前申请状态判断是否已有有效资质:应看 approvedApplication 是否存在。审核通过也不会自动设置摊位营业状态。遇到版本冲突时重新调用 GET /stall/qualification,让用户确认最新资料后再操作,不能自动覆盖。旧待审核申请如果缺少新增的银行资料,平台不能直接审核通过,需要驳回后由摊主补齐重提。
新上传统一使用 /utils/Upload。历史资料可能包含旧私有引用(如 storeId/UUID.jpg),这种引用用 GET /stall/qualification/files/{storeId}/{fileName} 携带 token 读取并显示;不要把它拼成公开图片 URL。图片链接可能包含证件材料,不要把完整申请、图片路径或请求体写入普通日志。
后端读取新字段前,须先由开发者手动执行 updatesql/sql.md 末尾的 2026-10-16 摊位资料审核补充字段(034) SQL。本轮未执行数据库迁移或真实 App 联调;App 前端完成后应验证新建、草稿回显、提交、待审核只读、驳回重提、历史图片和银行下拉。