---
title: 沙盒
description: Coinetic 沙盒：与生产环境相同的加密支付 API、支付页面和 Webhook，无需真实资金。可通过按钮或自动化测试模拟 USDT、USDC 等测试付款。
url: https://coinetic.money/zh/docs/sandbox/
lang: zh-Hans
---

# 沙盒

一个不连接真实区块链网络的独立 Coinetic 实例。API、签名、支付页面、状态以及带重试的 Webhook 与生产环境完全一致 —— 只是付款为模拟。

| 项目 | 地址 |
| --- | --- |
| API | `https://sandbox.coinetic.money` |
| 后台 | [https://sandbox.coinetic.money/merchant](https://sandbox.coinetic.money/merchant) |

沙盒密钥与生产密钥相互独立。沙盒密钥在生产环境中无效，反之亦然。

## 通过按钮模拟付款

在沙盒支付页面中，选择币种后会出现「沙盒：测试支付」区块：

| 按钮 | 效果 |
| --- | --- |
| 精确支付 | 全额付款：立即变为 `detected`，约 3 秒后变为 `paid` |
| 少付 10% | 支付 90% 金额 → `underpaid` |
| 补付余款 | （少付之后）支付剩余部分 → `paid` |
| 多付 10% | 支付 110% → `overpaid` |
| 支付一半 | 支付 50%；再点一次 —— 第二个一半 → `paid` |

## 在自动化测试中模拟付款

同样的场景，通过请求触发。令牌是 `checkout_url` 中 `#t=` 之后的部分。必须先选好币种（在页面上选择，或使用同一令牌调用 `POST /v1/invoices/{id}/select`）。

```http
POST /sandbox/v1/invoices/{id}/pay
Authorization: Bearer <checkout_url 中 #t= 之后的令牌>
Content-Type: application/json

{"scenario": "exact"}
```

`scenario` 的取值：`exact`、`underpay`、`overpay`、`half`、`rest`。

沙盒中的退款只需一条命令即可执行 —— `POST /v1/refunds/{id}/simulate`（详见[「退款」](https://coinetic.money/zh/docs/refunds/)一节）。

## 与生产环境的区别

- 账单和 Webhook 中 `livemode: false`。**生产环境的商店必须拒绝此类账单和事件** —— 这样即使误接了沙盒，也不会发出商品。
- Webhook 和 `return_url` 可以指向 `http://localhost` 和 `http://127.0.0.1`。公网地址则与生产环境一样，只允许 `https://` 和 443 端口。
- AML 检查结果始终为“通过”。
- 波动性资产的汇率为来自交易所的真实汇率。

## 上线前需要跑通的场景

- 精确支付、少付后补付、多付、分两次各付一半。
- 账单过期：为同一订单创建新账单。
- 伪造和过期的 Webhook 会被拒绝；重复的 Webhook 不会导致重复交付。
- 在不停机的情况下轮换 Webhook 签名密钥并更换 API 密钥。
