Skip to main content
本页面向 Waffo Point Topup(点卡充值)的供应商,回答三个问题:三种接入模式怎么选、Waffo 和你各自要提供哪些接口、所有接口共用的规范(签名、幂等、错误码)。各模式的细节分别见 Mode A、Mode B、Mode C 三篇。

Waffo Point Topup 是什么?我作为供应商能得到什么?

Waffo Point Topup 是 Waffo 的点卡充值 API 与白标点卡充值方案。你把自己的点卡库存或充值能力接进来,面向终端用户的销售侧由 Waffo 代为运营:
  • 独立子域名上的多语言店面,地址形如 https://{supplier}.waffoplay.com/{site_code}/({supplier} 是接入时 Waffo 分配给你的子域名)
  • 全球支付方式
  • Waffo 作为这笔销售的 merchant-of-record
  • 定期向你结算
几个术语: 产品层面的介绍见官网 点卡充值 (https://waffo.com/docs/zh/essentials/point-topup.md);技术接入规范见官网 点卡充值 API 集成总览 (https://waffo.com/docs/zh/developer-docs/point-topup/overview.md)。

三种接入模式有什么区别?

更细的对比:

我该选哪种模式?

按你的系统条件来选:
  • 没有 API 能力,想尽快上线:选 Mode A,只需按模板提供点卡文件。
  • 已有点卡库存系统并带 API,希望点卡生成与有效期仍由你控制:选 Mode B,用户付款后 Waffo 实时向你的接口获取点卡。
  • 能直接给用户账号充值:选 Mode C,用户付款后 Waffo 调用你的直充接口,用户不需要接触点卡。
官网提供了一个在线演示站点 (https://waffoplay-demo-01.waffo.dev/),可以走完三种模式的端到端流程。

Waffo 提供哪些接口,我要提供哪些?

Waffo 只提供两个接口和一个 Webhook(在官网 API Reference 的 Point Topup 分组中)。供应商一侧的接口都是可选集成:文档里的规范只是示例,如果你已有功能等价的接口,把你自己的接口文档交给 Waffo,Waffo 会适配你现有的接口,不需要按示例重做。 Mode C 的最小接入只需要 GET /redirect 签名跳转加上履约结果通知,不需要自己提供履约接口。这种情况下通知只会上报 PAY_SUCCESS 和 PAYMENT_FAILED,你在收到 PAY_SUCCESS 后走自己的发货流程。

每种模式接入前要准备哪些材料?

Mode A Mode B Mode C

接口的通用格式是什么?

以下通用规范适用于 Mode B 和 Mode C;Mode A 没有 API,不涉及。 Waffo 发给你的请求,以及你返回的响应,都由 header 和 body 两部分组成,签名放在 header 的 X-SIGNATURE 中,是对整个 body 报文的签名。你的响应 body 形如:
请求失败时 data 为空。

HTTP 200 就代表业务成功吗?

不是。HTTP 200 只说明传输成功:请求到了、被接收了、有响应返回。业务结果还要再看两处:
  1. 响应 body 里的 code:只有 0 表示请求被接受,其他值按下方错误码处理。
  2. data 里的业务状态字段,例如 status 或 fulfillmentStatus。
例如履约失败同样以 HTTP 200、code 为 0 返回,失败体现在 fulfillmentStatus 为 PAY_SUCCESS_SUPPLY_FAILED,并带有 failureCode 和 failureReason。只看 HTTP 状态码会把它误读成成功。 HTTP 状态码本身的分类:

接口怎么签名、验签?

Waffo 与供应商之间的接口使用 SHA256WithRSA 签名,保证报文不可抵赖:
  1. 接入阶段:双方互换 RSA 公钥,各自保管自己的私钥,只共享公钥。
  2. 请求阶段:Waffo 用自己的私钥对报文签名后发给你;你用 Waffo 的公钥验签,通过才处理请求,不通过就返回 Invalid Signature 错误。
  3. 响应阶段:你用自己的私钥对响应签名后返回;Waffo 用你的公钥验签,通过才处理响应。
如果验签失败,Waffo 会排查并联系你,并在问题解决前停止向你发送新交易——因为你可能已经处理了请求,而 Waffo 因验签失败没能处理响应。 注意区分两种签名: 跳转链接的签名算法见 Mode C 一篇。

怎么生成 RSA 密钥?

用 openssl 生成一对 2048 位的密钥:
把 supplier_public_key.pem 交给 Waffo,同时拿到 Waffo 的公钥。私钥必须妥善保管,不得泄露给任何第三方。

幂等有什么要求?

你侧的接口必须支持幂等:同一个请求重复到达时,返回相同的结果,不重复扣库存、不重复充值。

接口返回了错误码,怎么处理?

错误码前缀表示类别: 收到 E0001(未知状态)时,不要把交易当作失败,要持续查询,直到拿到明确的成功或失败状态。

想看英文原文或完整字段?

细节以官网为准: