← 博客
10 分钟阅读
|
发布于
|
更新于

加密货币 API 沙盒:如何安全测试付款

什么是加密货币 API 沙盒、它与测试网有何不同,以及从首个密钥到首个 Webhook 的逐步测试计划,并在上线前检查哪些内容。本文还说明如何测试 Webhook 与失败场景、如何保护测试密钥,并给出发布前的测试清单,以及沙盒与生产环境的差异。

章节
C
Chaingateway Team
区块链专家

审核: Maurice Sobiera

测试与生产付款平台的等距示意图

加密货币 API 沙盒是支付或钱包 API 的隔离副本,可在其中创建钱包、发送交易并接收通知,而无需转移真实资金。切换到生产环境只需更改凭证和网络设置。不同服务商对该词的用法并不一致:有的模拟余额,有的则指向公共区块链测试网。

本指南说明两者的区别,介绍从首个密钥到首个 Webhook 的测试计划,并列出上线前需要核实的内容。

要点速览

  • 沙盒是由服务商运行的 API 隔离副本。测试网则是一条独立的公共区块链,其中的代币没有价值。许多团队会同时使用两者。
  • 测试完整流程:创建钱包、充值、发送交易、确认到账、接收 Webhook,并处理一次失败。
  • 大多数付款漏洞都隐藏在 Webhook 中。请测试签名校验、重试、重复事件以及乱序事件。
  • 切勿在测试代码中复用生产密钥或钱包机密,也不要让测试地址泄漏到生产配置中。
  • 上线前,比较测试环境与正式环境的支持网络、资产、手续费行为和确认时间。

什么是加密货币 API 沙盒?

这个词的使用比较随意,因此先给出一个可操作的定义。在 API 设计中,模拟(mock)返回预先设定的响应。完整的沙盒则不同:Redocly 将其描述为有状态的隔离环境,它会保存记录、执行业务逻辑,并允许您测试破坏性操作,而不会冒生产数据的风险。这一区别对加密货币很重要。如果您创建了一个钱包,再查询其余额,模拟只会返回它被告知要返回的内容,而沙盒会记得您创建的那个钱包。

加密货币沙盒通常做三件事:

  1. 发放独立的测试 API 密钥,这些密钥无法动用真实资金。
  2. 允许您创建账户或钱包,并为其设置测试余额。
  3. 模拟生产环境中会出现的交易和通知,或将其转发到测试网。

沙盒、测试网与开发网的对比

区块链测试网与 API 沙盒并不是同一回事。测试网是一个独立的公共网络,模仿主网运行,使开发者无需承担真实加密货币的风险即可进行实验。以太坊文档将测试网类比为预发布服务器,并指出 Sepolia 是应用开发推荐的默认测试网,而且大多数人都可以从水龙头免费获得测试网 ETH。

测试网代币本应没有真实价值。如果有人要求您为此付费,请将其视为危险信号。

API 沙盒测试网或开发网
由谁运行API 服务商区块链社区或基金会
模拟的对象服务商的端点、账户、余额和通知区块链本身
资金可按需充值的模拟余额来自水龙头、没有价值的代币
速度与可靠性通常可预测可能缓慢、拥堵或被重置
最适合针对 API 的应用集成测试测试链上行为、合约与手续费逻辑

实际的结论是:沙盒测试的是您与 API 的集成,而测试网测试的是您的代码在一条真实(尽管没有价值)的链上如何运行。每条链都记录了各自的测试网:Tron 提供 Shasta 和 Nile,而比特币开发者指南说明了测试网与 regtest 模式。

如何分步测试加密货币付款?

各服务商的细节有所不同,但下面的顺序几乎在任何地方都适用。

1. 获取测试凭证

创建账户,并查找独立的测试或沙盒模式,或单独的基础 URL。优秀的服务商会为每个环境发放不同的密钥,使测试密钥在生产环境中直接失效。从编写第一行代码起,就应将密钥保存在环境变量或密钥管理器中,而不是放在代码仓库里。

如果服务商使用签名请求(如基于 HMAC 的 API),请只实现一次签名函数,并用已知的输入和输出为其编写单元测试。签名字符串中一个错位的换行符,可能会产生看似认证失败的错误,并让您排查数小时。

2. 创建钱包

调用钱包创建端点,并记录返回的内容:地址、标识符,以及服务商持有私钥还是交给您。最后一点决定了您的安全模型,请将其写下来。请在计划支持的每条网络上创建多个钱包,因为不同链的地址格式各异,这是校验错误的常见来源。

3. 充入测试资产

这一步是各沙盒差异最大的环节。有些允许您通过 API 调用或控制台按钮为余额入账。另一些则要求您从相应测试网的公共水龙头申请代币,然后发送到您的新地址。水龙头可能会受到速率限制或被领空,因此请在当天较早时申请资金,而不要在演示前十分钟才去申请。保留一个资金充足的测试钱包作为您的“银行”,并从中为较小的钱包充值。

测试资金来源的表格:API 入账、公共水龙头、水龙头限制、银行钱包

4. 发送交易

从最简单的情况开始:在您自己的两个钱包之间转移原生代币。然后再转向代币转账(ERC-20、BEP-20 或 TRC-20 类代币),因为代币会增加合约调用、不同的手续费机制,并且在某些链上还会使用单独的手续费币种。记录 API 返回的交易 ID,并与该测试网区块浏览器显示的内容进行比对。

5. 验证结果

一笔交易有多种状态,您的应用应当对这些状态进行建模,而不是只设置一个“已付款”标记:

  • 已提交: 已被 API 接受,但尚未上链。
  • 待确认: 已在交易池中被看到,或已进入区块,但确认数不足。
  • 已确认: 确认数已满足您的风险承受水平。
  • 失败或被丢弃: 被拒绝、Gas 耗尽、被替换,或从未被打包。

在进行收入报告时,应统计已结算的付款,而非尝试次数。链上确认同样适用此原则:处于待确认状态的交易尚不构成收入。

如何测试 Webhook 与失败路径?

Webhook 将付款 API 从需要轮询的对象,变成了在资金到账时主动通知您的对象。它们也是集成最容易出问题的地方,因为发送方控制着时机。

端到端接收通知

四步通知测试流程:公网 HTTPS 地址、注册地址、发送测试交易、确认事件

您需要一个能够访问您开发机器的公网 HTTPS 地址。隧道工具或预发布服务器均可。注册该地址,向一个受监控的地址发送测试交易,然后确认您的处理程序收到了包含预期字段的事件。我们关于使用 Webhook 自动处理充值的文章涵盖了常见结构。

Webhook 测试清单

  • 校验签名。拒绝签名不匹配的请求,并通过篡改已签名的值来测试它。使用 Chaingateway 时,已签名的值是 txid,因此还应将金额和收款方与您的预期进行核对。个人密钥文章对此有所说明。
  • 测试幂等性。将同一事件投递两次。您的系统必须只为用户入账一次,因此请在采取行动之前,保存事件或交易 ID 并进行检查。
  • 测试乱序投递。“已确认”事件可能早于“待确认”事件到达。不要让较旧的状态覆盖较新的状态。
  • 测试缓慢或失败的接收端。返回错误或挂起 30 秒,观察服务商的行为。Chaingateway 不会自动重试:失败的通知会被列出,您需要为每一条请求重新发送。
  • 快速确认。尽快返回成功状态码,并将繁重的工作放入队列。耗时过长的处理程序会导致超时和重复投递。
  • 宕机后重放。关闭接收端,发送交易,然后重新开启。请明确知道如何恢复错过的事件,例如从失败通知列表或交易历史中获取。

值得主动制造的失败场景

请在沙盒中有意制造故障,这正是沙盒的用途:

  • 发送超过钱包余额的金额。
  • 发送到格式错误的地址,或属于其他网络的地址。
  • 向没有原生代币支付手续费的钱包发送代币。
  • 设置过低的手续费,并观察交易停滞。
  • 发送低于最低付款门槛的极小金额。
  • 支付比账单略少或略多的金额。少付和多付在加密货币结账中很常见,因此请决定您的政策,并进行测试。

沙盒与生产环境有何不同?

沙盒是一种模型,而模型会遗漏一些东西。在切换到正式密钥之前,请明确检查以下方面。

方面需要检查的内容
确认时间与主网相比,测试网的区块可能更快、更慢或不规则。请用小额资金在正式链上重新测量。
手续费测试网的手续费通常微不足道或固定。请确认 API 在主网上如何估算手续费,以及网络拥堵时会发生什么。
支持的资产测试模式下可用的代币可能是正式环境的子集,反之亦然。请逐一确认您在产品中列出的每种资产。
速率限制不同环境和不同套餐下的限制可能不同。请在您实际拥有的限制范围内进行负载测试。
数据结构检查字段名称、小数精度以及金额单位(最小单位还是整币)在各环境之间是否一致。
Webhook 投递生产环境的流量会带来重试、突发和更大的负载。请用真实流量重新运行幂等性测试。
合规与限额有些服务商在测试模式下会放宽验证。请在上线前确认适用的规则。

然后在生产环境上进行一次金丝雀付款:通过完整流程转入一笔小额真实资金,从钱包创建到 Webhook,再到账本记录。这只需花费几分或几美元,却能发现任何沙盒都无法暴露的配置错误。

测试时如何保护密钥?

测试环境往往是坏习惯的起点,而这些习惯会带入生产环境。

  • 为每个环境使用独立的密钥。为其取清晰的名称,并在密钥管理器中使用不同的前缀,使混淆一目了然。
  • 将机密信息排除在代码仓库之外。使用环境变量、保险库或 CI 的密钥存储。如果密钥曾经混入提交记录,请扫描提交历史并轮换密钥。
  • 切勿将真实钱包导入测试环境。如果某个助记词或私钥控制着真实资金,它就不应出现在测试脚本、截图或聊天消息中。
  • 限制可以查看密钥的人。参与您集成工作的外包人员和代理机构,应只获得测试密钥。
  • 将基础 URL 固定在配置中,而不是写在代码里。添加启动检查,如果测试密钥与正式 URL 配对(或反之),则拒绝运行。
  • 演示之后轮换密钥。在屏幕上或录屏中展示过的密钥,应视为已泄露。

事先应检查哪些局限?

在选定某个服务商的沙盒之前,请先提出几个直截了当的问题:

  1. 测试模式覆盖哪些网络?如果您的产品需要以太坊、Tron 和比特币,请确认三者都支持,而不仅仅是其中一个。
  2. 支持哪些代币标准和资产?原生币很容易。稳定币和 NFT 则是缺口最容易出现的地方。
  3. 如何获得测试资金,是否有上限?水龙头的限制和每日最高额度,决定了您的团队能以多快的速度迭代。
  4. 它是否持久化状态?有状态的沙盒允许您构建多步骤场景,而无状态的模拟则不能。
  5. 测试模式下是否提供 Webhook,您能否按需触发它们?
  6. 它的稳定性如何?测试网可能会被重置或弃用,从而清除您的测试钱包。请将搭建过程写成脚本,以便在数分钟内重建。

如果您还需要了解哪类服务商适合哪类工作,我们对区块链 API 及各类型适用场景的比较是很好的参考。

如何在 Chaingateway 上测试?

Chaingateway 不提供带模拟余额的独立沙盒。其 API 文档描述的是在公共测试网上测试:在请求中添加请求头 X-Network: testnet,主网则不添加。两个环境使用相同的端点、密钥和响应结构。每条链都有自己的测试网,列于支持的网络页面:

链测试网
以太坊Sepolia
TronNile
BNB Smart ChainBSC 测试网
PolygonAmoy
ArbitrumArbitrum Sepolia
比特币Testnet3
SolanaDevnet

首次测试只需四个请求:创建地址、从链的水龙头充值、注册 Webhook,然后发送一笔转账:

Terminal window
# 1. Create an address on Sepolia
curl -X POST https://app.chaingateway.io/api/v2/ethereum/addresses \
-H "Authorization: Bearer $CHAINGATEWAY_TOKEN" \
-H "X-Network: testnet" \
-H "Content-Type: application/json" \
-d '{"password": "use-a-strong-test-password"}'
# 2. Fund the address from a Sepolia faucet, then register a webhook for it
curl -X POST https://app.chaingateway.io/api/v2/ethereum/webhooks \
-H "Authorization: Bearer $CHAINGATEWAY_TOKEN" \
-H "X-Network: testnet" \
-H "Content-Type: application/json" \
-d '{"to": "0xYourNewAddress", "url": "https://your-tunnel.example/hooks", "type": "ETH", "reference": "test-1"}'

第一个调用的响应中包含新地址。对于 Webhook,type 用于指明资产类别。在以太坊上,取值为 ETH、ERC20 和 ERC721;其他链使用各自的名称,例如 Tron 上的 TRC20。API 参考列出了这些取值。除 Solana 外,所有受支持的链都提供 Webhook,因此请通过轮询交易的方式测试 Solana。

在您设置个人密钥后,Chaingateway 会以 X-Signature 请求头为 Webhook 签名,并且它不会自行重试失败的通知。两者都值得在测试网上进行验证。套餐起价为 Plus 每月 €49,Pro 每月 €99,Premium 每月 €249,Enterprise 每月 €499。按年计费时分别为 €490、€990、€2,490 和 €4,990。每个套餐都提供 7 天免费试用,无需银行卡,也无需 KYC。详情请参阅价格页面、Blockchain API 和 Chaingateway Webhooks 页面。

Chaingateway 首页截图:面向加密支付与 Webhook 的统一区块链 API,覆盖 7 条链

如果测试通过后想要构建的内容有所启发,我们的区块链 API 使用场景概览是接下来很好的阅读材料。

实用的测试计划是什么样的?

可将以下内容作为每次发布的单页清单。

  1. 搭建: 测试密钥保存在密钥管理器中,基础 URL 位于配置中,签名函数已通过单元测试。
  2. 钱包: 每条受支持的网络至少创建两个钱包,并记录地址格式。
  3. 充值: 为一个主测试钱包充值,并用脚本为其他钱包充值。
  4. 正常路径: 原生代币转账,然后是代币转账,每笔都在区块浏览器上核对。
  5. Webhook: 签名校验、重复投递、乱序事件、接收端宕机。
  6. 失败场景: 余额不足、网络错误的地址、缺少手续费币种、手续费过低、少付、多付。
  7. 状态模型: 您的数据库能够清晰区分已提交、待确认、已确认和失败。
  8. 负载: 在套餐速率限制内的突发交易。
  9. 安全审查: 测试代码中不含生产机密,日志中不含密钥和助记词。
  10. 金丝雀: 在宣布上线之前,通过完整流程完成一笔小额真实付款。

常见问题

加密货币 API 沙盒与测试网是一回事吗?

不是。沙盒是由 API 服务商运行的隔离环境,拥有自己的密钥和测试余额。测试网则是一条独立的公共区块链,其代币没有价值。有些沙盒构建在测试网之上,有些则是完全模拟的,因此请确认您使用的是哪一种。

我能否在不花真钱的情况下测试加密货币付款?

可以。使用服务商的沙盒,或使用带有水龙头代币的公共测试网。两者都允许您免费创建钱包、发送转账并触发通知。最后请用一笔很小的真实交易收尾,因为正式环境的手续费和时机可能与测试条件有所不同。

如何在本地机器上测试 Webhook?

通过隧道工具将本地服务器暴露出去,或部署一个带 HTTPS 的预发布端点,然后为通知注册该地址。向受监控的地址发送测试交易,并确认您的处理程序能够接收、校验并处理事件。随后用重复投递和延迟投递重复测试。

从沙盒切换到生产环境之前应检查什么?

通过配置切换为正式密钥和基础 URL,然后核实支持的网络与资产、手续费估算、确认数和速率限制。重新运行 Webhook 幂等性测试,并发送一笔金丝雀付款,以确认完整流程在真实资金下可以正常运行。

资料来源

推荐阅读

我们如何撰写这些文章

准备好自己动手构建了吗? 获取你的 API key — 7 天试用,无需信用卡 — 或查看 区块链 API 获取完整的 endpoint 参考。

C
Chaingateway Team
区块链专家

Chaingateway 团队致力于为全球开发者简化区块链集成。