小票 GET 接口放在现有商家订单控制器 /system/orderShOprate:
/getOrderPrintInfo?ddId=...:按本系统字段提供一张真实订单的小票数据。只做后端和 App 接入说明;不修改 App、不绑定或驱动打印机、不发送打印任务,不改变普通单、多店子单的付款或履约流程。不新增分支。
@Auth、显式 token 请求头;小票查询复用商家订单权限,覆盖普通商家、分管账号、夜市主和摊主,禁止跨店读取。pos_order.food 快照解析成数组,包含名称、数量、价格、规格加价、已选规格和逐商品备注;不查当前商品或规格,不重新计算订单金额。freight 和客户实付运费 customerDeliveryFee;旧订单无新字段时,实付运费回退 freight。优惠分项和合计不包含商家配送补贴,避免混算。payType 和台湾繁体 payTypeName,供 App 小票直接展示。到付 payStatus=1 不代表已收到现金,不能据此打印“已收款”。小票功能无需开关;有效商家可读取授权订单;跨店、普通用户和骑手被拒;普通/多店快照规格保留;无地址、旧运费、免运、积分及其他优惠可正确展示;不产生订单写入或真实打印。
本节追加商家代客下单的新单通知范围;原小票数据接口、权限及字段契约保持不变。
orderSource=MERCHANT、payType=4):订单创建事务提交成功后发送商家新订单通知,App 收到后获取小票数据并打印。不等待确认现金收款;小票仍按真实 payStatus 展示,不把创建成功当成已经收款。2、LINE Pay 3、Apple Pay 5):创建时不发送可触发打印的新单通知;服务端确认支付成功并提交事务后,再通知商家并由 App 打印。不能依据前端支付页面返回认定付款成功。ddId,不使用父单号代替。payType=1、线下转账 payType=6 的触发规则,不把它们混同于现金 payType=4。后端负责符合条件的新单通知及现有 /getOrderPrintInfo?ddId=... 小票数据。App 负责接收通知、按订单号防重复、获取数据及驱动已绑定的打印机。仅改后端不代表已经实现真机自动出纸;不修改 App,不新增打印状态表或打印机绑定功能。
现金创建提交后通知、提交前不通知、回滚不通知;三类线上支付创建不通知,付款成功后通知;现金确认及重复支付不重复发新单;商家代客外送单不能被普通用户单“等骑手接单”的通知分支漏掉;普通订单和多店通知无回归。App 需另行验证重复通知、创建页本地打印与推送同时到达、打印失败重试及实际出纸。