集成全景
图模工坊不抢电商系统的”商品 / 订单 / 支付 / 物流”主路,它只插在一个明确位置:
1 | [ 电商主站 / 小程序 / APP ] |
集成的本质是三个边界:账号、订单、回调。下面分别说明。
边界一:账号与跳转
方案 A — 共享账号(推荐)
电商主站的会员体系作为唯一身份源;pf-service 暴露 POST /pf-manage/auth/exchange 接收主站签的临时 token,校验后下发 pf-service 的 access token。
1 | 小程序/H5 |
方案 B — 独立账号 + 嵌入登录
用户在主站登录,pf-app 内嵌登录页(手机号验证码 / 微信授权);适合主站和工坊在不同主体或想沉淀工坊侧独立用户。
方案 C — 完全嵌入 iframe
主站把 pf-app 以 iframe 嵌入;通过 postMessage 互传订单上下文与回调。
边界二:订单与商品
订单层只需要解决一件事:**告诉工坊”这单要做什么”**。
1 | POST /pf-app/orders |
orderNo— 主站订单号,工坊端只读albumId / albumSizeId / albumPageCountId— 选品阶段已确定totalAmount— 仅记录便于追溯,工坊不重新计价expireAt— 编辑窗口截止时间,过期工坊禁用编辑
普通模板订单(如名片、海报)则用 POST /pf-app/orders + order_templates 关联。
边界三:合成结果回调
合成完成(成功或失败)后,pf-service 向主站推:
1 | POST {你的回调地址} |
主站收到后更新本地订单状态、推送用户、入打印队列。
回调可靠性
- 失败重试:1m / 5m / 30m / 2h / 12h 五次退避
- 签名校验:
X-PF-Signature = HMAC_SHA256(secret, body) - 幂等:用
submissionId做唯一键去重
一个典型集成场景
「在某电商小程序里上架”全家福相册”」的最小集成:
配置阶段(一次性)
- 在
pf-manage配好相册family-album,关联 4 种尺寸 / 3 种 P 数 / 若干内页模板 - 在主站商品后台勾选”图模工坊定制”,绑定
albumId
- 在
用户下单
- 小程序选品 → 选尺寸 → 选 P 数 → 下单 → 支付
- 主站创建订单后调
POST /pf-app/orders把订单同步到 pf-service
跳转编辑
- 主站打开 H5:
https://pf.example.com/album?orderNo=...&token=... - 用户在工坊批量传图、调整顺序、加字、预览
- 点”提交” →
POST /pf-app/order-template-submissions
- 主站打开 H5:
合成与回调
- 后台 Job 自动合成
- 合成完成 → 回调主站
- 主站推送用户:”您的相册已制作完成”
审核与生产
- 管理员在
pf-manage抽检 - 通过 → 下载高清 PDF → 进打印队列
- 不通过 → 驳回 → 通知用户重做
- 管理员在
数据所有权
| 类目 | 归属 |
|---|---|
| 用户身份 | 主站(工坊保留映射) |
| 订单元数据 | 主站(工坊只镜像必要字段) |
| 原始素材 | 工坊 MinIO |
| 合成成品 | 工坊 MinIO(可定期归档到主站冷存储) |
| 模板/字体/背景 | 工坊 |
| 审核日志 | 工坊 |
集成清单
接入前确认这 8 项:
- 账号方案(A / B / C)
- 共用 token 或独立 token 的签发流程
-
orderNo主站规则 - 商品 → albumId/templateId 的映射表
- 编辑窗口
expireAt策略 - 合成完成的回调地址 + 签名密钥
- 失败处理(驳回/重新合成/退款)流程
- 高清成品的归档/取回策略
接口速查
| 接口 | 方法 | 说明 |
|---|---|---|
/pf-manage/auth/exchange |
POST | 主站 ticket 换工坊 token |
/pf-app/orders |
POST | 订单同步 |
/pf-app/orders/:orderNo |
GET | 订单查询 |
/pf-app/order-template-submissions |
POST | 用户提交合成 |
/pf-app/order-template-submissions/:id |
GET | 提交状态查询 |
/pf-manage/order-template-submissions |
GET | 后台列表(带筛选) |
/pf-manage/order-template-submissions/:id/retry |
POST | 重新合成 |
/shared/oss/upload |
POST | 申请上传预签名 |
/shared/face/detect |
POST | 人脸检测代理 |
完整接口字段以
pf-serviceSwagger(http://host:3000/docs)为准。
下一步
- 想看库表结构 → 数据模型
- 想看后端入口 → pf-service 后端
- 想拉起来联调 → 快速开始