开卡结果
开卡成功、执行失败、持卡人审核通过,或实体卡已可绑定时发送。持卡人通过或可绑定都不代表卡片已可用。
事件类型
| 事件 | 什么时候发 |
|---|---|
card.application.approved | 开卡成功,卡片已可用 |
card.application.rejected | 开卡申请执行失败 |
card.application.submitted | 已关联持卡人的审核状态同步 |
card.application.awaiting_bind | 实体卡已可绑定 |
投递约定
- 我方向你配置的端点发
POST,application/json,超时 10 秒。 - 回任意 2xx 即视为收到。 非 2xx 或超时会按退避重投。
- 请求头四个:
content-type·z-signature·z-event-id·z-event-type。 - 按
z-event-id去重 —— 同一条事件可能到达多次。
没有金额、没有资产代码、没有卡号的任何片段、没有风控原因。这不是省字节 ——
webhook 端点是你的服务,我方没有办法保证它的传输与存储;
而 GET /v1/<资源>/{id} 那条路径上有 API Key、scope、
代理会员三层校验。要详情就拿 data.id 回查,
别指望从事件体里读出金额来记账。
逐条
card.application.approved
开卡成功,卡片已可用发卡机构开卡成功、卡片落库之后。data.id 是公开开卡申请单号(已带 cap_),回查走 GET /v1/cards/applications/{data.id};要拿到卡本身用 GET /v1/cards 带 x-on-behalf-of: <external_member_id>。⚠ 2026-08-13 之前这一条发的是会员内部 id(而 data.object 写着card_application)—— 拿它回查必然 404。已修,请按上面的约定读。执行失败或持卡人拒绝导致申请失败时发 card.application.rejected。
{
"event_id": "evt_2e6c98a04f1b47d3850ac7e195b3d602",
"event_type": "card.application.approved",
"created_at": "2026-08-12T16:03:27Z",
"merchant_id": "acme",
"livemode": true,
"data": {
"object": "card_application",
"id": "cap_9c41f0a8-27d5-4e63-b0a9-1f7c85d2e340",
"external_member_id": "u_88123",
"status": "approved",
"status_version": 5
}
}card.application.rejected
开卡申请执行失败申请执行失败,或持卡人明确拒绝导致申请落为 failed 后触发。不依赖会员邮箱;重复执行按申请单号和状态版本去重。通知 status 为 rejected,回查申请详情的 status 为 failed。原始上游原因不外发,处理原因请回查详情里的 failure_code。
{
"event_id": "evt_491ad542803841bca106f69ae28a3c14",
"event_type": "card.application.rejected",
"created_at": "2026-09-15T08:00:00Z",
"merchant_id": "acme",
"livemode": true,
"data": {
"object": "card_application",
"id": "cap_9c41f0a8-27d5-4e63-b0a9-1f7c85d2e340",
"external_member_id": "u_88123",
"status": "rejected",
"status_version": 4
}
}card.application.submitted
已关联持卡人的审核状态同步支持持卡人回查同步的渠道确认已通过时,通知仍在履约中的关联申请。data.status 是申请真实进度,cardholder_review_status 为 approved。这不是开卡成功事件,不应因此重新提交申请或直接展示卡已可用。收到后回查 GET /v1/cards/applications/{data.id}。
{
"event_id": "evt_d9f5b7057f6a40d99f05d7631255b888",
"event_type": "card.application.submitted",
"created_at": "2026-09-15T08:00:00Z",
"merchant_id": "acme",
"livemode": true,
"data": {
"object": "card_application",
"id": "cap_9c41f0a8-27d5-4e63-b0a9-1f7c85d2e340",
"external_member_id": "u_88123",
"status": "picking",
"status_version": 3,
"cardholder_review_status": "approved"
}
}card.application.awaiting_bind
实体卡已可绑定实体卡到了用户手里、申请单进入 awaiting_bind 之后。下游库存模式的标准申请在审核通过进入履约队列后会自动当面交付到这一档;平台自营则是线下面交确认,或邮寄运单标成用户已签收。data.id 是公开开卡申请单号(已带 cap_),回查走 GET /v1/cards/applications/{data.id},然后POST /v1/cards/bind → POST /v1/cards/{id}/activate。这不是开卡成功:卡还没激活,不要当成已可用。仅 shipped(货还在路上)不发;绑卡之后的 pending_activation 也不发。激活成功仍走 card.application.approved 与 card.status.updated。⚠ 平台自营会员不发。
{
"event_id": "evt_b7c1e02a9d3f4e18ac552d61ab0f9e77",
"event_type": "card.application.awaiting_bind",
"created_at": "2026-09-21T06:37:35Z",
"merchant_id": "acme",
"livemode": true,
"data": {
"object": "card_application",
"id": "cap_9c41f0a8-27d5-4e63-b0a9-1f7c85d2e340",
"external_member_id": "u_88123",
"status": "awaiting_bind",
"status_version": 5
}
}验签
验签方式与所有事件一致,见 Webhook 概览; 可以用签名调试器逐字符比对签名串。