📄 正文
无论您要的是开卡进度、卡片状态变更、实时授权结果,还是 KYC 与工单的流转,您都可以通过 Webhook 一次性订阅——DCS 在事件发生的瞬间主动把它推送到接入机构预先登记的webhookUrl,您无需轮询查询即可让自有系统与 DCS 保持实时一致。
作为持牌、自有 BIN 的发卡机构,DCS 在卡片生命周期、授权、合规等关键节点通过 Webhook 发送通知。所有事件共用同一套公共消息结构,接入机构只需实现一个接收接口即可处理全部事件类型。
前置条件:在接收事件之前,您需要先登记webhookUrl、配置 IP 白名单,并准备好用secretKey校验X-Signature签名。配置步骤与 HMAC-SHA256 校验代码见 Webhook 配置。
核心概念:统一消息结构,多种事件类型
每一条 Webhook 都使用相同的公共消息结构:外层字段说明事件类型、关联对象和发生时间,data 则承载该事件专属的业务数据。接收端先读取 webhookType,再据此解析对应的 data 结构即可。
幂等去重:同一事件可能因网络重试被推送多次。请使用消息中的webhookId作为幂等键;对于已处理的webhookId,直接确认并跳过,避免重复入账或重复发卡。
公共消息结构
所有 Webhook 共享以下外层字段:时区说明:notificationTime及各data内的createTime/modifyTime均带+08:00偏移(新加坡时区),与全站业务时间字段的 UTC+8 约定一致。解析时请按字符串自带的偏移量处理,不要假定为 UTC;如需确认其他时间字段的时区,请联系 DCS 接入团队。
Webhook 事件类型(webhookType)
AUTHORISATION_RESULT是授权结果回执,与持卡人刷卡时需要接入机构同步决策的授权转发请求是两回事——后者通过authUrl(RSA 双向签名)实时下发并要求接入机构在限定时间内返回放行/拒绝。授权转发请求的处理见授权转发。
各事件的数据结构(data)
卡订单(CARD_ORDER)
webhookType = CARD_ORDER,对应开卡、虚拟卡转实体卡、换卡等卡订单的进度推送。
status 随 type 取值:
卡订单的完整状态机、errorCode 含义与补件动作,见开卡与卡订单错误码。
卡片(CARD)
webhookType = CARD,卡片自身状态发生变更时推送(如冻结、被阻止、注销)。
Webhook 中不含完整卡号、CVV 等敏感信息。卡状态机(FROZEN可由接入机构解冻、BLOCKED仅 DCS 可解除)与statusReason详见卡管理。
授权结果(AUTHORISATION_RESULT)
webhookType = AUTHORISATION_RESULT,授权落账结果回执。
同意与拒绝都会推送:无论授权被放行还是被拒绝,DCS 都会推送本事件(approveFlag=A/D)。接入机构在authUrl返回拒绝(01/11/21)会推送approveFlag=D;DCS 前置校验失败(如卡冻结、注销,此时未转发到authUrl)同样推送approveFlag=D。因此接入机构可凭本 Webhook 建立全量授权台账,次日的授权报告可作为对账兜底。 各authType、direction与originalAuthId在退货、增量授权、多笔清算等场景下的组合关系,见授权与清算与清算场景。
3DS 验证通知(AUTHORISATION_3DS_CHALLENGE)
webhookType = AUTHORISATION_3DS_CHALLENGE,3DS 挑战通知。通过 flowsType 区分两种认证模式:
OOB(Out Of Band):引导持卡人到接入机构侧完成验证。接入机构收到此 Webhook 后,需在自有应用或其他渠道中引导持卡人完成认证,再通过 API 将认证结果返回 DCS。OTP_DELEGATE:由接入机构向持卡人发送短信/邮件验证码。DCS 通过本 Webhook 把验证码推送给接入机构,接入机构解密后再发送给持卡人。
敏感字段解密(仅OTP_DELEGATE):otpPasscode、phoneNumber、secretKey经 AES-GCM 加密传输,Webhook 同时携带iv。接入机构需用secretKey+iv解密后,再把验证码下发给持卡人。AES/GCM 参考实现(12 字节 IV、128 位认证标签)见卡管理 · 重置 PIN。3DS 转发的完整时序见 3DS 转发。
KYC 工单(KYC Ticket)
webhookType = KYC_TICKET,KYC 认证工单状态变更。
不同kycApplyMode下工单可能出现的状态并不相同:H5-RENEWAL与H5-MIGRATION只有INIT/PASSED/REJECTED,不会出现NEED_VERIFY或PENDING。各模式的状态线见更新 KYC 资料与 KYC 信息迁移。 KYC 状态机、拒绝码与补件动作,见查询 KYC与 KYC 拒绝码。
KYC
webhookType = KYC,用户级 KYC 事件:DCS 检测到该用户证件 / KYC 资料到期需要更新,或更新已完成。与 KYC_TICKET(工单级,跟单次认证的进度)是两回事。
收到 kycRenewalRequired=true 后如何引导用户更新,见更新 KYC 资料;也可随时主动调查询用户 KYC 信息确认。
一条完整 Webhook 示例
以「虚拟卡开卡完成」为例,接入机构收到的 HTTP POST body 形如:示例已按实际报文的字段字典序排列,仅为便于阅读做了缩进格式化,实际报文为紧凑格式(见下方注意事项)。请求头中携带
X-Signature(HMAC-SHA256,针对整个 body 计算)。接入机构应:
- 先校验
X-Signature,校验失败即丢弃; - 用
webhookId去重; - 按
webhookType分发到对应处理逻辑; - 返回 HTTP 200(服务端以 2xx 成功响应判定接收成功),否则 DCS 会按重试策略重投。
除实时AUTHORISATION外,通用 Webhook 最多重试 3 次;重试由定时任务驱动,退避间隔随任务配置而定。实时AUTHORISATION不重试,超时直接按responseCode=21处理。DCS 出站Content-Type固定为application/json。
注意事项
报文格式与字段顺序
Webhook 报文以紧凑 JSON(无空格、无换行)发送,所有层级(公共消息结构、data 及其嵌套对象)的字段均按完整字段名的字典序升序排列——逐字符比较字符编码,首字符相同则比较下一个字符,区分大小写。该顺序是 DCS 侧序列化的确定性保证,便于必要时核对原始报文;接入机构按 JSON 正常解析即可,不应依赖字段顺序取值。
字段扩展说明
Webhook 报文(各事件的data)后续可能会新增字段,字段扩展遵循以下兼容性承诺:
- 存量字段保持稳定:当前文档已定义的字段,其名称、类型、含义永不变更,不会删除;
- 仅以新增字段的方式扩展:接入机构可按需读取新增字段;暂不需要时忽略即可,不影响既有解析;
- 解析时需忽略未知字段:请勿使用「遇到未知字段即报错」的严格校验模式解析 Webhook 报文,确保新增字段不影响存量对接。
新增字段与验签
X-Signature 基于 DCS 实际发送的原始消息体字符串计算。请直接使用接收到的原始 body 计算 HMAC-SHA256 并比对,不要将报文解析后重新生成 JSON 再验签——重新生成会因字段缺失、字段顺序或格式差异导致验签失败。只要基于原始报文验签,新增字段不会影响验签结果。校验方法见 Webhook 配置。
下一步
- 还没配置签名校验?请先完成 Webhook 配置,拿到可校验
X-Signature的接收端。 - 需要在持卡人刷卡时实时决策放行/拒绝?请阅读授权转发。

