API 参考
16 个开放 API 接口的总览,以及认证与环境、请求头、数据格式、分页、兼容性、限流和 8 类对象的字段说明。
最后更新于 2026-10-16 · 契约 v1.0.0
概览
开放 API 共 16 个接口。字段、约束、枚举与示例都由接口契约生成;点击接口进入详情页。
| 资源 | 接口 | 摘要 | 权限范围 | 幂等键 |
|---|---|---|---|---|
| 支付 | POST/v1/payments | 创建支付 | payments:write | 必填 |
| 支付 | GET/v1/payments | 查询支付列表 | payments:read | — |
| 支付 | GET/v1/payments/{payment_id} | 查询支付详情 | payments:read | — |
| 支付 | POST/v1/payments/{payment_id}/confirm | 确认支付 | payments:write | 必填 |
| 支付 | POST/v1/payments/{payment_id}/cancel | 取消支付 | payments:write | 必填 |
| 收银会话 | POST/v1/checkout/sessions | 创建托管收银会话 | payments:write | 必填 |
| 收银会话 | GET/v1/checkout/sessions/{session_id} | 查询收银会话 | payments:read | — |
| 退款 | POST/v1/refunds | 创建退款 | refunds:write | 必填 |
| 退款 | GET/v1/refunds | 查询退款列表 | refunds:read | — |
| 退款 | GET/v1/refunds/{refund_id} | 查询退款 | refunds:read | — |
| 余额与流水 | GET/v1/balances | 查询余额 | finance:read | — |
| 余额与流水 | GET/v1/balance-transactions | 查询账务流水 | finance:read | — |
| 结算与打款 | GET/v1/settlements | 查询结算单列表 | finance:read | — |
| 结算与打款 | GET/v1/settlements/{settlement_id} | 查询结算单详情 | finance:read | — |
| 结算与打款 | GET/v1/payouts/{payout_id} | 查询打款结果 | finance:read | — |
| 事件 | GET/v1/events/{event_id} | 查询事件 | 按事件所属业务校验 | — |
说明
收款账户变更、费率修改、余额调整与执行打款不提供 API,请在商户后台操作或联系平台。
注意
API Key 只能用于你的服务端。浏览器端请走托管收银台,或经你自己的服务端代理调用;文档站不提供在线调试。
基础约定
- 使用 HTTPS 与 JSON(UTF-8),路径带版本
/v1。 - API 地址:
https://api.payhub.example。测试与生产使用同一个地址,环境由 API Key 决定。 - 每个响应体都带
request_id:排查问题时提供给技术支持,也可以在商户后台按它查调用记录(API 调用记录(在新标签页打开商户后台)(需要所有者、管理员或开发者))。 - 请求中没有、也不接受商户号字段:商户与环境只由 API Key 推导。
认证与环境
请求头 Authorization: Bearer <API_KEY>。密钥缺失、无效、已撤销或已过期返回 401 unauthenticated。
- 测试 Key 以
sk_test_开头,只能访问测试对象;生产 Key 以sk_live_开头。用测试 Key 查询生产对象返回 404,平台不会透露对象是否存在。 - 每个接口需要的权限范围(scope)写在接口页的标题区;Key 缺少所需 scope 返回 403
forbidden。
| 权限范围 | 可调用的接口 |
|---|---|
payments:read | listPayments、getPayment、getCheckoutSession;getEvent 中的 payment.*、dispute.* 事件 |
payments:write | createPayment、confirmPayment、cancelPayment、createCheckoutSession |
refunds:read | listRefunds、getRefund;getEvent 中的 refund.* 事件 |
refunds:write | createRefund |
finance:read | listBalances、listBalanceTransactions、listSettlements、getSettlement、getPayout;getEvent 中的 settlement.* 事件 |
谁能创建带哪些 scope 的 Key:
| 创建者 | 可选的权限范围 |
|---|---|
| 所有者、管理员 | 全部 5 项 |
| 开发者 | 其“可授予 API 范围”内的项目(默认 payments:read、payments:write、refunds:read) |
| 财务、只读人员 | 不能创建 |
finance:read 默认不在开发者的可授予范围内,需要所有者或管理员创建的 Key。直接传卡还需要平台为你开通“直接传卡”能力,与 scope 无关。获取测试 Key:商户后台 API Key(在新标签页打开商户后台)(测试环境;需要所有者、管理员或开发者)。
请求头
| 请求头 | 适用接口 | 必填 | 说明 |
|---|---|---|---|
Authorization | 全部 16 个 | 是 | Bearer <API_KEY>;服务端密钥只能在服务端使用 |
Content-Type | createPayment、confirmPayment、createCheckoutSession、createRefund | 是 | application/json;cancelPayment 没有请求体,不需要 |
Idempotency-Key | createPayment、confirmPayment、cancelPayment、createCheckoutSession、createRefund | 是 | 1–255 个字符;缺失返回 400(error.field 为 Idempotency-Key)。一次提交一个键,网络重试沿用原键,换卡等新的提交用新键,详见幂等、重试与查单 |
数据格式
- ID:形如“前缀_随机串”,最长 64 字符。按不透明、区分大小写的字符串存储,不要解析。常见前缀:
pay_支付、pat_支付尝试、auth_认证会话、cs_收银会话、ref_退款、dsp_争议、stl_结算单、po_打款、btx_账务流水、ltx_账务凭证、evt_事件、del_投递、mer_商户、req_请求。 - 时间:带时区的 ISO 8601,默认 UTC,例如
2026-09-23T09:00:00Z;period_start/period_end是业务时区的日期。 - 金额:最小货币单位的整数,永远与
currency一起出现。USD 10000表示 100.00,JPY 10000表示 10,000。有符号金额只出现在BalanceTransaction.amount、SettlementItem.amount与Balance.net_position。 - 币种:大写三字母代码;只能使用为你启用的币种。不同币种的金额不能相加。
- metadata:最多 20 个键,键最长 40 字符,值为最长 200 字符的字符串;不得放卡号等敏感信息,命中会被拒绝。
分页
- 列表默认每页 20 条,最多 100 条(
limit)。 next_cursor是不透明字符串,不要解析或拼接;翻页时必须带与首页相同的过滤条件。- 按创建时间倒序、同一时间再按唯一 ID 倒序,结果稳定(账务流水按
booked_at)。 - 时间区间半开:
created_gte含,created_lt不含。例如created_gte=2026-09-23T00:00:00Z&created_lt=2026-09-24T00:00:00Z恰好覆盖 9 月 23 日(UTC)一整天。
const API_BASE = 'https://api.payhub.example';
// 遍历 2026-09-23(UTC)一整天的支付:has_more 为 true 时用 next_cursor 继续,并带相同的过滤条件
export async function* listPaymentsOfDay() {
const filters = {
created_gte: '2026-09-23T00:00:00Z',
created_lt: '2026-09-24T00:00:00Z',
limit: '100'
};
let cursor;
do {
const query = new URLSearchParams({ ...filters, ...(cursor ? { cursor } : {}) });
const res = await fetch(`${API_BASE}/v1/payments?${query}`, {
headers: { Authorization: `Bearer ${process.env.PAYHUB_API_KEY}` },
signal: AbortSignal.timeout(20_000)
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const page = await res.json();
yield* page.data;
cursor = page.has_more ? page.next_cursor : undefined; // 不透明字符串,不要解析或拼接
} while (cursor);
}兼容性与版本
客户端必须:
- 忽略未知的新增字段;
- 不把未知的
status当成功; - 容忍未知错误码(按 HTTP 状态处理)、未知事件类型(返回 2xx 并忽略)与新的
next_action.type(按“未完成”处理并查询支付)。
版本策略:新增字段、枚举值、事件类型、错误码、可选参数属于兼容变更,不升级 /v1;删除或改名字段、改变语义、新增必填参数属于不兼容变更,会以新版本发布并提前通知。
限流与超时
- 429
rate_limited:本次请求没有执行。等待Retry-After(秒)后用原幂等键重试。换 Key 不能绕过商户的总限额。平台不公布具体限流数值。 - 503
temporarily_unavailable:本次请求同样没有受理(平台暂停了该通道的新交易),稍后用原幂等键重试。其他 5xx 按结果未知处理,见错误码与 HTTP 状态。 - 客户端超时:创建、确认支付建议不少于 20 秒。平台同步等待上游约 15 秒,超出会返回 202
processing,之后通过查询或通知得到结果。
对象
Payment 支付
与一个商户业务订单一一对应的支付主对象。一个 Payment 可以有多次尝试,但最多一笔正常成功扣款。 status 之外还有独立的结果字段;version 在每次有效业务变更时递增,用于通知去重与并发控制。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 必填 | 平台支付号。 示例: |
merchant_order_no | string | 必填 | 商户订单号,按原值区分大小写。 示例: |
environment | string | 必填 | 环境:test 为测试,live 为生产。测试与生产对象相互隔离。
示例: |
amount | integer(int64) | 必填 | 订单金额,最小货币单位。首次提交上游后不可修改。 约束: 示例: |
currency | string | 必填 | 大写三字母币种代码。 约束: 示例: |
status | string | 必填 | Payment 状态。客户端不得把未知状态当作成功。
示例: |
resolution_status | string | 必填 | 结果确认程度。
示例: |
captured_amount | integer(int64) | 必填 | 已确认扣款金额;成功时等于 amount。 约束: 示例: |
refunded_amount | integer(int64) | 必填 | 已确认的有效退款本金,即成功退款累计减去已确认的退款退回;不含处理中的退款,也不含平台异常退款。 约束: 示例: |
refund_returned_amount | integer(int64) | 必填 | 已确认退回的退款本金累计。 约束: 示例: |
refund_reserved_amount | integer(int64) | 必填 | 审核中及处理中退款的本金占用。 约束: 示例: |
refund_status | string | 必填 | 按有效退款本金 refunded_amount 派生的退款汇总状态:none、partial、full。
示例: |
authentication_status | string可为空 | 必填 | 当前尝试的 3DS 认证状态,取认证会话状态:not_required、pending、challenge、authenticated、failed、abandoned、expired,须容忍新增取值。 认证成功(authenticated)不等于扣款成功,不要据此判断支付结果。尚无尝试或未进入认证时为 null。 示例: |
reconciliation_status | ReconciliationStatus | 必填 | 平台资金处理进度,仅供对账参考,不代表支付是否成功,也不代表何时打款。
|
upstream_receipt_status | UpstreamReceiptStatus | 必填 | 平台资金处理进度,仅供对账参考,不代表支付是否成功,也不代表何时打款。
|
latest_attempt_id | string可为空 | 必填 | 最近一次支付尝试号;尚未提交尝试时为 null。 示例: |
attempt_count | integer(int32) | 必填 | 已发起的尝试次数;默认最多 3 次。 约束: 示例: |
version | integer(int64) | 必填 | 对象版本,每次有效业务变更递增。比较版本来丢弃旧事件,不要按状态名排序。 约束: 示例: |
next_action | NextAction可为空 | 必填 | status=requires_action 时需要付款人完成的动作,其他情况为 null。 |
type | string | 必填 | 首期公共 API 只开放 redirect_to_url。客户端须容忍未来新增的类型。
示例: |
authentication_session_id | string | 必填 | 认证会话号,关联具体的支付尝试。 示例: |
url | string(uri) | 必填 | 平台认证承载页地址。 示例: |
expires_at | string(date-time) | 必填 | 认证访问的失效时间(最长 10 分钟)。 示例: |
failure | PaymentFailure可为空 | 必填 | latest_attempt_id 所指尝试明确失败时的原因,否则为 null。 |
code | string | 必填 | 失败原因码。 示例: |
message | string | 必填 | 脱敏说明。 示例: |
attempt_id | string | 必填 | 失败的支付尝试号。 示例: |
description | string | 否 | 订单摘要。 约束: 示例: |
customer_reference | string | 否 | 商户侧客户标识。 约束: 示例: |
metadata | object | 否 | 商户自定义键值,最多 20 个键;键最长 40 字符,值为最长 200 字符的字符串。禁止放入卡号等敏感数据,平台会做检查并拒绝。 约束: 示例: |
card | CardSummary可为空 | 必填 | 最近一次尝试所用卡的脱敏信息;尚无卡信息时为 null。 |
brand | string | 必填 | 卡品牌。 示例: |
last4 | string | 必填 | 卡号后四位。 约束: 示例: |
created_at | string(date-time) | 必填 | 创建时间。 示例: |
succeeded_at | string(date-time)可为空 | 必填 | 确认支付成功的时间;未成功时为 null。 示例: |
expires_at | string(date-time) | 必填 | 可发起新尝试的截止时间,创建时确定(默认创建后 30 分钟,平台可在 5–120 分钟之间调整,以本字段为准)。到期只关闭新的付款入口,不否定已提交的支付。 示例: |
failed不是终态:满足有效期、尝试次数与风控条件时可以发起新尝试并最终成功;succeeded后发生退款,支付状态仍为succeeded,退款看refund_status。resolution_status=needs_query表示结果未知、平台正在用原标识向上游查证;manual_review表示超过自动查询窗口转人工,不会自动判失败。authentication_status是 3DS 认证状态,认证成功不等于扣款成功,不要据此判断支付结果。version每次有效业务变更递增:用它丢弃旧事件,不要按状态名排序。reconciliation_status、upstream_receipt_status是平台资金处理进度,仅供对账参考,不代表支付是否成功,也不代表何时打款。expires_at是可发起新尝试的截止时间(默认创建后 30 分钟),到期只关闭新入口,不否定已提交的支付。
failed之后付款人可以重试,所以事件和状态都不能按状态名排序,要比较version。succeeded的支付发生退款后支付状态不变,退款以 Refund 对象和refund_status表达。
Refund 退款
对原支付的一次退款申请;同一支付支持多次部分退款,各有独立的退款号。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 必填 | 平台退款号。 示例: |
version | integer(int64) | 必填 | 对象版本,每次有效业务变更递增(状态、失败原因、退回金额)。比较版本来丢弃旧事件,不要按状态名排序。 约束: 示例: |
payment_id | string | 必填 | 原支付号。 示例: |
merchant_refund_no | string | 必填 | 商户退款号,同一商户同一环境内唯一。 示例: |
amount | integer(int64) | 必填 | 退款本金,最小货币单位。 约束: 示例: |
currency | string | 必填 | 退款币种,继承原支付。 约束: 示例: |
status | string | 必填 | 退款状态。
示例: |
reason | string | 必填 | 退款原因。 示例: |
returned_amount | integer(int64) | 必填 | 退款成功后被真实退回的本金累计。 约束: 示例: |
failure | RefundFailure可为空 | 必填 | status 为 failed 或 rejected 时的原因,否则为 null。 |
code | string | 必填 | 失败原因码。 示例: |
message | string | 必填 | 脱敏说明。 示例: |
metadata | object | 否 | 商户自定义键值,最多 20 个键;键最长 40 字符,值为最长 200 字符的字符串。禁止放入卡号等敏感数据,平台会做检查并拒绝。 约束: 示例: |
created_at | string(date-time) | 必填 | 受理时间。 示例: |
completed_at | string(date-time)可为空 | 必填 | 进入 succeeded、failed、rejected 或 canceled 的时间;尚未结束时为 null。 示例: |
reason建议使用原因码:requested_by_customer、duplicate、fraudulent、order_canceled、other。returned表示曾确认成功的退款之后发生真实资金退回,原成功事实保留,returned_amount为已退回本金。- 平台异常退款(平台向持卡人原路退还重复扣款或金额不符多扣的款项)不通过开放 API 返回,也不计入支付的
refunded_amount、refund_status;平台另以站内信和邮件通知你。
processing 的退款结果未知时资金持续占用,平台持续查证,不会在本地取消。
CheckoutSession 收银会话
托管收银会话,关联统一的 Payment,不单独形成第二份支付订单。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 必填 | 收银会话号。 示例: |
payment_id | string | 必填 | 关联的 Payment。 示例: |
status | string | 必填 | 收银会话状态。
示例: |
checkout_url | string(uri) | 必填 | 收银页地址,携带只绑定本会话的短时凭据,不含商户服务端密钥。只用于让付款人浏览器整页跳转:不要写入日志、分析工具或错误上报,也不要分享给他人。 示例: |
expires_at | string(date-time) | 必填 | 会话失效时间,创建时确定:最长 30 分钟(平台可调短)且不超过订单剩余可支付期。过期后的只读期内(创建时确定,默认且最长 24 小时)付款人仍可用原链接查看会话与支付结果(只读,不能提交),之后链接失效。 示例: |
return_url | string(uri) | 必填 | 支付结束后的商户返回地址。 示例: |
cancel_url | string(uri)可为空 | 必填 | 付款人点击“返回商户”时的地址;点击它不等于撤销已提交的扣款。未提供时为 null。 示例: |
locale | string | 必填 | 收银页语言。 示例: |
created_at | string(date-time) | 必填 | 创建时间。 示例: |
checkout_url含收银令牌,只用于让付款人浏览器整页跳转:不要写入日志、分析工具或错误上报,也不要分享给他人。- 会话最长 30 分钟且不超过订单剩余可支付期;过期后进入只读期(默认且最长 24 小时),链接只能查看结果、不能提交,之后失效。
- 点击“返回商户”(
cancel_url)不等于撤销扣款。
Balance 余额
单一币种的商户余额分桶。同一金额只处于一个桶;待追偿是单独的债权,不以负数隐藏在其他桶中。不同币种不得相加。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
currency | string | 必填 | 币种。 约束: 示例: |
pending | integer(int64) | 必填 | 待结算:支付已成功,但到账、账期或对账条件未全部满足的净额;不可打款。 约束: 示例: |
available | integer(int64) | 必填 | 可结算:已满足释放条件且未被占用的金额;唯一可用于打款的桶。 约束: 示例: |
reserve | integer(int64) | 必填 | 保证金:按规则留存、等待释放的金额。 约束: 示例: |
risk_hold | integer(int64) | 必填 | 风险冻结:与具体风险处置或争议关联的冻结金额。 约束: 示例: |
refund_pending | integer(int64) | 必填 | 退款占用:被审核中或处理中退款占用的金额。 约束: 示例: |
payout_pending | integer(int64) | 必填 | 打款占用:被有效结算单占用、尚未确认打款完成的金额。 约束: 示例: |
merchant_receivable | integer(int64) | 必填 | 待追偿:平台因真实强制扣收等形成的对商户应收债权;不属于商户可用资金。 约束: 示例: |
book_payable | integer(int64) | 必填 | 商户账面应付余额 = pending + available + reserve + risk_hold + refund_pending + payout_pending。 约束: 示例: |
net_position | integer(int64) | 必填 | 商户净头寸(仅展示用途)= book_payable - merchant_receivable,可为负;不能替代 available。 示例: |
| 余额桶 | 中文 | 含义 | 可用于打款 |
|---|---|---|---|
pending | 待结算 | 支付已成功但到账、账期或对账条件未全部满足的商户净额 | 否 |
available | 可结算 | 已满足释放条件且未被占用 | 是 |
reserve | 保证金 | 按规则留存、等待释放 | 否 |
risk_hold | 风险冻结 | 与具体风险处置或争议关联的冻结 | 否 |
refund_pending | 退款占用 | 审核中或处理中的退款占用 | 否 |
payout_pending | 打款占用 | 被有效结算单占用、尚未确认打款 | 否 |
merchant_receivable | 待追偿 | 平台对你的应收(单独列示,不是负余额) | 不属于可用资金 |
book_payable = 前 6 个桶之和;net_position = book_payable − merchant_receivable,仅供展示,可为负。
警告
只有 available 可用于打款。不同币种的余额不能相加为“总余额”。
BalanceTransaction 账务流水
一个余额桶的一次增减。已记账流水不可修改,纠错通过冲正和新流水完成。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 必填 | 流水号。 示例: |
type | string | 必填 | 记账类型,例如 payment_captured(支付成功入账)、refund_reserved(退款占用)、settlement_reserved(结算占用)、funds_released(资金释放);须容忍新增取值。 示例: |
source_type | string | 必填 | 来源业务对象类型,例如 payment、refund、dispute、settlement、payout、payout_return(退汇)、adjustment。 示例: |
source_id | string | 必填 | 来源业务对象 ID。 示例: |
bucket | string | 必填 | 余额桶:pending、available、reserve、risk_hold、refund_pending、payout_pending、merchant_receivable。
示例: |
amount | integer(int64) | 必填 | 有符号金额,最小货币单位:正数增加该桶,负数减少该桶。 示例: |
currency | string | 必填 | 币种。 约束: 示例: |
occurred_at | string(date-time) | 必填 | 业务发生时间。 示例: |
booked_at | string(date-time) | 必填 | 记账时间;迟到事实不伪造为按时到达。 示例: |
ledger_transaction_id | string | 必填 | 关联的账务交易(凭证)号;桶间转移的两条流水共用同一个号。 示例: |
amount有符号:正数增加该余额桶,负数减少。桶间转移是同一ledger_transaction_id下一减一增两条流水。- 同时给出业务发生时间
occurred_at与记账时间booked_at;created_gte/created_lt作用于booked_at,迟到的事实按实际记账时间出现,不改写历史。 type是记账类型,例如payment_captured(支付成功入账)、refund_reserved(退款占用)、settlement_reserved(结算占用)、funds_released(资金释放);须容忍新增取值。
Settlement 结算单
结算单及其来源明细。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 必填 | 结算单号。 示例: |
currency | string | 必填 | 结算币种。 约束: 示例: |
period_start | string(date) | 必填 | 账期起始业务日期(含),按商户结算业务时区。 示例: |
period_end | string(date) | 必填 | 账期结束业务日期(含)。 示例: |
status | string | 必填 | 结算单状态。
示例: |
reserved_amount | integer(int64) | 必填 | 本结算单从 available 转入 payout_pending 的余额占用 S。 约束: 示例: |
fee_amount | integer(int64) | 必填 | 结算手续费 F,默认 0。 约束: 示例: |
payout_amount | integer(int64) | 必填 | 实际银行打款金额 = S - F。 约束: 示例: |
payout_account | PayoutAccount | 必填 | 结算单生成时固化的收款账户脱敏快照。 |
holder_name | string | 必填 | 账户持有人。 示例: |
bank_name | string | 必填 | 银行名称。 示例: |
account_last4 | string | 必填 | 账号后四位。 约束: 示例: |
payout_id | string可为空 | 必填 | 对应的打款记录;尚未执行时为 null。 示例: |
created_at | string(date-time) | 必填 | 生成时间。 示例: |
items | array<SettlementItem> | 必填 | |
source_type | string | 必填 | 来源类型,例如 payment、refund、adjustment。 示例: |
source_id | string | 必填 | 来源对象 ID。 示例: |
amount | integer(int64) | 必填 | 计入本结算单的有符号金额,币种同结算单。 示例: |
payout_amount = reserved_amount - fee_amount。payout_account是生成时固化的脱敏快照,之后变更收款账户不影响旧结算单。- 退款、拒付、保证金释放不重写历史结算单。
Payout 打款
一次结算对应的对外打款记录,与结算单及唯一参考号关联。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 必填 | 打款记录号。 示例: |
settlement_id | string | 必填 | 对应的结算单。 示例: |
amount | integer(int64) | 必填 | 打款金额,最小货币单位。 约束: 示例: |
currency | string | 必填 | 币种。 约束: 示例: |
status | string | 必填 | 打款状态:created、processing、unknown、succeeded、failed、canceled、returned。 unknown 时对应结算单保持 paying,不自动释放资金。
示例: |
reference | string | 必填 | 平台打款唯一参考号,不复用于新的转账。 示例: |
executed_at | string(date-time)可为空 | 必填 | 交付执行时间;尚未执行时为 null。 示例: |
completed_at | string(date-time)可为空 | 必填 | 经复核确认成功或失败的时间;尚未确认时为 null。 示例: |
- 开放 API 只能按 ID 查询打款(
getPayout),打款号取自结算单的payout_id;没有打款列表接口,列表在商户后台查看。 unknown表示暂时无法确认银行结果:对应结算单保持paying、资金不释放,平台先查证,不会重复打款。
Event 事件
商户事件。同一事件重试时 ID 与载荷不变;不含完整卡号、CVC、服务端密钥或认证秘密。
| 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
id | string | 必填 | 事件 ID,用于去重。 示例: |
type | string | 必填 | 事件类型,取值见 webhooks.v1.yaml 的 EventType;客户端须容忍未知类型。 示例: |
api_version | string | 必填 | 载荷的 API 版本。 示例: |
created_at | string(date-time) | 必填 | 事件创建时间;不能代替签名时间。 示例: |
environment | string | 必填 | 环境:test 为测试,live 为生产。测试与生产对象相互隔离。
示例: |
merchant_id | string | 必填 | 商户号。 示例: |
data | EventData | 必填 | |
object | object | 必填 | 事件发生时的业务对象快照(Payment、Refund、Dispute 或 Settlement),只含商户有权查看的最小必要数据,含 id 与 version。 示例: |
type取值见 Webhook 事件类型,须容忍新类型。created_at是业务时间,不是签名时间;data.object是事件发生时的对象快照,至少含id与version。