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

加密货币 API 沙盒是支付或钱包 API 的隔离副本,可在其中创建钱包、发送交易并接收通知,而无需转移真实资金。切换到生产环境只需更改凭证和网络设置。不同服务商对该词的用法并不一致:有的模拟余额,有的则指向公共区块链测试网。
本指南说明两者的区别,介绍从首个密钥到首个 Webhook 的测试计划,并列出上线前需要核实的内容。
要点速览
- 沙盒是由服务商运行的 API 隔离副本。测试网则是一条独立的公共区块链,其中的代币没有价值。许多团队会同时使用两者。
- 测试完整流程:创建钱包、充值、发送交易、确认到账、接收 Webhook,并处理一次失败。
- 大多数付款漏洞都隐藏在 Webhook 中。请测试签名校验、重试、重复事件以及乱序事件。
- 切勿在测试代码中复用生产密钥或钱包机密,也不要让测试地址泄漏到生产配置中。
- 上线前,比较测试环境与正式环境的支持网络、资产、手续费行为和确认时间。
什么是加密货币 API 沙盒?
这个词的使用比较随意,因此先给出一个可操作的定义。在 API 设计中,模拟(mock)返回预先设定的响应。完整的沙盒则不同:Redocly 将其描述为有状态的隔离环境,它会保存记录、执行业务逻辑,并允许您测试破坏性操作,而不会冒生产数据的风险。这一区别对加密货币很重要。如果您创建了一个钱包,再查询其余额,模拟只会返回它被告知要返回的内容,而沙盒会记得您创建的那个钱包。
加密货币沙盒通常做三件事:
- 发放独立的测试 API 密钥,这些密钥无法动用真实资金。
- 允许您创建账户或钱包,并为其设置测试余额。
- 模拟生产环境中会出现的交易和通知,或将其转发到测试网。
沙盒、测试网与开发网的对比
区块链测试网与 API 沙盒并不是同一回事。测试网是一个独立的公共网络,模仿主网运行,使开发者无需承担真实加密货币的风险即可进行实验。以太坊文档将测试网类比为预发布服务器,并指出 Sepolia 是应用开发推荐的默认测试网,而且大多数人都可以从水龙头免费获得测试网 ETH。
测试网代币本应没有真实价值。如果有人要求您为此付费,请将其视为危险信号。
| API 沙盒 | 测试网或开发网 | |
|---|---|---|
| 由谁运行 | API 服务商 | 区块链社区或基金会 |
| 模拟的对象 | 服务商的端点、账户、余额和通知 | 区块链本身 |
| 资金 | 可按需充值的模拟余额 | 来自水龙头、没有价值的代币 |
| 速度与可靠性 | 通常可预测 | 可能缓慢、拥堵或被重置 |
| 最适合 | 针对 API 的应用集成测试 | 测试链上行为、合约与手续费逻辑 |
实际的结论是:沙盒测试的是您与 API 的集成,而测试网测试的是您的代码在一条真实(尽管没有价值)的链上如何运行。每条链都记录了各自的测试网:Tron 提供 Shasta 和 Nile,而比特币开发者指南说明了测试网与 regtest 模式。
如何分步测试加密货币付款?
各服务商的细节有所不同,但下面的顺序几乎在任何地方都适用。
1. 获取测试凭证
创建账户,并查找独立的测试或沙盒模式,或单独的基础 URL。优秀的服务商会为每个环境发放不同的密钥,使测试密钥在生产环境中直接失效。从编写第一行代码起,就应将密钥保存在环境变量或密钥管理器中,而不是放在代码仓库里。
如果服务商使用签名请求(如基于 HMAC 的 API),请只实现一次签名函数,并用已知的输入和输出为其编写单元测试。签名字符串中一个错位的换行符,可能会产生看似认证失败的错误,并让您排查数小时。
2. 创建钱包
调用钱包创建端点,并记录返回的内容:地址、标识符,以及服务商持有私钥还是交给您。最后一点决定了您的安全模型,请将其写下来。请在计划支持的每条网络上创建多个钱包,因为不同链的地址格式各异,这是校验错误的常见来源。
3. 充入测试资产
这一步是各沙盒差异最大的环节。有些允许您通过 API 调用或控制台按钮为余额入账。另一些则要求您从相应测试网的公共水龙头申请代币,然后发送到您的新地址。水龙头可能会受到速率限制或被领空,因此请在当天较早时申请资金,而不要在演示前十分钟才去申请。保留一个资金充足的测试钱包作为您的“银行”,并从中为较小的钱包充值。

4. 发送交易
从最简单的情况开始:在您自己的两个钱包之间转移原生代币。然后再转向代币转账(ERC-20、BEP-20 或 TRC-20 类代币),因为代币会增加合约调用、不同的手续费机制,并且在某些链上还会使用单独的手续费币种。记录 API 返回的交易 ID,并与该测试网区块浏览器显示的内容进行比对。
5. 验证结果
一笔交易有多种状态,您的应用应当对这些状态进行建模,而不是只设置一个“已付款”标记:
- 已提交: 已被 API 接受,但尚未上链。
- 待确认: 已在交易池中被看到,或已进入区块,但确认数不足。
- 已确认: 确认数已满足您的风险承受水平。
- 失败或被丢弃: 被拒绝、Gas 耗尽、被替换,或从未被打包。
在进行收入报告时,应统计已结算的付款,而非尝试次数。链上确认同样适用此原则:处于待确认状态的交易尚不构成收入。
如何测试 Webhook 与失败路径?
Webhook 将付款 API 从需要轮询的对象,变成了在资金到账时主动通知您的对象。它们也是集成最容易出问题的地方,因为发送方控制着时机。
端到端接收通知

您需要一个能够访问您开发机器的公网 HTTPS 地址。隧道工具或预发布服务器均可。注册该地址,向一个受监控的地址发送测试交易,然后确认您的处理程序收到了包含预期字段的事件。我们关于使用 Webhook 自动处理充值的文章涵盖了常见结构。
Webhook 测试清单
- 校验签名。拒绝签名不匹配的请求,并通过篡改已签名的值来测试它。使用 Chaingateway 时,已签名的值是
txid,因此还应将金额和收款方与您的预期进行核对。个人密钥文章对此有所说明。 - 测试幂等性。将同一事件投递两次。您的系统必须只为用户入账一次,因此请在采取行动之前,保存事件或交易 ID 并进行检查。
- 测试乱序投递。“已确认”事件可能早于“待确认”事件到达。不要让较旧的状态覆盖较新的状态。
- 测试缓慢或失败的接收端。返回错误或挂起 30 秒,观察服务商的行为。Chaingateway 不会自动重试:失败的通知会被列出,您需要为每一条请求重新发送。
- 快速确认。尽快返回成功状态码,并将繁重的工作放入队列。耗时过长的处理程序会导致超时和重复投递。
- 宕机后重放。关闭接收端,发送交易,然后重新开启。请明确知道如何恢复错过的事件,例如从失败通知列表或交易历史中获取。
值得主动制造的失败场景
请在沙盒中有意制造故障,这正是沙盒的用途:
- 发送超过钱包余额的金额。
- 发送到格式错误的地址,或属于其他网络的地址。
- 向没有原生代币支付手续费的钱包发送代币。
- 设置过低的手续费,并观察交易停滞。
- 发送低于最低付款门槛的极小金额。
- 支付比账单略少或略多的金额。少付和多付在加密货币结账中很常见,因此请决定您的政策,并进行测试。
沙盒与生产环境有何不同?
沙盒是一种模型,而模型会遗漏一些东西。在切换到正式密钥之前,请明确检查以下方面。
| 方面 | 需要检查的内容 |
|---|---|
| 确认时间 | 与主网相比,测试网的区块可能更快、更慢或不规则。请用小额资金在正式链上重新测量。 |
| 手续费 | 测试网的手续费通常微不足道或固定。请确认 API 在主网上如何估算手续费,以及网络拥堵时会发生什么。 |
| 支持的资产 | 测试模式下可用的代币可能是正式环境的子集,反之亦然。请逐一确认您在产品中列出的每种资产。 |
| 速率限制 | 不同环境和不同套餐下的限制可能不同。请在您实际拥有的限制范围内进行负载测试。 |
| 数据结构 | 检查字段名称、小数精度以及金额单位(最小单位还是整币)在各环境之间是否一致。 |
| Webhook 投递 | 生产环境的流量会带来重试、突发和更大的负载。请用真实流量重新运行幂等性测试。 |
| 合规与限额 | 有些服务商在测试模式下会放宽验证。请在上线前确认适用的规则。 |
然后在生产环境上进行一次金丝雀付款:通过完整流程转入一笔小额真实资金,从钱包创建到 Webhook,再到账本记录。这只需花费几分或几美元,却能发现任何沙盒都无法暴露的配置错误。
测试时如何保护密钥?
测试环境往往是坏习惯的起点,而这些习惯会带入生产环境。
- 为每个环境使用独立的密钥。为其取清晰的名称,并在密钥管理器中使用不同的前缀,使混淆一目了然。
- 将机密信息排除在代码仓库之外。使用环境变量、保险库或 CI 的密钥存储。如果密钥曾经混入提交记录,请扫描提交历史并轮换密钥。
- 切勿将真实钱包导入测试环境。如果某个助记词或私钥控制着真实资金,它就不应出现在测试脚本、截图或聊天消息中。
- 限制可以查看密钥的人。参与您集成工作的外包人员和代理机构,应只获得测试密钥。
- 将基础 URL 固定在配置中,而不是写在代码里。添加启动检查,如果测试密钥与正式 URL 配对(或反之),则拒绝运行。
- 演示之后轮换密钥。在屏幕上或录屏中展示过的密钥,应视为已泄露。
事先应检查哪些局限?
在选定某个服务商的沙盒之前,请先提出几个直截了当的问题:
- 测试模式覆盖哪些网络?如果您的产品需要以太坊、Tron 和比特币,请确认三者都支持,而不仅仅是其中一个。
- 支持哪些代币标准和资产?原生币很容易。稳定币和 NFT 则是缺口最容易出现的地方。
- 如何获得测试资金,是否有上限?水龙头的限制和每日最高额度,决定了您的团队能以多快的速度迭代。
- 它是否持久化状态?有状态的沙盒允许您构建多步骤场景,而无状态的模拟则不能。
- 测试模式下是否提供 Webhook,您能否按需触发它们?
- 它的稳定性如何?测试网可能会被重置或弃用,从而清除您的测试钱包。请将搭建过程写成脚本,以便在数分钟内重建。
如果您还需要了解哪类服务商适合哪类工作,我们对区块链 API 及各类型适用场景的比较是很好的参考。
如何在 Chaingateway 上测试?
Chaingateway 不提供带模拟余额的独立沙盒。其 API 文档描述的是在公共测试网上测试:在请求中添加请求头 X-Network: testnet,主网则不添加。两个环境使用相同的端点、密钥和响应结构。每条链都有自己的测试网,列于支持的网络页面:
| 链 | 测试网 |
|---|---|
| 以太坊 | Sepolia |
| Tron | Nile |
| BNB Smart Chain | BSC 测试网 |
| Polygon | Amoy |
| Arbitrum | Arbitrum Sepolia |
| 比特币 | Testnet3 |
| Solana | Devnet |
首次测试只需四个请求:创建地址、从链的水龙头充值、注册 Webhook,然后发送一笔转账:
# 1. Create an address on Sepoliacurl -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 itcurl -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 页面。

如果测试通过后想要构建的内容有所启发,我们的区块链 API 使用场景概览是接下来很好的阅读材料。
实用的测试计划是什么样的?
可将以下内容作为每次发布的单页清单。
- 搭建: 测试密钥保存在密钥管理器中,基础 URL 位于配置中,签名函数已通过单元测试。
- 钱包: 每条受支持的网络至少创建两个钱包,并记录地址格式。
- 充值: 为一个主测试钱包充值,并用脚本为其他钱包充值。
- 正常路径: 原生代币转账,然后是代币转账,每笔都在区块浏览器上核对。
- Webhook: 签名校验、重复投递、乱序事件、接收端宕机。
- 失败场景: 余额不足、网络错误的地址、缺少手续费币种、手续费过低、少付、多付。
- 状态模型: 您的数据库能够清晰区分已提交、待确认、已确认和失败。
- 负载: 在套餐速率限制内的突发交易。
- 安全审查: 测试代码中不含生产机密,日志中不含密钥和助记词。
- 金丝雀: 在宣布上线之前,通过完整流程完成一笔小额真实付款。
常见问题
加密货币 API 沙盒与测试网是一回事吗?
不是。沙盒是由 API 服务商运行的隔离环境,拥有自己的密钥和测试余额。测试网则是一条独立的公共区块链,其代币没有价值。有些沙盒构建在测试网之上,有些则是完全模拟的,因此请确认您使用的是哪一种。
我能否在不花真钱的情况下测试加密货币付款?
可以。使用服务商的沙盒,或使用带有水龙头代币的公共测试网。两者都允许您免费创建钱包、发送转账并触发通知。最后请用一笔很小的真实交易收尾,因为正式环境的手续费和时机可能与测试条件有所不同。
如何在本地机器上测试 Webhook?
通过隧道工具将本地服务器暴露出去,或部署一个带 HTTPS 的预发布端点,然后为通知注册该地址。向受监控的地址发送测试交易,并确认您的处理程序能够接收、校验并处理事件。随后用重复投递和延迟投递重复测试。
从沙盒切换到生产环境之前应检查什么?
通过配置切换为正式密钥和基础 URL,然后核实支持的网络与资产、手续费估算、确认数和速率限制。重新运行 Webhook 幂等性测试,并发送一笔金丝雀付款,以确认完整流程在真实资金下可以正常运行。
资料来源
推荐阅读
准备好自己动手构建了吗? 获取你的 API key — 7 天试用,无需信用卡 — 或查看 区块链 API 获取完整的 endpoint 参考。