工作原理
- 创建商户。VelaFi 返回一个
merchantId和一个托管的kycLink。 - 引导您的客户前往
kycLink完成 KYC 或 KYB。 - 轮询商户状态,直到其变为
2(正常)。 - 为客户需要的每种币种激活一个币种账户(渠道)。
- 可选:创建虚拟账户,让客户的每个付款人都拥有专属的充值信息。
- 在该客户的每笔订单、出金、划转和查询中使用该
merchantId。
开始之前
- API 访问权限、带 IP 白名单的 API 密钥以及令牌。 参见认证。本页的所有调用都从您的服务器发起,并携带
X-BH-TOKEN请求头。 - 您自己的账户已获批。 您创建的商户隶属于您的 VelaFi 账户。多商户模式参见商户。
- 客户资料已准备好。 确定每位客户是
INDIVIDUAL还是BUSINESS,并为每位客户收集商户名称和电子邮箱地址。 - 一个用于返回用户的页面。 您将其作为
callbackUrl传入。对于个人验证,用户完成托管流程后,VelaFi 会将用户的浏览器重定向到该 URL。
分步操作
1
创建商户
调用创建商户(请立即在您的系统中将
POST /v2/merchants),传入 merchantName、email、merchantType(INDIVIDUAL 或 BUSINESS)和 callbackUrl。同时传入 industryType(当其为 other 时还需传入 industryTypeRemark)。对于个人,flow 用于选择 KYC 流程(默认为 PROFESSIONALS,或 CONSUMERS),languageCode 用于设置托管页面的语言(en、es、pt、zh)。merchantId 与该客户关联保存。从此刻起商户即已存在,即使尚未完成验证。常见拒绝原因:2
引导客户前往验证链接
将客户的浏览器重定向到 这不会创建第二个商户。当商户的验证正在审核中时,该调用会以
kycLink,或在您的应用中通过 iframe 打开。个人完成 KYC;企业完成 KYB。两种展示方式参见创建商户。该链接有时效限制。如果客户未完成或链接已过期,请使用现有的 merchantId、创建时使用的相同 merchantType 以及 callbackUrl 再次调用 POST /v2/merchants,以获取新链接:-5062 失败;验证获批后,则以 -5063 失败。用户到达您的
callbackUrl 仅表示客户离开了托管流程,并不表示已获批。请务必在下一步中检查状态。3
检查商户状态
调用获取商户列表(
GET /v2/merchants),读取 status 和 rejectReason。请传入 status=-1:不传时,列表只返回已获批的商户。使用 email 或 merchantName 筛选以查找单个商户。商户验证没有 Webhook。请以适中的间隔轮询,例如在客户入驻期间每隔几分钟轮询一次,之后降低频率。
4
激活币种账户
针对客户需要的每种币种,调用 处理返回的
POST /v2/merchant/accounts,传入 merchantId、fiat 和 trench(渠道名称),以及该渠道的 fieldList。请求内容因商户类型而异:status:然后轮询
GET /v2/merchant/accounts?merchantId=100001,直到该渠道显示 status: 2。每条记录还会返回该渠道的 paymentId,您在虚拟账户、出金和订单中都需要用到它。部分渠道有额外要求。BRL Pix - Woovi 要求个人先完成活体检测(获取 Woovi 活体检测 URL),要求企业提供完整的公司和 UBO 资料。文件必须通过上传文件上传。各渠道的要求参见激活商户账户。常见拒绝原因:-5073(商户尚未通过 KYC)、-5074(已激活)、-5062(激活已在处理中)、-5079(无该渠道的激活权限)、-4010(缺少必填的 fieldList 字段或字段无效)。5
可选:创建虚拟账户
如果客户向大量付款人收款,请通过创建虚拟账户(
POST /v2/merchant/virtual/accounts)为每个付款人提供专属的充值信息。传入 merchantId、fiat、该渠道的 paymentId 以及由字母和数字组成的 alias。虚拟账户支持 MXN、ARS、BRL 和 COP,且币种账户必须已激活。通过获取虚拟账户列表读取充值信息。向虚拟账户的充值会以 depositAlias 的形式携带其别名。完整的收款流程参见使用虚拟账户收取本地付款。在所有其他调用中使用商户 ID
merchantId 决定一次调用使用谁的余额、限额和账户。在为该客户发起的每次调用中,请传入客户的 MID,而不是您自己的:
请在您的客户 ID 与 VelaFi MID 之间保持一一对应,并且绝不允许由客户提供的值来决定 MID。
需要处理的 Webhook
商户验证和渠道激活没有 Webhook。请按上文所述轮询GET /v2/merchants 和 GET /v2/merchant/accounts。
Webhook 按 VelaFi 账户注册,而不是按商户注册:每种事件类型注册一次,即可接收您所有商户的事件。订单、资金记录、加密货币提现和稳定币支付事件都带有 merchantId,请据此路由。对于不带 merchantId 的事件,请通过其 ID 查询相应记录。参见 Webhook 设置。
处理失败
- 验证被拒绝(
status: 3)。 向客户展示rejectReason,然后使用相同的merchantId和merchantType请求新链接。 - 客户中途放弃(
status: 4)。 发送附带新链接的提醒。不要创建新商户;名称和邮箱已被第一个商户占用。 - 激活失败(
status: 3)。 在激活响应或获取商户账户列表中读取failReason。修正fieldList数据或联系 VelaFi。 - 激活长时间处于待处理状态。 待处理渠道取决于服务商。请继续轮询;如果渠道迟迟未激活,请联系 VelaFi。
- 超时和结果未知的错误(
-1001、-1006、-1007)。商户或渠道可能已被创建。再次调用前,请通过获取商户列表或获取商户账户列表进行检查。参见错误码。
对账
- 带
status=-1的GET /v2/merchants是验证状态以及每个商户每日和每月限额使用情况的唯一可信来源。 GET /v2/merchant/accounts是哪些渠道已激活及其paymentId、余额和每月买入/卖出限额的唯一可信来源。
在沙盒环境中测试
您的沙盒账户附带预先配置的测试商户,沙盒环境中不会进行真实的 KYC/KYB。请使用这些商户测试激活结果、虚拟账户以及后续的支付流程。请针对上表中的每个状态码编写状态处理逻辑,因为您无法让真实审核人员批准或拒绝沙盒商户。参见沙盒环境。上线检查清单
POST /v2/merchants返回后立即保存merchantId,并将其与您的客户一一对应。- 处理每种商户状态(
1、2、3、4)和每种激活状态(0到4),包括verifyLink重定向。 - 使用
status=-1轮询,以免尚未获批的商户从结果中遗漏。 - 使用现有的
merchantId和merchantType重新请求过期链接,而不是创建重复的商户。 - 等待渠道显示
status: 2后,再为该币种创建虚拟账户或发起支付。 - 在每个下游调用中传入客户的 MID,并按
merchantId路由 Webhook 事件。