Skip to main content
Mode C 面向能直接给用户账户充值的供应商。用户支付完成后,Waffo Point Topup 调用你的 API 完成充值,用户不需要处理点卡码。

优势

  • 用户体验顺滑,不需要点卡码
  • 账户即时到账
  • 转化率更高

适用场景

  • 具备账户充值系统的游戏发行商
  • 会员 / 订阅类服务

集成流程

Mode C 简化流程:供应商生成签名跳转链接、用户在 Waffo 支付、Waffo 调用供应商履行接口

接口清单

最小集成只需要第 1 项加第 4 项:签名跳转 + 履行结果通知 Webhook,不实现任何履行接口。这种情况下 Webhook 只会返回 PAY_SUCCESSPAYMENT_FAILED,由你在收到 PAY_SUCCESS 后走自己的发货流程。

URL 签名与跳转

通过带签名校验的 URL 参数传递用户信息,保证参数完整性。这是 Waffo 提供的端点。 完整的参数清单、类型、必填性与示例见 API 参考:签名跳转 本节只讲怎么把签名算出来。
签名必须在供应商后端生成,绝不能把 SECRET_KEY 暴露到前端。 签名有效期由 timestamp 控制,超过 2 小时的请求会被拒绝。
URL 格式:
其中 {supplier} 是入网时 Waffo 分配给你的专属子域名。
也可以使用自定义商户域名。 前提是供应商侧把该域名解析指向 Waffo 的 endpoint。启用后,拼接待签串时的 base URL 必须换成这个自定义域名——签名覆盖 base URL,域名不一致会导致验签失败。

签名算法

1

剔除参数

排除 signature 参数,并丢掉所有值为空或空白的参数
2

排序

剩余参数按参数名 ASCII 升序排列。
3

拼接待签串

{baseUrl}?key1=value1&key2=value2&... 拼接。base URL(scheme + host + path,例如 https://supplier.waffoplay.com/redirect)必须包含在内。
4

计算签名

以共享的 SECRET_KEY 作为 HMAC 密钥,对待签串计算 HMAC-SHA256。
5

转大写

十六进制编码后转为大写。

签名示例

给定参数: 第 1 步,排序并拼接:
第 2 步,计算 HMAC-SHA256 并转大写:
完整 URL:
注意待签串里 returnUrl 用的是未编码的原值,而最终 URL 里 returnUrl编码后的值。签名和传输是两个不同环节,不要混用。

Java 实现示例

Node.js 签名示例(HMAC-SHA256 & RSA-SHA256)

下载 Waffoplay Sign Methods.zip,内含 Node.js 的 HMAC-SHA256 与 RSA-SHA256 签名实现。

校验流程

用户访问签名 URL 后,Waffo Point Topup 后端会:
  1. 接收所有 URL 参数
  2. 校验必填参数是否齐全:faceValuesalesOrderIdsupplierIdsupplierUserAccountsiteCodetimestampsignature
  3. 校验 timestamp 在有效期(2 小时)内
  4. 用同样的算法重新计算签名
  5. 把计算出的签名与请求中的签名比对
  6. 校验通过后生成 JWT Token 并写入用户会话
  7. 跳转到目标 siteCode 的购买页
错误处理:

即时履行

用户支付完成后由 Waffo Point Topup 调用。
本节接口规范只是示例。如果你已有即时充值接口,直接把自己的接口文档给 Waffo Point Topup,Waffo Point Topup 会适配你的既有接口。
幂等要求: 供应商必须以 salesOrderId + supplierId 支持幂等。同一请求重复到达时,返回相同的成功响应。
强烈建议: 校验同一 salesOrderIdfaceValueamountcurrency 与你内部系统的订单记录严格一致。业务校验不通过时,应拒绝履行该笔交易。

请求参数

requestedAt 中,T 是日期与时间的分隔符,.000 是毫秒,Z 表示 UTC(协定世界时)。例如 2025-01-05T10:30:00.000Z 表示 UTC 时间 2025 年 1 月 5 日 10:30:00。

响应参数

响应示例:

履行结果查询

由 Waffo Point Topup 调用,用于向供应商查询履行结果。
如果你的即时履行接口本身支持幂等,就不需要提供这个查询接口——Waffo 会用同一个 salesOrderId 重试,由你保证幂等处理。

请求参数

响应参数

响应示例:

履行结果通知 Webhook

Waffo Point Topup 把最终履行状态 POST 到你在签名 URL 的 notifyUrl 参数里给出的端点,覆盖支付成功但履行失败、支付失败、以及超时未支付这几类情况。 完整字段清单、failureCode 全表与请求示例见 API 参考:履行结果 Webhook
幂等要求: 供应商必须以 salesOrderId + supplierId 支持幂等。同一通知重复到达时,返回相同的成功响应。
驱动你集成逻辑的是 fulfillmentStatus
如果你选择最小集成(只做签名跳转 + 本 Webhook,不实现履行接口),Waffo 只会返回 PAY_SUCCESSPAYMENT_FAILED 两种状态。

响应与重试策略

收到履行回调后,如果处理成功,请返回 HTTP 200 OK,并在响应体中包含 success。Waffo Point Topup 据此认为履行结果已成功通知供应商;否则 Waffo Point Topup 会重试。

Waffo 履行结果查询 API

供应商主动向 Waffo Point Topup 查询 Mode C 订单的履行结果。这是履行结果通知 Webhook 的拉取式对应版本,通常用于对账,或漏收 Webhook 通知时的兜底。响应的 data 结构与 Webhook 的 data 完全一致。 完整参数、响应示例与在线调用见 API 参考:履行结果查询 查询键:supplierId 必填,salesOrderIdpayOrderId 至少要传一个。订单不存在、或该订单不属于当前供应商时,按错误码规范返回错误响应。

下一步

API 共通规范

消息结构、RSA 签名验签、错误码与密钥生成。

集成总览

三种模式的完整对比与接入准备清单。