跳轉到主要內容

支付對賬怎麼做?把訂單、手續費、退款和提現與銀行流水一一對上

支付對賬實操指南:訂單與付款怎麼對、用資金流水解釋餘額、提現怎麼和銀行到賬對上,以及常見的對不上的原因。

發佈於 約 5 分鐘閲讀

手繪插畫:訂單列表、資金流水和銀行對賬單三欄用連線一一對應並打了勾,旁邊一個朝它們走來的人
本文目錄
  1. 為什麼提現金額和銷售額對不上?
  2. 第一步:訂單與付款對賬
  3. 第二步:用資金流水核對餘額
  4. 第三步:提現與銀行到賬對賬
  5. 把所有數據導出成 CSV
  6. 每日支付對賬流程
  7. 常見的對不上的情況和原因
  8. 在沙箱裏演練對賬
  9. 總結

支付對賬就是核對三份記錄是否一致:你系統裏的訂單、支付服務商説它收到的款項,以及真正到達你銀行的錢。它們永遠不會逐行相等:手續費要扣、退款和拒付會把錢退回去、一次提現會把很多筆付款合併成一筆轉賬。所以對賬不是指望沒有差異,而是要解釋清楚每一處差異。

這篇文章把支付對賬拆成可以每天執行的三步,説明每一步該用 KukoPay 的哪些數據,並列出最常見的對不上的情況和原因。

為什麼提現金額和銷售額對不上?

因為從一筆銷售到一筆銀行入賬,錢要移動好幾次:

  • 手續費在付款入賬時扣除,所以你的餘額增加的是淨額,而不是訂單金額;
  • 退款和拒付會把錢再拿出去,有時還會先凍結;
  • 提現把很多筆付款合併成一筆轉賬,而且有自己的手續費;
  • 時間不同:付款立即入賬,但要等上游結算後才變為可提現,見 支付結算是什麼;
  • 幣種分開:USD、HKD 和 CNY 是各自獨立的餘額,分別提現,平台不做自動換匯。

對賬要逐層分開核對,而不是拿一個月的銷售額去和銀行對賬單比。

第一步:訂單與付款對賬

要回答的問題:我認為已付款的每一筆訂單,是不是真的付了,並且沒有多出別的?

  • 用訂單號匹配,永遠不要用 payment_id。 買家更換支付方式時,一筆訂單可能經歷多次支付嘗試,所以 payment_id 會變。請使用你的 out_trade_no 和 KukoPay 的 trade_no。
  • 已付款就是 status: "paid"(之後可能變為 partially_refunded / refunded)。pending、failed 和 expired 的訂單都沒有收到錢。
  • 拉取這段時間的訂單:用 GET /v1/orders 按創建時間篩選,或者導出 CSV(見下文)。再和你系統裏根據 payment.succeeded Webhook 標記為已付款的訂單對比。

KukoPay 上已付款、而你的系統裏沒有的,説明漏收了回調:從 事件接口 補回即可,原因排查見 收不到支付 Webhook 回調怎麼辦。

第二步:用資金流水核對餘額

要回答的問題:我能解釋餘額的每一次變化嗎?

資金流水 把每一次變動記錄為一行帶符號的記錄。把一段時間內的 amount 加起來,正好等於這段時間可用餘額的變化,所以賬本可以從第一行開始解釋整個餘額。

類型含義方向
payment_credit一筆付款,按訂單全額記錄+
fee_debit這筆付款的手續費−
refund_freeze / refund_debit / refund_unfreeze退款受理、確認,或被拒後退回− / − / +
dispute_freeze / dispute_debit / dispute_unfreeze / dispute_fee拒付開案、敗訴、勝訴或被撤銷,以及拒付處理費− / − / + / −
payout_freeze / payout_success / payout_fee / payout_unfreeze提現申請、完成、手續費,或被駁回後退回− / − / − / +
manual_adjustment平台人工調賬(僅正式環境),原因寫在 description 裏±

三個能省下大量時間的細節:

  • 一筆成功付款是兩行:payment_credit 加 fee_debit,兩者之差就是入賬淨額。通過 reference_id 把這兩行和訂單對上,它記錄的是訂單號、退款號、拒付號或提現號。
  • balance_before / balance_after 記錄的是可用餘額。 凍結會讓可用餘額下降、凍結餘額上升;從凍結中扣賬時可用餘額不變,所以這一行的前後值相等。
  • 手續費是快照。 每筆已支付訂單都帶有 fee_details(渠道、比例費率、固定費),記錄的是當時實際適用的費率,所以之後調價不會改變過去的付款。計算方式見 跨境收款手續費怎麼算。

第三步:提現與銀行到賬對賬

要回答的問題:每一筆轉入我銀行的錢,都能對應到一筆提現嗎?

一筆提現在流水裏表現為:申請時一行 payout_freeze,完成時一行 payout_success(轉出的淨額)和一行 payout_fee(固定 $5.00),reference_id 都是提現單號。到賬金額為提現金額減 $5.00,所以提現 $1,000.00 到賬 $995.00。

  • 用提現去對銀行到賬,而不是用付款。 一筆到賬就是一筆提現,裏面可能包含幾百筆付款。
  • processing 不等於已到賬。 正式提現先審核、後轉賬;只有轉賬完成並登記了銀行流水號,才會變為 success。在那之前不要把它記為已收到。狀態説明見 提現出金。

把所有數據導出成 CSV

訂單、退款、拒付和資金流水都可以用 format=csv 導出:

curl -G "https://api.kukopay.com/v1/balance_transactions" \
  -H "X-Api-Key: $KUKOPAY_API_KEY" \
  -d format=csv \
  -d "created[gte]=2026-11-01T00:00:00Z" \
  -d "created[lte]=2026-11-30T23:59:59Z" \
  -o 2026-11-對賬.csv
  • 文件帶 UTF-8 BOM,Excel 直接打開不會亂碼,金額已換算成兩位小數,可以直接求和。
  • 每次導出最多返回 10,000 行,並且單獨限制為每分鐘 10 次,長時間段請用更小的 created[gte] / created[lte] 窗口分段導出。
  • 以 =、+、-、@ 開頭的文本字段會自動加一個前導單引號,防止被表格軟件當成公式執行。這是有意為之,不是數據錯誤。

如果是自動化任務,JSON 列表使用游標分頁(limit、starting_after),翻頁期間新增的記錄不會被跳過。見 列表、分頁與導出。

每日支付對賬流程

拉取昨天已付款的訂單和支付事件

和你系統裏已履約的訂單對比。補回漏掉的事件;你已經履約、但實際沒有付款的訂單要逐筆核查。

按幣種拉取昨天的資金流水

確認 amount 之和等於可用餘額的變化,並且每一行的 reference_id 都能對應到你知道的訂單、退款、拒付或提現。

把新的銀行到賬和已完成的提現對上

每一筆到賬都應該等於一行 payout_success;payout_fee 記為費用。

檢查仍未結束的項目

處理中的退款、未結案的拒付和 processing 中的提現都不是錯誤,而是在途資金。記下來,明天再核對一次。

常見的對不上的情況和原因

你看到的現象通常的原因
KukoPay 上已付款,你的系統裏未付款漏收了回調,從事件接口補回
訂單關閉後買家又被扣了款罕見的延遲付款:已自動全額退回,並發送 payment.duplicate_refunded,你的餘額不受影響
餘額低於銷售額減手續費有退款、未結案的拒付或提現被凍結
可用餘額為負數有未結案的拒付;提現要等後續收款補平,見 信用卡拒付是什麼
已申請退款,餘額還沒扣退款處於 pending,確認前處於凍結狀態,見 部分退款怎麼操作
提現已批准,銀行沒到賬處於 processing,轉賬還沒有完成
跨幣種的合計對不上每個幣種是獨立的餘額,請分幣種對賬

在沙箱裏演練對賬

沙箱賬本從每個幣種一行 5,000.00 的 opening_balance 開始,補充測試資金 會記一行 sandbox_top_up,這兩種都是正常記錄,不是異常。沙箱提現會立即完成,記下的流水和正式提現最終的一樣。做幾筆付款、一筆部分退款和一筆提現,導出流水,在真金白銀流動之前先對一遍賬;測試場景見 支付測試卡號大全。

總結

  • 支付對賬分三層:訂單對付款、餘額對流水、提現對銀行到賬;
  • 用 trade_no / out_trade_no 匹配,永遠不要用 payment_id,漏掉的付款從事件接口補回;
  • 資金流水逐行解釋餘額,一筆付款是 payment_credit 加 fee_debit;
  • 一筆銀行到賬就是一筆提現,金額為提現金額減 $5.00,在 success 而不是 processing 時記賬;
  • 用 format=csv 分段導出,每次最多 10,000 行,並且分幣種對賬。

在沙箱裏把它跑通

註冊商戶後即可申請測試密鑰,不需要等待資質審核。