在 gamepp-branch 串接外部金流(首先為 ECPay/綠界 ATM 虛擬帳號),擴展付款管道,同時維持內部金流的穩定性。
買家透過 ECPay 虛擬帳號付款,不依賴 EGoPay 體系
幣商使用自己的銀行帳戶收款,脫離 EGoPay 預撥機制
外部買/賣單可互相撮合,但不可與內部(EGoPay)單交叉撮合
先做不啟用,所有外部功能以 feature flag 控制,部署後零影響
在 tickets 表新增 source 欄位,將票單分為 internal / external 兩個撮合池,撮合引擎強制驗證買賣雙方 source 必須一致。
| source | 說明 | 買單金流 | 賣單金流 |
|---|---|---|---|
internal |
現有 EGoPay 體系 | EGoPay 虛擬帳號 / 超商 / 固定帳號 | EGoPay 預撥 |
external |
外部金流 | ECPay 虛擬帳號 | 幣商自有銀行帳戶 |
| pay_method | 說明 | source |
|---|---|---|
| 1 ~ 9 | 現有 EGoPay 各付款方式 | internal |
| 10 | ECPay ATM 虛擬帳號 | external |
| 11 | 外部銀行轉帳(幣商自有帳戶) | external |
使用 ECPay 新版 Payment API(JSON + AES),直接取得虛擬帳號,不需導向 ECPay 付款頁面。
| 環境 | Endpoint |
|---|---|
| 測試 | https://ecpayment-stage.ecpay.com.tw/1.0.0/Cashier/GenPaymentCode |
| 正式 | https://ecpayment.ecpay.com.tw/1.0.0/Cashier/GenPaymentCode |
| 回呼 | 時機 | 關鍵欄位 | 回應 |
|---|---|---|---|
| PaymentInfoURL | 取號成功 | BankCode, vAccount, ExpireDate |
1|OK |
| ReturnURL | 付款完成 | RtnCode=1, TradeAmt, PaymentDate |
1|OK |
參數按 key 排序 → & 串接 → 前加 HashKey 後加 HashIV → URL encode → 轉小寫 → SHA256 → 轉大寫
幣商使用自己的銀行帳戶建立賣單,脫離 EGoPay 預撥機制。賣單建立後進入審核、撮合、撥款流程。
pay_method=11, source=external
含幣商銀行帳戶資訊
驗證幣商已預撥保證金is_paid 審核通過
與外部買單撮合 → 建 order
買方付款完成後撥款給幣商
| Phase | 內容 | 影響 | 風險 |
|---|---|---|---|
| 1 | Schema migration + feature flag | 零影響(default='internal') | 低 |
| 2 | Match.php source 驗證 | 零影響(現有 tickets 全是 internal) | 低 |
| 3 | EcpayService + Model + Config | 新檔案,不影響現有 | 低 |
| 4 | ECPay callback controller | 新路由,不影響現有 | 低 |
| 5 | External API 擴充 | Feature flag 保護 | 中 |
| 6 | 外部賣單 + HQ 對帳 | Feature flag 保護 | 中 |
| 7 | 測試站啟用 | 限定測試站 | 中 |
| 檔案 | 用途 |
|---|---|
app/Services/EcpayService.php | ECPay API(建單、驗簽、AES 加解密) |
app/Models/EcpayPaymentM.php | ecpay_payments model |
app/Models/EcpayLogM.php | ecpay_logs model |
app/Http/Controllers/Api/EcpayCallbackC.php | ECPay 回呼處理 |
config/ecpay.php | ECPay credentials (env-based) |
| 檔案 | 改動 |
|---|---|
Match.php | 加 source 一致性驗證 |
TicketM.php | 加 source 常數 |
config/admin.php | 加 pay_method 10, 11 |
routes/api.php | 加 ECPay callback 路由 |
ExternalTicketC.php | 允許 pay_method=10,設 source=external |
TicketAjaxC.php | 建單時根據 pay_method 設 source |
| 檔案 | 改動 |
|---|---|
BankReconcileMiddleware.php | 加 reconcileExternal() |
Api\TicketC.php | prepaid 同步接受 source 欄位 |
所有外部金流入口以 feature_external_payments flag 保護
部署後 flag=0 → 零影響 → 測試完成後改為 1 啟用
測試帳號建 ATM 虛擬帳號成功
模擬 ECPay 回呼,trade_status 正確更新
外部買賣單可撮合
外部 + 內部撮合被拒絕
外部賣單同步 HQ 可對帳
關閉時所有外部功能不可用