卡发行 › Webhook
卡状态变化
卡片被冻结、解冻、挂失或销卡时发送。
事件类型
| 事件 | 什么时候发 |
|---|---|
card.status.updated | 卡片状态发生变化(冻结 / 解冻 / 激活 / 销卡 / 制卡与物流推进) |
投递约定
- 我方向你配置的端点发
POST,application/json,超时 10 秒。 - 回任意 2xx 即视为收到。 非 2xx 或超时会按退避重投。
- 请求头四个:
content-type·z-signature·z-event-id·z-event-type。 - 按
z-event-id去重 —— 同一条事件可能到达多次。
事件体只带 ID 与状态
没有金额、没有资产代码、没有卡号的任何片段、没有风控原因。这不是省字节 ——
webhook 端点是你的服务,我方没有办法保证它的传输与存储;
而 GET /v1/<资源>/{id} 那条路径上有 API Key、scope、
代理会员三层校验。要详情就拿 data.id 回查,
别指望从事件体里读出金额来记账。
逐条
card.status.updated
卡片状态发生变化(冻结 / 解冻 / 激活 / 销卡 / 制卡与物流推进)什么时候发
上游回报的卡片状态与我方记录不一致、我方把它同步过来那一刻。一条事件覆盖全部状态变化,具体变成了什么事件体里没有 —— 拿data.id(就是卡 id)回查 GET /v1/cards/crd_<id> 的 status。⚠ 2026-08-13 之前这一条发的是会员内部 id,只能先列出这个人的全部卡再逐张比对(而多卡用户根本比不出是哪一张变了)。已修。⚠ 冻结与解冻各有一个过渡态(freezing / unfreezing),它们不是终态 ——过渡态期间往卡里充值会失败。别看到一条事件就认定卡已经可用。⚠ 同一张卡会连着来两条(freezing → frozen),务必按 status_version向前合并 —— 乱序到达时后写的那条会把卡打回过渡态。
事件体
{
"event_id": "evt_ca730f5b8e214d6790ab3c1e57f4d028",
"event_type": "card.status.updated",
"created_at": "2026-08-12T16:40:11Z",
"merchant_id": "acme",
"livemode": true,
"data": {
"object": "card",
"id": "e70b3d41-5a28-4c96-91f0-6b2a8c05d7e3",
"external_member_id": "u_88123",
"status": "updated",
"status_version": 3
}
}验签
验签方式与所有事件一致,见 Webhook 概览; 可以用签名调试器逐字符比对签名串。