---
title: "通过 x402 发送第一个付费请求"
description: "向 x402.erpc.global 发送请求，从 402 响应中读取价格，用 x402 客户端付款，然后获得 RPC 结果和结算凭证。"
canonical: "https://erpc.global/zh/doc/x402/quickstart/"
locale: "zh"
---

# 通过 x402 发送第一个付费请求

本指南以一个 Solana 请求为例，走完 x402 的整个流程：读取价格、付款，然后获得附带结算凭证的结果。其他 15 条链的用法相同，只是路径不同。

您需要准备一个钱包和一个 x402 客户端。钱包中需持有 Solana 上的 USDC，或 Base 上的 USDC 或 EURC；x402 客户端负责读取 402 响应、用您的钱包签署付款，并带上付款重新发送请求。关于 x402 客户端，请参阅 [x402.org](https://x402.org/) 上的 x402 文档。

## 1. 发送请求

不附带付款，直接发送 RPC 请求：

```bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
```

响应为 402 Payment Required。响应头给出方法和价格：

```http
HTTP/2 402
x-payment-required: eyJ4NDAyVmVyc2lvbiI6Mi…
x-rpc-methods: getSlot
x-rpc-weight: 1000
x-rpc-price-usd: 0.001
```

响应体在 `accepts` 中列出支付选项，每种可用于支付该请求的稳定币对应一项。`amount` 以稳定币的最小单位计，因此 1000 即 0.001 USDC，或 0.001 EURC：

```json
{
  "error": { "code": "payment_required", "message": "Payment required", "request_id": "…" },
  "x402Version": 2,
  "accepts": [
    { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "amount": "1000", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", … },
    { "scheme": "exact", "network": "eip155:8453", "amount": "1000", "asset": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42", … }
  ],
  "pricing": { "methods": ["getSlot"], …, "weight": 1000, "rawWeight": 42, …, "price": "$0.001", … },
  …
}
```

## 2. 用 x402 客户端付款

将 402 响应交给您的 x402 客户端。客户端会选择您的钱包能够支付的选项，按该金额签署一笔付款，并将其编码为 X-Payment 请求头的值。这笔付款无需 SOL 或 ETH 来支付网络手续费。

## 3. 附上付款，再次发送请求

再次发送相同的请求体，并将付款放入 X-Payment 请求头：

```bash
curl -i https://x402.erpc.global/v1/solana-mainnet \
  --header 'Content-Type: application/json' \
  --header 'X-Payment: <PAYMENT_PAYLOAD>' \
  --data '{"jsonrpc":"2.0","id":1,"method":"getSlot"}'
```

请勿修改请求体。价格根据请求体计算，因此如果修改后的请求体价格不同，付款就不再与之匹配，请求会收到 `price_mismatch`。

付款完成验证和结算后，RPC 结果随之返回，结算凭证位于 X-Payment-Response 响应头中：

```http
HTTP/2 200
x-payment-response: <RECEIPT>
```

```json
{ "jsonrpc": "2.0", "id": 1, "result": … }
```

一笔付款只能支付一个请求。如果再次发送同一笔付款，会被拒绝并返回 402 `payment_invalid` 或 409 `duplicate_payment`，请求也不会被再次转发。

## 响应

如果 x402.erpc.global 在要求付款之前就返回错误，该请求不收取任何费用。

| 状态码 | `error.code` | 含义 |
| --- | --- | --- |
| 402 | `payment_required` | 未附带付款。响应体中给出价格和支付选项。 |
| 402 | `payment_invalid` | 付款未通过验证。请签署新的付款，然后再次发送请求。 |
| 402 | `price_mismatch` | 付款与该请求的 402 响应所提供的任何选项都不匹配，例如价格不符。 |
| 402 | `payment_amount_too_low` | 金额低于 x402.erpc.global 结算的最低付款额。 |
| 402 | `settlement_failed` | 收到的结算结果为失败。响应会再次提供支付选项。 |
| 409 | `duplicate_payment` | 该付款已被使用。 |
| 400 | `method_not_supported`、`invalid_request` | 该路径不出售此方法，或不接受该请求体。不收取任何费用。 |
| 413 | `batch_too_large` | 批量请求超过 100 次调用。不收取任何费用。 |
| 500 | `configuration_error` | 该路径目前无法处理请求。不收取任何费用。 |
| 503 | `payment_unavailable` | 目前无法提供任何支付选项。不收取任何费用。请在 Retry-After 给出的秒数之后重试。 |
| 503 | `service_busy` | 服务繁忙，同一时间的请求过多。不收取任何费用。请在 Retry-After 给出的秒数之后重试。 |
| 502 | `settlement_failed` | 结算结果未知：付款可能已经完成，且未附带结算凭证。在签署新的付款之前，请先在 Solana 或 Base 上确认您签署的付款是否已经完成。 |
| 502、504 | `upstream_error`、`upstream_timeout` | 付款已结算，但链没有响应，或未能及时响应。结算凭证仍会附上。再次发送请求需要一笔新的付款。 |

在 Solana 上，读取范围过大的调用（例如对大型程序发送不带过滤条件的 `getProgramAccounts`）会在要求付款之前收到 HTTP 200 和一个 JSON-RPC 错误，因此不收取任何费用。

## 后续步骤

- [x402 如何为请求计价](https://erpc.global/zh/doc/x402/pricing/)：单次调用的价格、\$0.001 的最低收费和批量请求。
- [x402 概览](https://erpc.global/zh/doc/x402/overview/)：每条链的路径和支付选项。
- [OpenAPI 文档](https://x402.erpc.global/doc)：每个路径的请求和响应格式。
