FUNDING_WEBHOOK,其中注明资金到账的虚拟账户。您可以从该余额出金、将资金划转给另一个商户,或购买加密货币。
工作原理
一个账户还是每个付款人一个账户
虚拟账户仅用于归属识别,它没有自己的余额:任何虚拟账户上的每笔充值,都会入账到商户币种账户的唯一余额中。请在您自己的账本中以
depositAlias 为键维护每个付款人的余额。开始之前
- API 访问权限。 一个 API 密钥、已加入白名单的服务器 IP,以及放在
X-BH-TOKEN请求头中的业务令牌。参见认证。 - 一个已验证的商户。 参见创建商户。
- 一个已激活的币种账户,对应您要收款的币种和渠道(在获取商户账户列表中状态为
2)。参见激活商户账户。 - 一个
FUNDING_WEBHOOK端点,已注册并能返回所要求的确认响应。参见 Webhook 和 Webhook 设置。
支持虚拟账户的渠道
商户必须已在该渠道拥有已激活的币种账户。如果币种账户所在渠道不支持虚拟账户,将返回
-5084(该币种不支持多个虚拟账户)。default(不区分大小写)为保留值。
分步操作
1
为每个付款人创建虚拟账户
调用 渠道开设账户期间
POST /v2/merchant/virtual/accounts,传入商户、币种、渠道以及您自定义的 alias。请使用您系统中的稳定 ID(例如客户 ID),这样无需查找表即可匹配充值。别名一经创建便不可更改。cURL
Response
status 为 1(待处理),激活后为 2,失败则为 3。ARS(63)账户会立即返回 2。在别名处于待处理状态时再次发送相同别名会返回 -5085;激活后再次发送则返回 -5086。2
获取该别名的银行信息
使用 将这些信息与付款人关联保存。
depositAlias 轮询 GET /v2/merchant/virtual/addfunds,直到记录的 status 为 2,然后读取其 fieldList。键名取决于渠道,详见各支付方式的 fieldList 键。cURL
fieldList 中的二维码图片链接在响应后一小时过期,因此再次展示时请重新获取。如需为商户主账户注资,请改为调用 GET /v2/merchant/addfunds。3
告知付款人如何操作
向付款人展示其别名对应的信息。付款人的操作取决于支付通道:
4
处理充值 Webhook
充值入账后,VelaFi 会创建一条类型为
DEPOSIT、状态为 2 的资金记录,并发送 FUNDING_WEBHOOK。请验证 signature 请求头、保存该事件,并返回 HTTP 200 和 {"callbackStatus":"SUCCESS"}。在您的账本中为 depositAlias 所标识的付款人入账。参见需要处理的 Webhook。5
检查余额
通过
GET /v2/merchant/accounts 读取商户余额:即该币种和渠道对应记录的 balance。这是可用于出金、划转和入金订单的金额。cURL
需要处理的 Webhook
订阅FUNDING_WEBHOOK。一个 Webhook 会接收您账户下所有商户的事件。充值事件示例如下(所有值均为字符串):
FUNDING_WEBHOOK (DEPOSIT)
完整字段列表见资金记录事件。
处理失败
- 重复或乱序的事件。 同一事件可能到达不止一次,而在推送前状态已发生变化的事件会被丢弃。请基于
eventType+txId+status实现幂等处理,并在需要最新状态时通过获取资金记录读取该记录。 - 错过的 Webhook。 如果您的端点宕机或响应不正确,事件不会重发。请定期运行下文的对账流程,确保不遗漏任何充值。
- 没有
depositAlias的充值。 付款到商户主账户信息的充值,或不回传别名的支付通道,都没有可匹配的虚拟账户。请利用付款人字段和bankWebhookInfo将其转入人工审核。 - 虚拟账户创建失败。
status3表示渠道拒绝了该账户。-5079表示该账户未针对该币种和渠道开通,-5071表示商户在该渠道上的币种账户未激活。重试前请检查商户账户。 - COP 别名被拒绝。 对于
68和69,别名必须为 6 到 21 位大写字母或数字。
对账
资金记录是余额入账情况的唯一可信来源:- 使用
GET /v2/merchant/funding/records,传入type=DEPOSIT、一个fiat以及startTime/endTime时间窗口(该窗口按完成时间计算)。将每条状态为2的记录与您保存的 Webhook 进行比对,并处理遗漏的记录。对于充值,webhookInfo包含与bankWebhookInfo相同的服务商信息,其中包括depositAlias。 - 使用
GET /v2/merchant/fiat/flows获取逐笔余额历史:每一行包含变动额(changed)、变动后余额(total)以及相关的txId。用它来证明获取商户账户列表中的余额等于您所有变动之和。
pageSize 最多 20,000 条),法币流水每页最多 1,000 条。使用 currentPage 翻页。
在沙盒环境中测试
使用https://api-test.velafi.com 和沙盒环境凭证。您可以在沙盒环境中创建和查询虚拟账户,并使用法币充值模拟器(POST /v2/platform/test/deposit)入账测试充值。传入 depositAlias 可将充值发送到某个虚拟账户。
- Webhook 不会在沙盒环境中触发。 请自行向处理程序发送示例负载进行测试,并通过获取资金记录检查每笔模拟充值的结果。
- 模拟器只能生成成功的充值,无法生成失败或被退回的充值。
上线检查清单
-
FUNDING_WEBHOOK端点会验证签名,并快速返回 HTTP200和{"callbackStatus":"SUCCESS"},远在 60 秒超时之内。 - 处理程序基于
eventType+txId+status实现幂等,并忽略已处理过的事件。 - 每个付款人都有自己的虚拟账户,且别名对应您系统中的唯一一位客户。
- 您的账本维护每个付款人的余额;您不期望 VelaFi 为每个虚拟账户单独维护余额。
- 没有
depositAlias的充值会进入审核队列。 - 有定时任务将资金记录(
type=DEPOSIT)与保存的 Webhook 进行比对,并处理缺失的部分。 - 二维码和付款链接在展示前会重新获取。