本流程横跨服务端(调用 Generate / Inquiry / Remove API)与前端(通过
@waffo/payment-sdk 提交卡信息)两端。核心流程
- 商户后端 —— 调用 Generate API,获取
tokenSessionId。 - 商户前端 —— 将明文卡信息传给
@waffo/payment-sdk,由 SDK 加密后提交。 - 绑卡结果 —— 获取初始状态为
UNVERIFIED的tokenId(可能需要 3DS 验证)。 - 卡片验证 —— 完成一笔成功的 CIT,Token 状态变为
VERIFIED。 - 后续支付 —— 在
order/create中通过paymentInfo.userPaymentAccessToken传入tokenId。
绑卡流程
1
商户后端调用 Generate API
调用 POST /api/v1/tokenization/generate,传入
tokenRequestId、merchantUserId、tokenType: "CARD" 等参数。成功后返回 tokenSessionId。2
前端提交卡片信息
使用 商户前端会将明文卡信息传给 SDK。SDK 在发送前加密卡片数据。在前端 SDK 绑卡模式下,只要商户后端不保留、不流转明文卡信息,商户就无需具备 PCI DSS 资质。
@waffo/payment-sdk 的 tokenizationSubmit 方法将卡片数据加密后提交至 Waffo 服务器:3
处理绑卡结果
notifyUrl,Waffo 会在绑卡完成、Token 状态变化或卡片摘要信息更新时发送 TOKENIZATION_NOTIFICATION。商户应以 result.tokenId 为幂等键,保存最新的 tokenStatus 和 Token 数据。该通知不仅用于返回首次绑卡结果。Token 状态
绑卡成功后,Token 的初始状态为UNVERIFIED。你需要完成一笔成功的 CIT(持卡人发起交易)后,才能将状态变为 VERIFIED。验证交易可以是金额为 0 或 0.01 的独立 ONE_TIME_PAYMENT,也可以是正常的 CIT 支付。
UNVERIFIED:已生成 Token,但尚未完成成功的 CIT。此状态不能用于 scheduled 或 unscheduled MIT,否则返回A0045。VERIFIED:已完成成功的 CIT,可用于后续支付。EXPIRED:卡片到达有效期后,Token 状态会变为EXPIRED。SUSPENDED:Waffo 已暂停该 Token 的使用。公开契约未定义具体触发条件。
使用 Token 支付
获取tokenId 后,在创建订单时通过 paymentInfo.userPaymentAccessToken 传入以代替卡号:
tokenId 只能与 Waffo 的 ONE_TIME_PAYMENT 产品配合使用,不能传给 Waffo 的 SUBSCRIPTION 产品。
如果你自行管理周期性计费计划,可在 Token 变为 VERIFIED 后,按计划重复创建 ONE_TIME_PAYMENT 订单。MIT 订单还需要设置 paymentInfo.merchantInitiatedMode。
Token API 用法
安全机制
- 商户前端将明文卡信息传给 SDK,SDK 在发送前加密;商户后端不接触明文卡号
- 所有 API 请求和响应均使用 SHA256WithRSA 签名验证
- 支持 3DS 验证,提升支付安全性