3.2 KiB
3.2 KiB
打印版 / 电子版:App 对接摘要
更新:2026-09-14。以后端交付的 OSCAR_PHOTO_PURCHASE.md 为准。人脸识别及最近照片流程使用 type=2;手机上传 type=1 保持原有格式。原打印页面和打印 ViewModel 未改动。
已对齐的协议
verify-result、get-pay-url的人脸照片请求显式发送video_id=[],照片 ID 去重。- 报价分别使用
price_image/amount、price_electronic/amount_electronic。阶梯价格与总价以服务端为准,不在 App 计算。 - 本次后端不支持免费电子版。 电子版单价缺失、非正数或已选照片总额非正数时不可购买;空选可展示正数基础单价和零总额,但不能下单。
get-pay-url返回预选缓存、订单号和锁定金额,尚未创建实体订单或完成付款。App 保存该响应的订单金额;微信支付弹窗保持原 UI,仅显示标题、二维码和原扫码提示,不额外显示购买模式或金额。服务端保留员工 1 分钱优惠,实付金额以小程序为准。- 新版支付链接要求
purchase_mode匹配、金额有效、order_status=10且 URL 非空。不能凭下单成功或type=5判定付款完成。 - HTTP
pay-success-message只有order_status=30才按购买成功处理;10继续等待,40/50显示取消/退款,其他状态不作为成功并显示服务端状态。 - WebSocket 新格式为
code=5 → data(type=5) → data(订单信息),同时保留旧网关的扁平data解析。type=1的file_map仍用于原上传打印流程。 - 完成消息需匹配订单号、来源、照片集合及购买模式,重复 HTTP / WebSocket 消息只处理一次。
- 选择照片或重新选择购买模式后清理旧支付二维码,重新取链接。业务错误显示服务端
msg;预选失效等查询错误关闭支付弹框、刷新报价,不继续使用旧链接。
完成与相册
verify-result → get-pay-url → 用户扫码建单支付
→ HTTP 补查 / WebSocket 完成消息
→ print:原打印与相册流程
→ electronic:独立完成页 → save-album-url
电子版完成页仅显示二维码及 90 秒返回倒计时,失败可重试。电子版不调用打印机、不扣纸、不调用 print-notify / print-complete,也不播放打印语音。
取得相册二维码不代表原图已转存完成。相册准备中由小程序展示,App 不再次要求付款;倒计时不影响购买权益。
旧版本兼容
- 旧 App 未传
purchase_mode:新后端默认print。 - 新 App 遇到旧报价响应:保留打印,禁用缺失电子价的电子版。
- 旧打印支付响应同时缺少模式和金额时,保留原支付 URL 与报价显示;这种订单的完成消息允许省略模式。
- 电子版不得降级为打印版,新模式订单完成消息必须显式携带匹配模式。
验证边界
自动化验证使用本地网络拦截响应,覆盖正价购买、零价/未配置禁用、待付款不跳转、嵌套推送、重复/错误消息、预选失效、业务错误恢复及相册重试。真实微信支付、员工优惠、设备打印、FaceBox 转存和小程序下载仍需按后端文档进行部署后联调。