Skip to main content

📄 正文

清算(Settlement)是卡资金生命周期的第二阶段:在授权冻结资金之后,商户向卡组织提交最终金额,卡组织与发卡方完成实际入账,并释放对应的冻结额。清算是机制,账单(statements)是这套机制产出的可查询视图 在 DeCard 托管模型下,清算全程由 DCS 系统内部完成:DCS 收到卡组织的清算报文后,自动把对应账单从未出账(NOT_POSTED转为已出账(POSTED,扣减用户的冻结余额、完成实际扣款,并同步联动用户独立账户的资产变动。接入机构无需自行维护冻结额或在收到清算 Webhook 后手动入账——这正是 DeCard 托管模式的便利所在。 清算的核心语义是 outstanding(未入账)→ posted(已入账) 的转换,由两组字段表达:
  • 账单层面:账单 typeNOT_POSTED(未出账单)与 POSTED(已出账单)之间转换。
  • 交易明细层面:postIndicator1-已入账 / 0-未入账)标识每笔明细是否已落入已出账单。
余额模型(free / freeze / total、托管策略)的完整定义见 账户与资产模型

五类清算与退款形态

清算可能出现多种形态。以下逐一说明每种如何发生,以及 DCS 系统内部如何完成冻结释放与入账——接入机构无需为每种形态编写自管逻辑。

标准清算

最常见的清算形态:商户按授权金额全额清算。DCS 收到清算报文后,释放全额授权冻结、按授权金额入账。
标准清算流程标准清算流程

部分清算

商户清算金额小于授权金额(如餐饮去掉小费后实际结算)。DCS 释放全额授权冻结,仅按实际金额入账,多余冻结额自动回到可用余额。
部分清算流程部分清算流程

超额清算

特定商户类别(如餐饮、酒店等含小费/附加费的行业)允许清算金额略高于授权金额。DCS 校验通过后,释放原授权冻结并按其实际金额入账。
超额清算流程超额清算流程
超额清算仅在卡网络规则与特定商户类别码(MCC)允许的范围内生效;超出允许上限的请求将被拒绝。

多笔清算

一次授权对应多次分批清算(如电商分批发货)。DCS 在首批清算时维持授权冻结,直到全部清算完成后统一释放冻结并入账。
多笔清算流程多笔清算流程

强制清算

无前置授权直接清算(离线/不联网场景,如机上购物)。DCS 无冻结可释放,直接入账扣减可用余额。
强制清算流程强制清算流程
强制清算仅在特定商户类别下生效(离线场景通常允许不超过 15% 的差额缓冲以覆盖运费/税费等调整)。

退款

退款是反向交易,把金额贷记回持卡人账户;它不一定关联某笔原始交易。DCS 校验退款请求后直接入账,增加可用余额。
退款入账流程退款入账流程
退款可在原始交易完成后的任意时间发起。账单明细中 debitCreditIndcator=C 标识退款入账。

清算完成后的 Webhook 对账通知

DCS 在清算完成后会推送 CARD_TRANSACTION_SETTLEMENT Webhook 事件,主要字段包括:清算金额与币种(settledAmount / settledCurrencyCode)、原始交易金额与币种(transactionAmount / transactionCurrencyCode)、交易方向(direction)、外部交易 ID(externalTranId)、卡号后 4 位(cardNumber)、交易类型(transactionType,单字母编码 R/C/Q/P)、本地交易日期/时间(localTransactionDate / localTransactionTime)与商户信息(cardAcceptorNameLocationmccmerchantCountryCode)。Webhook 全部字段、签名校验及示例 JSON 见 Webhook 与 WebSocket 实时通知

授权 Webhook 与清算 Webhook 对照

您需要做的

  • 查询账单:用 statements / statements/detail(见下节)确认清算金额与明细。
  • 收 Webhook 对账:用 CARD_TRANSACTION_SETTLEMENT 事件把 DCS 侧的清算记录与自有系统账务做异步比对——无需据此手动入账
  • 按 ID 解析状态(可选):当您持有一组交易 ID 不确定是否已入账时,用 POST /card/v1/transaction/id/resolve 查询(见下文)。
DeCard 托管模型下,清算入账与余额扣减已由 DCS 系统内部自动完成——接入机构无需据此 Webhook 操作 DCS 账户的余额变动。

如何查询清算结果

清算完成后,您可通过以下接口查询账单与明细,均以 cardId 定位卡片
另见 /card/v1/fiat/transactions(GET 法币交易流水),其返回字段 postingTransType 表示清算后的交易分类,与账单明细中 transactionType 语义相关但字段名不同,不可混淆。详情见 交易管理

账单列表

获取用户的卡账单列表,包含已出账单(POSTED)与未出账单(NOT_POSTED),支持分页与筛选。 前置条件:用户已注册并完成开卡,且产生过交易。 请求(v2,GET /card/v2/statements):
响应(金额双币种 SGD / USD;示例为脱敏占位数据):
字段说明

账单详情

statementId 查询某账单下每笔交易的明细,包含商户、金额、币种、入账状态及资产变动记录。 请求(v2,GET /card/v2/statements/detail):
响应(示例为脱敏占位数据,卡号已脱敏、商户名为占位):
字段说明
字段定义详见 交易管理 › 报告字段说明
注意区分三套 transaction type 编码体系:本节讨论的是 API 查询接口中的单词编码SPEND/REFUND/PARTIAL_REFUND)。Webhook 中同名字段使用另一套单字母编码R-卡消费 / C-ATM 提现 / Q-查询类交易 / P-转账或退款(见 Webhook 与 WebSocket 实时通知CARD_TRANSACTION_SETTLEMENT 字段表)。此外,法币交易流水接口 /card/v1/fiat/transactions 使用的字段名为 postingTransType(非 transactionType),与前述两套编码体系均不同,不可混淆。 assetMovements 资产变动明细作为「卡清算关联链上资产变动」的核心特色,见下节专述。

资产变动明细 assetMovements

assetMovements 是 DeCard 托管模型用来关联卡清算与用户独立账户/自有账本的链上资产变动的核心特色字段。它让接入机构在查询某笔卡消费的同时,直接看到背后对应用户加密资产(如 USDT / USDC)被扣减或退回的明细,资金流向全程透明。 外层 assetMovementStatus 标识这笔清算对应的资金是否已处理完成(1-完成 / 0-未完成)。
该字段于 2025 年 8 月随响应格式更新新增,由账单详情接口返回;体现 DCS 自有账本(Crypto-Ledger)模式下卡消费直接联动稳定币扣减的资金透明度。

按 ID 解析入账状态:transaction/id/resolve

当您手上只有一组交易 ID、需要快速判断它们各自处于未入账(outstanding)还是已入账(posted)时,使用解析接口 POST /card/v1/transaction/id/resolve。它正是上文 outstanding → posted 语义的「按 ID 查询入口」。 请求(POST /card/v1/transaction/id/resolve):
响应(脱敏占位数据):
用法对照:posted=false + 有 outstandingTransactionId → 该笔仍在未出账阶段;posted=true + 有 postedTransactionId → 已完成清算入账。

响应结构与错误处理

本页所有接口统一使用全站响应结构 {code, message, messageDetail, data}success 布尔字段)。成功码字面量为 SYS_SUCCESSmessageDetail 通常为 null;当非 null 时,其结构化对象包含以下子字段: 失败时通过 code / message 提示异常原因(如卡片不存在、用户不存在等)。以下为错误响应示例(脱敏,错误码为占位值);简单错误场景下 messageDetail 通常为 null
本产品暂无集中的错误码字典;请以接口实际返回的 code / message 判断,必要时按 问题上报与支持路径 上报。

下一步