Feature Branch: (待创建,暂未建分支/未提交)
Created: 2026-07-29
Status: Draft —— 关键决策已定(D1–D6,见「已定决策」)
Input: 接入台湾 OMG(歐買尬 / 金流引擎 FunPoint)AIO 幕前支付(https://developers.omg.com.tw/payment/aio/api/01_order.html)用于订单在线支付。替代已就绪未启用的蓝新 NewebPay(011,不再启用);OMG 独立实现、不复用蓝新代码,仅复用平台共享订单/推送链路。
https://payment-stage.funpoint.com.tw/Cashier/AioCheckOut/V5https://payment.funpoint.com.tw/Cashier/AioCheckOut/V5POST,application/x-www-form-urlencodedCheckMacValue(SHA256,EncryptType=1) 单字段签名;这与蓝新 NewebPay 的 TradeInfo(AES) + TradeSha(SHA256) 双层模型不同。结论:需独立的 OMG 签名工具,不能复用 NewebPayEncryptUtil。具体算法(参数排序、URI 编码、HashKey/HashIV 包夹、SHA256 大写)在文档附錄 07_appendices / 范例 06_check-value-sample,留待 plan/research 落地。ChoosePayment):Credit(信用卡)、ApplePay、ATM、CVS(超商代码)、BarcodeATM、AFTEE、ALL。
CheckMacValue → POST 到 AioCheckOut/V5 → 消费者在 OMG 收银台支付 → OMG 服务端 POST 回 ReturnURL(商户须回 1|OK)→ 可选 OrderResultURL 客户端跳转(仅即时支付方式支持)。PaymentInfoURL(服务端 POST)+ 可选 ClientRedirectURL(客户端展示)。05_refund API;订单查询:04_order_query;付款结果通知:03_payment_notify。InvoiceMark 必须 N —— 电子发票仍走本项目 ezPay 链路(010/014),与支付解耦。MerchantTradeNo 全平台唯一;ReturnURL 与 OrderResultURL 不可相同。project-deprecated-code 记忆)。PosOrderShOprate/PosOrderQsOprate/UserOrderController/PosOrderController)、PayPush(iOS uni 云函数 msduser/msdrider/msdstore + PushEvent→push_message)、以及 sendAcceptRiderPush(迁移契机,见 CLAUDE.md「当前在用的订单操作入口」)。pos_store_omg。newebpay 依赖,不复用蓝新的 pos_store_newebpay / pos_order_payment;仅复用平台共享基础设施(订单状态机、推送、订单日志)。ChoosePayment=ALL:信用卡 Credit / Apple Pay / ATM / 超商 CVS / BarcodeATM / AFTEE)。05_refund)。说明:OMG 文档可正常获取(与 015 的 iFlight 不同),无硬阻塞。决策已定,可直接进
/speckit-plan。
消费者下单后选择在线支付,选定方式(如信用卡/Apple Pay),跳转 OMG 收银台完成付款;付款成功后订单变为已支付并进入履约。
Why this priority:在线支付是订单交易闭环的核心,没有它订单无法在线收款。
Independent Test:从一笔待支付订单出发,能跳转 OMG、用测试卡完成支付,订单状态变为已支付。
Acceptance Scenarios:
OMG 服务端回调(ReturnURL)到达后,验签 + 幂等更新订单,并触发后续履约(状态流转、商家/骑手推送)。
Why this priority:支付成功必须可靠地驱动订单履约,否则「付了钱却没人接单」。
Independent Test:模拟 OMG 回调(合法/伪造/重复),合法回调能更新订单并触发推送,伪造被拒、重复不重复发货。
Acceptance Scenarios:
1|OK,履约链路(含 sendAcceptRiderPush 推送)被触发。消费者选择 ATM 转账或超商缴费时,平台展示 OMG 生成的虚帐/缴费码,消费者在期限内完成后由 OMG 回调核销。
Why this priority:扩大支付覆盖面,但非即时到账,可晚于信用卡 MVP。
Independent Test:选择 ATM/超商,能拿到虚帐/缴费码并展示;模拟付款完成回调能核销订单。
Acceptance Scenarios:
PaymentInfoURL,Then 平台展示付款信息与期限。ReturnURL,Then 订单核销为已支付并触发履约。订单取消(用户取消/商家取消/超时退款)时,通过 OMG 退款 API(05_refund)原路退款,并同步状态。
Why this priority:售后资金闭环,依赖 D3 是否本期。
Independent Test:对一笔已支付订单发起取消,能调用 OMG 退款并同步为已退款。
Acceptance Scenarios:
商家或平台在后台维护 OMG 凭证(MerchantID/HashKey/HashIV),支持测试/生产切换与启用开关。
Why this priority:支付前提是凭证可用,属 P2 基础设施。
Independent Test:在后台录入门店 OMG 凭证,能用于发起支付与验签。
Acceptance Scenarios:
MerchantTradeNo 幂等,不重复发货/推送。ChoosePayment=ALL:信用卡 / Apple Pay / ATM / 超商 / BarcodeATM / AFTEE);LINE Pay 本期不做(D4)。CheckMacValue(SHA256,EncryptType=1)对请求签名、对回调验签;签名工具独立于现有 NewebPay 工具。ReturnURL 回调时验签 + 按 MerchantTradeNo 幂等更新订单为已支付,并回 1|OK。sendAcceptRiderPush)。PaymentInfoURL 回调)。05_refund)退款并同步状态(本期范围,D3)。MerchantTradeNo、金额、方式、时间、回调原始报文、退款记录),支持对账。InvoiceMark=N 下与 ezPay 电子发票链路解耦,支付不干涉开票。MerchantTradeNo(幂等键)、订单、金额、ChoosePayment、ReturnURL/NotifyURL、生成的 CheckMacValue。MerchantTradeNo、关联订单、金额、支付方式、状态(待付/已付/失败/退款)、OMG 交易号、回调原始报文、时间。PayPush 推送链路、用户体系,不为此功能重建。CheckMacValue 算法与 ECPay 同源(业界标准),具体实现留待 plan/research。InvoiceMark=N)。payment-stage.funpoint.com.tw 测试端点与测试凭证,生产环境与凭证后续切换。