Skip to content

退款與沖正

本頁說明

講什麼:入金系統中三種退款/沖正機制的產品邏輯——什麼時候用哪種、系統做了什麼、失敗了怎麼辦 適合誰:需要理解退款全貌的產品經理 前置閱讀入金方式總覽入金規則速查預計閱讀:8 分鐘 負責人:入金產品經理

核心要點:入金系統有三種反向操作——任務沖正(已入賬資金扣回)、流水退款(僅標記不動賬)、BST 銀行退款(天星獨有),使用場景和系統行為完全不同。


快速跳轉 — 你可能想做的事:

三種退款機制對比

入金系統有三種"已完成交易的反向操作",雖然用戶側看起來都是"錢退回來了",但系統行為完全不同:

任務沖正(Task Reversal)流水退款(Flow Refund)BST 銀行退款(REFUNDED)
一句話已入賬的錢從證券帳戶扣回標記銀行流水為"已退款",不動證券帳戶天星銀行主動退回已入賬資金
觸發方運營主動發起運營主動發起銀行自動觸發
資金影響 — SBA 從證券帳戶扣款 — 僅標記流水狀態 — 系統自動執行 SBA 扣款
前置狀態Apply.status = 2(已完成)Flow.status = 0(待處理)入金已完成
結果狀態Apply.status = 5, Task.status = REVERSEFlow.result = 3(RESULT_REFUND)入金記錄標記 REFUNDED
權限要求CASH_IN_TASK_REVERSECASH_IN_FLOW_HANDLE系統自動,無需權限
是否可撤銷不可撤銷不可撤銷不可撤銷
API 入口/deposit/reverse/flow/refund/flow/refund-batch天星 API 回調
適用場景銀行 chargeback、錯誤入賬、風控攔截流水無法匹配且需退回銀行、錯誤流水清理天星 BST 獨有——銀行事後合規退款
涉及銀行所有所有僅天星

核心區別

任務沖正動真金白銀(從證券帳戶扣款);流水退款只是標記流水狀態,證券帳戶餘額不變。搞混這兩種操作會導致資金差異——如果本該做任務沖正卻只做了流水退款,用戶證券帳戶裡的錢不會被扣回。


任務沖正(Task Reversal)

任務沖正是最"重"的退款操作——它會把已經入賬到用戶證券帳戶的資金扣回。

狀態流轉

系統執行步驟

當運營點擊「沖正」後,系統依次執行:

  1. 狀態校驗:確認 Apply.status = 2(已完成)且非處理中
  2. SBA 反向編排:調用 turnAround('CashDepositReverse', ...) 從證券帳戶扣回資金
  3. 狀態更新:Apply.status → 5(已沖正),Task.status → REVERSE
  4. 銀行卡解綁:如果是通過綁卡入金的(notice_type = BIND_CARD),自動解綁該銀行卡
  5. 通知用戶:發送沖正通知(App 推送 + 消息中心)

前置條件

條件說明
申請狀態 = 已完成(2)只有已完成的入金才能沖正。處理中(1)的不允許
權限 CASH_IN_TASK_REVERSE操作人必須有沖正權限
證券帳戶餘額充足沖正需要從帳戶扣款,餘額不足會導致 SBA Procedure 失敗

SBA 反向編排

任務沖正的核心是 SBA(Server Bank Account)的反向 Procedure。系統先檢查原入金的 SBA Procedure 狀態是否為 PROCEDURE_STATUS_END_OK(即原入金確實成功了),然後調用 turnAround 執行反向操作。

反向操作的本質:把原入金 Procedure 的每一步倒過來執行——原來是"公司帳戶 → 證券帳戶"的資金劃轉,反向就是"證券帳戶 → 公司帳戶"。

代碼位置
  • 任務沖正入口:deposit/src/app/Business/Deposit.php:877-935reverse() 方法
  • SBA 反向調用:deposit/src/app/Business/SOA/SBA/Deposit.php:309turnAround('CashDepositReverse', ...)
  • 沖正中間件:deposit/src/app/Business/Tasks/Deposit.php:276-287reverseMiddleware()
  • Apply 狀態常量:deposit/src/app/Business/Apply.phpSTATUS_REVERSE = 5
  • Task 狀態常量:deposit/src/app/Classes/Task/Status.phpREVERSE = 5
  • API 入口:DepositController::reverseAction()/deposit/reverse
  • 批量沖正:DepositController::batchAction()/deposit/batch with action=reverse

流水退款(Flow Refund)

流水退款比任務沖正"輕"得多——它只標記銀行流水的處置結果為「退款」,不影響證券帳戶餘額

什麼時候用流水退款

  • 銀行流水到了系統,但無法匹配到任何入金申請,且確認需要退回銀行
  • 銀行流水匹配錯誤(匹配到了錯誤的用戶),需要先退款再重新處理
  • 流水本身有問題(重複流水、測試流水等),需要清理

狀態流轉

三種操作入口

操作API 入口場景
單筆退款/flow/refund對單條流水標記退款
批量退款/flow/refund-batch批量標記多條流水為退款
解鎖退款/flow/unlock with is_refund=1先解鎖被鎖定的流水,同時標記退款

流水退款 vs 任務沖正

維度流水退款任務沖正
操作對象銀行流水(Flow)入金任務(Task/Apply)
前提流水處於待處理狀態入金已完成(資金已到證券帳戶)
資金變動有(從證券帳戶扣回)
影響範圍僅標記流水更新 Apply + Task + SBA + 可能解綁銀行卡
使用頻率較高(日常流水清理)較低(異常情況才用)
風險等級
代碼位置
  • 流水退款入口:deposit/src/app/Business/BankFlow.php:674-724refund() 方法
  • 解鎖退款:deposit/src/app/Business/BankFlow.php:1639-1695unlock() with is_refund
  • 退款結果常量:deposit/src/app/Business/BankFlow.phpRESULT_REFUND = 3
  • API 入口:FlowController::refund()FlowController::refundBatch()

BST 銀行退款(REFUNDED)

這是天星 BST 獨有的異常狀態——招行和民生的 BST 沒有退款機制。

觸發條件

  • 銀行側事後發現交易異常(合規問題),主動發起退款
  • 銀行風控系統事後攔截

系統行為

REFUNDED vs FAILED

REFUNDEDFAILED
資金狀態入金已成功,銀行事後退回銀行拒絕入金,資金從未到賬
系統影響需執行沖正(SBA 反向扣款)無需沖正,直接標記失敗
複雜度高——已入賬資金可能已被用戶交易低——只需更新狀態
運營介入必須——確認退款原因、通知用戶通常不需要

退款決策樹

收到退款/沖正需求時,按以下路徑判斷該走哪條操作:

關鍵判斷

  1. 資金是否已到證券帳戶 — 已到賬用任務沖正,未到賬用流水退款
  2. 誰發起的 — 運營主動走手工沖正,銀行自動走系統處理
  3. 餘額是否充足 — 不足時需要先協調(用戶可能已用資金交易)

CRM 退款管理流程

當退款需求通過客服渠道進入時,走 CRM 退款管理模組的三階段流程。CRM 是退款的"入口"——它管理審批流程,確定走哪種退款路徑後,最終執行的還是上面介紹的三種機制之一。

階段負責團隊關鍵動作SLA
登記客服記錄用戶投訴、填寫退款原因、關聯入金記錄當日
審核業務運營核實退款依據、確認走沖正還是流水退款、評估餘額影響1 工作日
處理財務執行系統操作(沖正/流水退款)、確認銀行側資金回退1~3 工作日

CRM 不直接操作資金

CRM 退款管理模組只管理審批流程,不直接操作證券帳戶餘額或銀行資金。所有實際的資金操作都通過 SBA Procedure 執行。


退款失敗與恢復

SBA Procedure 執行失敗

症狀:沖正操作發起後,Apply 狀態未變為 5,SBA 日誌顯示 Procedure 失敗。

可能原因

原因表現處理方式
證券帳戶餘額不足SBA 返回餘額不足錯誤聯繫用戶補足餘額,或協調風控凍結帳戶後處理
SBA 服務異常Procedure 超時或返回系統錯誤確認 SBA 服務狀態,服務恢復後重試沖正
原入金 Procedure 狀態異常PROCEDURE_STATUS_END_OK 校驗不通過人工核實原入金的 SBA 執行記錄,必要時走手工補償

餘額不足的特殊處理

這是沖正失敗最常見的原因——用戶入金後可能已經:

  • 用資金買了股票(餘額被持倉佔用)
  • 發起了出金(餘額在出金途中)
  • 做了其他投資操作

處理路徑

  1. 確認用戶當前可用餘額和持倉情況
  2. 如果差額不大:等待用戶賣出持倉或出金到賬後重新沖正
  3. 如果差額較大或緊急(如銀行 chargeback):凍結帳戶 → 聯合風控處理 → 分批沖正
  4. 不要嘗試部分沖正——系統不支持沖正部分金額,只能全額沖正

流水退款誤操作

症狀:運營誤將正常流水標記為退款,但該流水實際應該用於匹配入金。

處理方式

  • 流水退款標記後不可直接撤銷
  • 需要在 OA 後台手動創建一條新的異常入金(DepositType = ABNORMAL),替代被誤退款的流水
  • 記錄操作日誌,標註"流水退款誤操作補償"

真實案例

案例一:標準沖正 — 銀行 Chargeback

背景:用戶 A 通過 FPS 入金 HKD 100,000,入金成功。3 天後,銀行通知該筆 FPS 交易因"未授權交易"發起 chargeback。

處理過程

  1. 運營收到銀行 chargeback 通知
  2. 在 OA 找到對應入金申請(Apply.status = 2)
  3. 確認用戶證券帳戶可用餘額 ≥ HKD 100,000
  4. 確認無在途出金任務
  5. 執行任務沖正 → Apply.status → 5
  6. SBA 執行 CashDepositReverse,從證券帳戶扣回 HKD 100,000
  7. 用戶收到沖正通知

結果:沖正成功,銀行卡自動解綁(因為是綁卡入金)。

案例二:餘額不足沖正 — 用戶已交易

背景:用戶 B 入金 HKD 500,000 後,買入了 HKD 450,000 的股票。隨後運營發現該筆入金為錯誤入賬(匹配到了錯誤用戶)。

處理過程

  1. 嘗試沖正 → SBA 返回餘額不足(可用餘額僅 HKD 50,000,持倉佔用 HKD 450,000)
  2. 凍結用戶帳戶,防止進一步交易
  3. 聯繫用戶說明情況,要求賣出持倉
  4. 用戶賣出股票後,可用餘額恢復到 ≥ HKD 500,000
  5. 重新執行沖正 → 成功
  6. 將 HKD 500,000 重新入賬到正確用戶

教訓:大額入金沖正應盡快執行(發現問題後第一時間凍結帳戶),避免用戶使用資金後難以追回。

案例三:流水退款 — 無法匹配的孤立流水

背景:一條 HKD 25,000 的匯豐 MT910 流水在系統中存在超過 5 天,匹配引擎多次掃描均無法配對(無對應的入金申請)。

處理過程

  1. 運營在 OA 流水列表發現該孤立流水
  2. 核實:無用戶提交過 HKD 25,000 的入金申請
  3. 聯繫銀行確認:該筆轉賬為客戶誤轉(轉錯收款帳號)
  4. 在 OA 對該流水執行「退款」標記 → Flow.result = 3(RESULT_REFUND)
  5. 銀行側安排資金退回

說明:此操作只標記流水狀態,不涉及證券帳戶資金變動。資金退回由銀行側完成。


沖正時效參考

操作預期耗時說明
任務沖正(餘額充足)秒級SBA Procedure 通常幾秒內完成
任務沖正(餘額不足)數小時~數天取決於用戶配合釋放資金的時間
流水退款即時僅標記狀態,立即生效
BST REFUNDED分鐘級系統自動處理,但運營需後續跟進
銀行側資金退回1~5 個工作日取決於銀行處理速度和轉賬類型

常見誤解

誤解事實
"沖正和退款是一回事"不是。任務沖正會從證券帳戶扣款(動真金白銀),流水退款只標記流水狀態(不動證券帳戶)。混用會導致資金差異
"沖正失敗了可以重試"可以重試,但要先排查失敗原因(通常是餘額不足)。盲目重試不會改變結果
"可以沖正部分金額"不可以。系統只支持全額沖正——要麼全沖,要麼不沖。沒有"沖正 HKD 50,000 中的 30,000"這種操作
"流水退款後資金會自動退回銀行"不會。流水退款只是系統內部標記,資金退回需要銀行側另行處理
"所有銀行都有 REFUNDED 機制"不是。REFUNDED 是天星 BST 獨有的狀態,招行和民生的 BST 沒有退款機制
"沖正後用戶還能看到原入金記錄"可以。沖正不刪除記錄,只是把狀態改為"已沖正"(5)。用戶在 App 中可以看到這條記錄及其沖正狀態

讀完之後

我想...去看
看運營怎麼操作沖正沖正/退款指引
排查沖正失敗的問題入金排障 § 沖正失敗
查沖正相關的狀態碼和 API入金規則速查 § 沖正參考數據
修改沖正流程入金變更指南 § 修改沖正流程
了解入金的完整生命週期入金方式總覽
了解匹配後的沖正路徑匹配與自動入賬 § 匹配後路徑
這個頁面有幫助嗎?

内部业务文档 · 仅限 moomoo 团队使用