什么是 Ramp?
Ramp 是在法币和加密货币之间转换的交易。KillB 支持** on-ramps**(法币 → 加密货币)和** off-ramps**(加密货币 → 法币)。将 ramps 视为传统银行和加密货币之间的桥梁。它们处理从报价到结算的整个转换过程。
Ramp 类型
- On-Ramp
- Off-Ramp
法币 → 加密货币将本地货币(COP、MXN、USD)转换为稳定币(USDC、USDT)。流程:
- 用户获取报价(例如,100,000 COP → 23.8 USDC)
- 用户使用钱包地址创建 ramp
- 用户通过 PSE/SPEI/ACH 支付
- KillB 处理转换
- USDC/USDT 发送到用户钱包
- 使用本地货币购买加密货币
- 为 DeFi 头寸提供资金
- 跨境汇款
- 加密货币投资
Ramp 生命周期
Ramp 在处理过程中经历多个状态阶段:Ramp 状态
处理状态
处理状态
CREATED
- Ramp 已初始化,等待支付
- 已向用户提供支付说明
- 支付请求已发送给提供商
- 等待用户支付
- 已收到支付,正在验证
- 确认进行中
- 支付已确认
- 准备转换
- 正在转换法币 ↔ 加密货币
- 执行交易
- 转换完成
- 准备支付
- 正在向目的地发送资金
- 交易进行中
- 资金已发送到目的地
- 等待最终确认
最终状态
最终状态
COMPLETED ✅
- 交易完全完成
- 资金已交付给用户
- 收据可用
- 交易在某个阶段失败
- 检查
details字段了解原因 - 可能有资格重试
- 由用户或系统取消
- 未转移资金
- 如果适用,已启动退款
- 被合规或提供商拒绝
- 检查
note了解详情 - 可能需要额外验证
- 发生系统错误
- 使用 ramp ID 联系支持
- 将进行调查和解决
创建 Ramp
先决条件
在创建 ramp 之前,您需要:基本 Ramp 创建
多个目的地账户
您可以将 ramp 拆分到多个目的地账户:支付信息
根据支付方式,返回不同的支付信息:- PSE(哥伦比亚)
- SPEI(墨西哥)
- 加密货币钱包
- 将用户重定向到
url - 用户通过 PSE 完成支付
- Webhook 通知支付完成
退款说明
对于 on-ramps,在失败情况下提供退款说明:外部 ID
使用externalId 防止重复 ramps 并跟踪交易:
- 防止重复提交
- 在您的系统中跟踪 ramps
- 重试的幂等性
- 更容易对账
监控 Ramps
按 ID 获取 Ramp
查询 Ramps
id- 特定 ramp IDexternalId- 您的系统 IDstatus- 按状态过滤limit、page- 分页
状态历史
跟踪所有状态更改:Ramp 收据
以多种格式获取交易收据:- HTML 收据
- JSON 收据
- PDF 收据
预充值 Ramps
预充值 ramps 即时执行:PRE_FUND 或 PRE_FUND_* 方法时:
- 不需要支付确认
- 即时执行
- 立即状态进展
- 更快的完成(分钟而不是小时)
CREATED → CONVERSION_PROCESSING → CASH_OUT_PROCESSING → COMPLETED
处理失败
常见失败原因
| 原因 | 描述 | 解决方案 |
|---|---|---|
INSUFFICIENT_FUNDS | 来源余额不足 | 用户需要为账户充值 |
INVALID_ACCOUNT | 目的地账户无效 | 验证账户详情 |
COMPLIANCE_HOLD | 需要合规审查 | 等待人工审查 |
PROVIDER_ERROR | 外部提供商问题 | 重试或联系支持 |
EXPIRED_QUOTE | 报价已过期 | 创建新报价 |
检查失败详情
错误处理指南
了解处理 ramp 失败的最佳实践
Ramps 的 Webhooks
订阅 ramp 事件以获取实时更新: 事件类型:RAMP
操作:
CREATE- Ramp 已初始化UPDATE- Ramp 状态已更改(包括所有状态转换)DELETE- Ramp 已取消(罕见)
- 已收到支付(
CASH_IN_COMPLETED) - 转换完成(
CONVERSION_COMPLETED) - Ramp 完全完成(
COMPLETED) - Ramp 失败(
FAILED) - Ramp 已取消(
CANCELED)
Webhook Payload Example
Ramp 更新
更新 ramp 信息(有限场景):- 目的地账户(支付前)
- 账户金额分配
性能考虑
交易时间
| 方法 | 典型时间 | 网络依赖 |
|---|---|---|
| PSE | 5-30 分钟 | ✅ 是 |
| SPEI | 10-60 分钟 | ✅ 是 |
| ACH | 1-3 个工作日 | ✅ 是 |
| Wire | 1 个工作日 | ✅ 是 |
| Crypto (Polygon) | 2-5 分钟 | ⛓️ 区块链 |
| Crypto (Solana) | 1-2 分钟 | ⛓️ 区块链 |
| Pre-Funded | < 5 分钟 | ❌ 否 |
最佳实践
始终使用报价
始终使用报价
- 永远不要硬编码汇率
- 为每个 ramp 创建新报价
- 遵守报价过期时间(30 秒)
- 向用户显示确切金额
实现状态轮询
实现状态轮询
- 每 10-30 秒轮询一次 ramp 状态
- 使用 webhooks 作为主要通知
- 轮询作为备用机制
- 向用户显示当前状态
处理边缘情况
处理边缘情况
- 支付时间比预期长
- 用户在支付期间关闭浏览器
- 网络连接问题
- 报价在创建前过期
- 余额不足场景
使用外部 ID
使用外部 ID
- 为每个 ramp 提供唯一的
externalId - 防止重复交易
- 实现幂等重试
- 简化对账
存储交易数据
存储交易数据
- 立即保存 ramp ID
- 存储所有响应数据
- 记录状态转换
- 保留支付证明
- 归档已完成的 ramps
测试 Ramps
沙盒测试
在沙盒中,使用 faker 端点:生产测试
从小额开始:- 使用最小值测试(50 等值)
- 验证完整流程端到端
- 检查 webhook 交付
- 确认收据生成
- 验证会计
- 扩展到更大金额
常见问题
创建后可以取消 ramp 吗?
创建后可以取消 ramp 吗?
只有在尚未收到支付的情况下。一旦现金入账完成,ramp 将处理到完成。
如果用户不支付怎么办?
如果用户不支付怎么办?
如果未支付,ramps 在 24 小时后过期并移动到 EXPIRED 状态。您无需采取任何操作。
区块链确认需要多长时间?
区块链确认需要多长时间?
- Polygon: 2-5 分钟(128 个区块确认)
- Solana: 1-2 分钟
- Ethereum: 10-15 分钟
- Tron: 1-3 分钟
可以为多个 ramps 使用相同的报价吗?
可以为多个 ramps 使用相同的报价吗?
不可以。每个 ramp 需要自己的报价。报价是单次使用的,并在 30 秒后过期。
如果处理期间加密货币价格发生变化会怎样?
如果处理期间加密货币价格发生变化会怎样?
当您使用报价创建 ramp 时,汇率被锁定。用户收到确切的报价金额。