---
title: "ส่ง request แรกของคุณแบบชำระเงินผ่าน x402"
description: "ส่ง request ไปยัง x402.erpc.global อ่านราคาใน response 402 ชำระด้วย x402 client แล้วรับผลลัพธ์ RPC พร้อม settlement receipt"
canonical: "https://erpc.global/th/doc/x402/quickstart/"
locale: "th"
---

# ส่ง request แรกของคุณแบบชำระเงินผ่าน x402

คู่มือนี้จะพาคุณส่ง request ของ Solana หนึ่งรายการผ่าน x402 ตั้งแต่อ่านราคา ชำระเงิน จนได้คำตอบพร้อม settlement receipt ส่วนอีก 15 เชนก็ใช้วิธีเดียวกันที่ path ของแต่ละเชน

คุณต้องมี wallet ที่มี USDC บน Solana หรือ USDC หรือ EURC บน Base และต้องมี x402 client ซึ่งเป็นซอฟต์แวร์ที่อ่าน response 402 ลงนามการชำระเงินด้วย wallet ของคุณ แล้วส่ง request อีกครั้งพร้อมการชำระเงินนั้น ดูข้อมูลเกี่ยวกับ x402 client ได้ในเอกสารของ x402 ที่ [x402.org](https://x402.org/)

## 1. ส่ง request

ส่ง RPC request โดยยังไม่ชำระเงิน:

```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 โดย header จะระบุเมธอดและราคา:

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

body แสดงตัวเลือกการชำระเงินใน `accepts` หนึ่งรายการต่อ stablecoin แต่ละตัวที่ใช้ชำระ request นี้ได้ ส่วน `amount` เป็นจำนวนในหน่วยที่เล็กที่สุดของ stablecoin ดังนั้น 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 client

ส่ง response 402 ให้ x402 client ของคุณ จากนั้น client จะเลือกตัวเลือกที่ wallet ของคุณชำระได้ ลงนามการชำระเงินตามจำนวนนั้น แล้ว encode ให้อยู่ในรูปแบบของ header X-Payment การชำระเงินนี้ไม่ต้องใช้ SOL หรือ ETH สำหรับค่าธรรมเนียมเครือข่าย

## 3. ส่ง request อีกครั้งพร้อมการชำระเงิน

ส่ง body เดิมอีกครั้ง โดยใส่การชำระเงินใน header 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"}'
```

ใช้ body เดิมโดยไม่แก้ไข ราคาคำนวณจาก body ดังนั้นหาก body ที่แก้ไขแล้วมีราคาต่างไป การชำระเงินจะไม่ตรงกับราคานั้นอีกต่อไป และระบบจะตอบกลับด้วย `price_mismatch`

เมื่อการชำระเงินผ่านการตรวจสอบและ settle แล้ว คำตอบ RPC จะกลับมาพร้อม settlement receipt ใน header X-Payment-Response:

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

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

การชำระเงินหนึ่งครั้งใช้ได้กับ request เดียว หากส่งการชำระเงินเดิมซ้ำ จะถูกปฏิเสธด้วย 402 `payment_invalid` หรือ 409 `duplicate_payment` และ request จะไม่ถูกส่งต่ออีก

## รหัสสถานะการตอบกลับ

request ที่ x402.erpc.global ตอบกลับด้วยข้อผิดพลาดก่อนขอให้ชำระเงินจะไม่มีค่าใช้จ่าย

| สถานะ | `error.code` | สิ่งที่เกิดขึ้น |
| --- | --- | --- |
| 402 | `payment_required` | ไม่ได้ส่งการชำระเงินมา body ระบุราคาและตัวเลือกการชำระเงิน |
| 402 | `payment_invalid` | การชำระเงินไม่ผ่านการตรวจสอบ ให้ลงนามการชำระเงินใหม่แล้วส่ง request อีกครั้ง |
| 402 | `price_mismatch` | การชำระเงินไม่ตรงกับตัวเลือกใด ๆ ที่ response 402 ของ request นี้เสนอ เช่น ราคาไม่ตรง |
| 402 | `payment_amount_too_low` | จำนวนเงินต่ำกว่าการชำระเงินขั้นต่ำที่ x402.erpc.global settle ได้ |
| 402 | `settlement_failed` | ระบบได้รับแจ้งว่าการ settle ล้มเหลว response จะเสนอตัวเลือกการชำระเงินอีกครั้ง |
| 409 | `duplicate_payment` | การชำระเงินนี้ถูกใช้ไปแล้ว |
| 400 | `method_not_supported`, `invalid_request` | path นั้นไม่ได้ขายเมธอดนี้ หรือไม่รับ body นี้ ไม่มีการเรียกเก็บเงิน |
| 413 | `batch_too_large` | batch มีมากกว่า 100 call ไม่มีการเรียกเก็บเงิน |
| 500 | `configuration_error` | path นั้นยังรับ request ไม่ได้ในขณะนี้ ไม่มีการเรียกเก็บเงิน |
| 503 | `payment_unavailable` | ขณะนี้ไม่สามารถเสนอตัวเลือกการชำระเงินได้ ไม่มีการเรียกเก็บเงิน รอตามจำนวนวินาทีที่ระบุใน Retry-After แล้วลองใหม่ |
| 503 | `service_busy` | มี request พร้อมกันมากเกินไป ไม่มีการเรียกเก็บเงิน รอตามจำนวนวินาทีที่ระบุใน Retry-After แล้วลองใหม่ |
| 502 | `settlement_failed` | ไม่ทราบผลของการ settle การชำระเงินอาจสำเร็จไปแล้ว และไม่มี receipt แนบมา ก่อนลงนามการชำระเงินใหม่ ให้ตรวจสอบบน Solana หรือ Base ว่าการชำระเงินที่คุณลงนามไว้สำเร็จหรือไม่ |
| 502, 504 | `upstream_error`, `upstream_timeout` | การชำระเงิน settle แล้ว แต่เชนไม่ตอบกลับ หรือไม่ตอบกลับภายในเวลาที่กำหนด receipt ยังแนบมาด้วย การส่ง request อีกครั้งต้องใช้การชำระเงินใหม่ |

บน Solana นั้น หากส่ง call ที่จะอ่านข้อมูลมากเกินไป เช่น `getProgramAccounts` แบบไม่ใส่ตัวกรองกับโปรแกรมขนาดใหญ่ ระบบจะตอบกลับด้วย HTTP 200 พร้อมข้อผิดพลาด JSON-RPC ก่อนมีการขอให้ชำระเงิน จึงไม่มีค่าใช้จ่าย

## ขั้นตอนถัดไป

- [x402 คิดราคา request อย่างไร](https://erpc.global/th/doc/x402/pricing/): ราคาของหนึ่ง call, ราคาขั้นต่ำ \$0.001 และ batch
- [ภาพรวมของ x402](https://erpc.global/th/doc/x402/overview/): path ของแต่ละเชนและตัวเลือกการชำระเงิน
- [เอกสาร OpenAPI](https://x402.erpc.global/doc): รูปแบบของ request และ response ในทุก path
