Changelog¶
本頁只記 PAYMENT 可見的契約異動:請求/回應欄位、callback/event、HTTP 狀態與錯誤碼。
Farm Server 版號與公開 tag vX.Y.Z 對齊。Admin、Android Device Agent、flows 腳本不在此列。
本站仍只維護目前有效的 API(沒有 /v2、沒有平行舊版)。各操作頁是現況;本頁回答「哪一版開始長這樣」。
沒有列出的版本 = 該次發版沒有改 Payment 的 HTTP/callback 契約。
[0.24.0] - 2026-08-28¶
新增 — balance.changed 帶 source_task_id¶
Scheduler 建的 Balance 沒有單筆 callback_url,事件因此指名產生該次變化的已完成 task。
- 事件新增
source_task_id。 old/new/ts只供提示,不是寫入依據。- PAYMENT 用自身 Bearer
GET /v1/tasks/{source_task_id},核對同裝置、type=balance、state=succeeded後採用該次銀行讀值;不必另派 Balance probe。 - 事件離開 Farm 時該 source task 必定已終態且
result完整。 - 過渡期:舊 Farm 事件沒有此欄,才 fallback 另派 probe。
詳見 Callback 與事件。
未改請求欄位¶
POST /v1/tasks 的必填/選填欄位不變。以下由 Farm 寫入、不要由 PAYMENT 帶:
| 內部鍵 | 何時出現 | PAYMENT 要做的事 |
|---|---|---|
payload.ledger_reference |
type=transfer_verify:用 not_before 反查同裝置同租戶的原轉帳 reference_number |
把原 transfer result 的 not_before 原樣帶入即可。對不到唯一原單就不寫該鍵,verify 無法強匹配(ledger_verified 不會是 true) |
payload.to_fullname_bank |
出款 VCB/BIDV 的 transfer/transfer_verify 查收款銀行對照表 |
繼續送 to_bank 簡碼。若多帶全名,Farm 會丟掉,只信自己的表。兩鍵都不進指紋、不進 GET/callback |
[0.23.0] - 2026-08-27¶
Farmer 側新增 VN 收款銀行對照表(Admin/Web UI)。
Payment POST /v1/tasks、GET /v1/tasks/{id}、callback 契約不變。 請求仍送 to_bank 簡碼。
[0.20.0] - 2026-08-25¶
新增 — 越南 VCB/BIDV 兩組密¶
| 接口 | 契約 |
|---|---|
POST /v1/enrollments bank_payload |
VN:account_numbers + password(必填);transfer_password(OTP,可省);禁止 pin(422) |
PUT /v1/devices/{device_code}/banks/{bank_code}/secret |
merge:可只改 password 或只改 transfer_password;省略鍵沿用;帶 account_numbers → 422 |
GET /v1/devices、GET /v1/devices/{id} |
banks[] 增加非機密 account_numbers(未安裝為 []) |
pin_configured |
VN = 密封袋有登入 password(寫入端;既有列不 backfill) |
POST /v1/tasks type=balance |
payload.account_number 可選;已有列表時必須是成員 |
變更(不改客戶端也會踩到)¶
請求驗證從「多餘鍵靜默吃掉」改成白名單 fail-closed:
bank_payload未知鍵 → 422。允許鍵:VNaccount_numbers/password/transfer_password;GCashaccount_numbers/pin;TH iOS 只有pin。- 該
(device, bank)尚無 secret 列時,enrollment 必須帶密(GCash 必填pin,VN 必填帳號+登入密)。舊版可先綁再 PUT 補密;GCash 這條路已關閉。 mode=bank_add的region必須等於裝置country_code。route 類失敗改為 404/409/422/503(不再一律 400)。- PUT secret
extra="forbid";至少一個密鍵,否則 422secret update required(無法只改variant)。 type=balance開始驗 payload:型別/格式不符 → 422(整數 JSON 亦然)。- 已安裝非空
account_numbers且 payload 帳號非成員 → 422account_number is not bound to this bank(新任務;冪等 replay 仍優先)。 - 綁多個 bank 卻未帶
bank_code→ 入列前 400(舊版 202、由 worker 失敗)。單一綁定仍自動推導。
更早的契約¶
冪等鍵、transfer 禁止重送、transfer_verify、lock/unlock event、expected_locked_at 等仍以各現況頁為準;本 changelog 從越南憑證這輪開始記 Payment 可見異動。