StableOps

Playground

在浏览器里走一遍“建单 → 钱包支付 → 确认 → 完成”的真实测试网流程。

下方组件会在浏览器里直接用你粘贴的 sandbox API key 调用 StableOps API(@stableops/api-sdk):先创建 sandbox 支付单,再使用 @stableops/wallet-sdk 唤起浏览器钱包,在 Base Sepolia 测试网上发送一笔真实 USDC 转账。线性走完 4 步即可观察订单从 created 推进到 finalized

  1. 创建支付单:走 POST /v1/payment-orders,带 Idempotency-Key。返回里的 payment_instructions 是分配给本订单的候选入金地址列表。
  2. 钱包链上支付:前端调用 sendWalletPayment,由钱包发送 ERC-20 transfer 到订单地址。
  3. 等待 confirmed:不再手动推进;轮询订单,等待 scanner + confirmations watcher 自动把订单推进到 confirmed
  4. 等待 finalized:继续轮询,等待达到finalized阈值;此时 ledger 与 webhook 才会标记终态。

在组件里粘贴你的 sandbox API key 即可开始。key 只保存在你的浏览器。请使用测试网资产,不要在 playground 中发送主网资金。每一步都会把最新订单快照和活动日志展开在下方,方便对照真实请求/响应结构。

请使用 sandbox key;它只保存在你的浏览器并直接发送给 API。生产环境请在服务端调用 API,不要在浏览器中调用。

开启时会在建单前为本订单导入一个确定性 burner 地址,适合 org 还没有任何收款地址的场景。如果你只想使用自己管理的地址,请关闭。

真实钱包交易,使用所选测试网;不要用主网资金。领测试币:Base Sepolia · USDC (testnet)

  1. idle
    1. 创建支付单
  2. idle
    2. 用钱包发起链上支付
  3. idle
    3. 等待 detected
  4. idle
    4. 等待 confirmed
  5. idle
    5. 等待 finalized
Activity log
(empty)
本 Playground 的源码托管在 GitHub:github.com/StableOps/stableops-playground,欢迎下载、试用与反馈。

实际生产里发生了什么

第 1 步与真实使用一致:你的服务通过 SDK 或 REST 调用 POST /v1/payment-orders。第 2 步就是 真链上的入金事件:浏览器钱包把稳定币转到订单地址;scanner 按 (organizationId, environment, chain, address) 分桶拉日志、归一化后落 normalized_events,并把匹配上的订单推进到 detected。第 3、4 步由 confirmations watcher 周期性比较 head - block_number 与每条链的 CONFIRMED_AFTER / FINALIZED_AFTER 阈值后自动推进,并对同一笔事务的 receipt.blockHash 与初次记录做 reorg 校验。

Playground 现在直接在浏览器里用你提供的 sandbox API key 调 API(@stableops/api-sdk);链上支付、检测、确认和终局都走真实链路。另外 Playground 仅运行在测试网,因此 Solana/TRON 的钱包支付直连公共 RPC 节点(Solana Devnet、TRON Nile)。这些节点免费但偶尔可能限流;若支付构造或广播失败,稍候重试即可。生产环境中收银台的主网 RPC 经 StableOps 商业节点代理转发,没有这个问题。

接入清单

  • Idempotency-Key 头去重。同一 merchant_order_id 提交两次永远拿到同一笔订单。
  • 本 playground 为演示用途,整段跑在浏览器里且只用 sandbox key。生产环境请把 API key 放在你的后端、切勿在浏览器暴露生产 key;前端只用 @stableops/wallet-sdk 发起钱包转账。
  • 订阅 payment.detected / payment.confirmed / payment.finalized / payment.reverted webhook;每条 delivery 在 worker 端用 IN_PROGRESS 抢锁,重复投递不会重复触发你的处理逻辑。
  • 接收 webhook 时用 @stableops/api-sdk/webhooks 验证签名头,避免重放。

继续阅读 快速开始 拿到完整代码示例。

这篇文档怎么样?

最后更新

本页内容