> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# XHuoAPI x402 Руководство по интеграции платежей

> x402 集成指南 - XHuoAPI

x402 — это протокол платежей на основе стандарта HTTP 402 Payment Required, который позволяет вызывающей стороне завершать расчет на блокчейне одновременно с отправкой API-запроса. Он идеально подходит для сценариев по оплате за вызовы между автоматизированными программами, AI Agent и микросервисами. С помощью этого руководства вы сможете программно осуществлять оплату заказов XHuoAPI в своей системе, реализуя опыт «запроса и оплаты».

Официальные материалы:

* Обзор документа x402: [https://docs.cdp.coinbase.com/x402/docs/overview](https://docs.cdp.coinbase.com/x402/docs/overview)
* Примеры с открытым исходным кодом x402: [https://github.com/coinbase/x402](https://github.com/coinbase/x402)

Этот документ предназначен для разработчиков, которым необходимо интегрировать платежные возможности платформы XHuoAPI x402 в свой бизнес, и описывает полный процесс от подготовки окружения до завершения вызова платежа, а также предоставляет примеры кода на Axios, Fetch, Python requests и httpx. Основные моменты:

* Платежная цепочка завершается в **Base основной сети**, актив используется **USDC**;
* Необходимо использовать **EVM приватный ключ** кошелька для генерации заголовка подписи `X-PAYMENT`;
* Все API находятся на домене `https://api.xhuoapi.ai`, заголовок `Authorization` должен содержать **Platform Token**.

***

## I. Подготовительные работы

### 1. Просмотр заказа и запись информации о получении

Войдите в консоль [https://api.xhuoapi.ai](https://api.xhuoapi.ai), в списке заказов или на странице деталей заказа вы можете увидеть заказы, которые необходимо оплатить. В деталях заказа будет отображено:

* ID заказа (например, `7744945e-5e77-4dcc-a9c4-528692d17b34`);
* Адрес получения `pay_to` (также будет возвращен в ответе 402, рекомендуется ориентироваться на информацию на странице).

Пожалуйста, запишите ID заказа и подтвердите адрес `pay_to`, так как он потребуется для подписи в дальнейшем.

### 2. Подготовка платежного кошелька и средств

* Подготовьте EVM-кошелек, поддерживающий основную сеть Base, и экспортируйте используемый приватный ключ;
* Пополните основной сеть Base достаточным количеством **USDC** (сумма платежа указывается в минимальных единицах с 6 знаками после запятой);
* x402 Facilitator оплатит сетевые сборы, кошелек для платежей должен содержать только достаточное количество USDC;
* Приватный ключ используется только для локальной подписи, пожалуйста, храните его в безопасности, избегая его раскрытия в браузере или ненадежной среде.

### 3. Создание Platform Token

Platform Token используется для вызова API платформы и аналогичен токену пользователя, используемому в браузере после входа в систему, но не имеет срока действия. Пожалуйста, выполните следующие шаги для его создания:

1. Откройте страницу консоли [https://api.xhuoapi.ai/console/platform-tokens](https://api.xhuoapi.ai/console/platform-tokens);
2. Нажмите «Создать токен», заполните информацию по запросу и создайте токен;
3. Скопируйте сгенерированный токен (например, `platform-v1-xxxx`) и сохраните его как `platform_token`.

![platform-token](https://cdn.xhuoapi.ai/6g86oz.png)

Во всех последующих вызовах API заголовок должен содержать:

```
Authorization: Bearer {platform_token}
```

### 4. Запрос базовой информации

* Базовый домен API: `https://api.xhuoapi.ai`
* Путь запроса на оплату: `/api/v1/orders/{order_id}/pay/`
* Запросы и ответы используют JSON, кодировка — UTF-8.

***

## II. Обзор процесса оплаты

1. **Инициация запроса на оплату**: первый `POST` запрос без заголовка `X-PAYMENT`, который вызывает платформу для возврата 402 Payment Required;
2. **Чтение требований к оплате**: анализируйте массив `accepts` в ответе 402, подтверждая, что `network` равен `base`, `asset` равен USDC, а `payTo` совпадает с данными на странице заказа;
3. **Генерация `X-PAYMENT`**: используйте приватный ключ платежного кошелька, требования из тела ответа, а также информацию о домене EIP-712, возвращенную Facilitator, для генерации подписи (обычно с помощью официального SDK);
4. **Повторная попытка с подписью**: добавьте заголовок `X-PAYMENT` в запрос по тому же пути, после успешной проверки платформа вернет 200;
5. **Анализ результата**: прочитайте заголовок ответа `X-PAYMENT-RESPONSE`, чтобы получить хэш транзакции на блокчейне, фактическую сумму списания и другую информацию для сверки.

***

## III. Примеры интеграции

### 1. Первый запрос (инициация 402)

```http theme={null}
POST https://api.xhuoapi.ai/api/v1/orders/{order_id}/pay/
Authorization: Bearer {platform_token}
Content-Type: application/json

{
  "pay_way": "X402"
}
```

Типичный ответ 402 (порядок полей может немного изменяться):

```json theme={null}
{
  "error": "Payment required for this order.",
  "accepts": [
    {
      "scheme": "exact",
      "network": "base",
      "asset": "0x833589fcd6edb6e08f4c7c32d4f71b54b268aa0e",
      "maxAmountRequired": "1250000",
      "payTo": "0x302afdd980aaefca3afa8df7222a6002774f6724",
      "extra": {
        "eip712": { "...": "..." }
      }
    }
  ],
  "paywall": { ... }
}
```

Объяснение ключевых полей:

* `network`: должно быть `base` (основная сеть Base);
* `asset`: адрес контракта Base USDC (пример — официальный контракт основной сети);
* `maxAmountRequired`: необходимая сумма USDC в атомарных единицах для данного платежа (1 USDC = 1,000,000 атомарных единиц);
* `payTo`: адрес получения платформы, должен совпадать с данными на странице деталей заказа;
* `extra`: информация о домене EIP-712, необходимая для подписи и т.д.

### 2. Генерация `X-PAYMENT`

Обычная практика — использовать официальный SDK (например, `x402-js`, `x402-fetch`, `x402.clients` и т.д.):

1. Преобразуйте приватный ключ платежного кошелька в объект аккаунта;
2. Запишите данные `accepts` из ответа 402, выберите вариант оплаты с `network == "base"`;
3. Вызовите функцию подписи, предоставляемую SDK, для генерации строки `X-PAYMENT` в формате Base64 (не требуется прямое подключение клиента к facilitator; бэкенд платформы будет отвечать за вызов facilitator для завершения verify/settle);
4. Рекомендуется проверить, находится ли `maxAmountRequired` в допустимом диапазоне, и в случае превышения уведомить пользователя о необходимости пополнения.

Если необходимо реализовать вручную, обратитесь к официальной документации x402, чтобы построить структуру EIP-712 на основе информации о домене, предоставленной в `extra.eip712`, и затем выполнить подпись.

### 3. Повторная попытка с подписью

```http theme={null}
POST https://api.xhuoapi.ai/api/v1/orders/{order_id}/pay/
Authorization: Bearer {platform_token}
Content-Type: application/json
X-PAYMENT: {base64_signed_payload}

{
  "pay_way": "X402"
}
```

Если платеж успешен, статус ответа будет 200, а тело ответа вернет обновленную информацию о заказе и дополнительно:

```
X-PAYMENT-RESPONSE: eyJ0cmFuc2FjdGlvbiI6IjB4...==
```

`X-PAYMENT-RESPONSE` можно декодировать с помощью функции SDK, чтобы получить хэш транзакции на блокчейне, платежную сеть, адрес плательщика и другие данные для учета или отображения.

***

## IV. Примеры кода на нескольких языках

Следующие примеры предполагают, что переменные окружения или конфигурационные файлы были внедрены:

* `ACE_PLATFORM_TOKEN`：Токен платформы；
* `ACE_X402_ORDER_ID`：ID заказа；
* `ACE_X402_PRIVATE_KEY`：Приватный ключ платежного кошелька (с префиксом `0x`).

### 1. Axios（TypeScript）

```ts theme={null}
import axios from "axios";
import { Hex } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { buildPaymentHeader, decodePaymentResponse } from "x402-js";

const baseURL = "https://api.xhuoapi.ai";
const orderId = process.env.ACE_X402_ORDER_ID!;
const platformToken = process.env.ACE_PLATFORM_TOKEN!;
const privateKey = process.env.ACE_X402_PRIVATE_KEY as Hex;

const account = privateKeyToAccount(privateKey);
const api = axios.create({
  baseURL,
  headers: {
    Authorization: `Bearer ${platformToken}`,
    "Content-Type": "application/json",
  },
});

async function payOrder() {
  const payPath = `/api/v1/orders/${orderId}/pay/`;

  const initial = await api.post(
    payPath,
    { pay_way: "X402" },
    { validateStatus: () => true }
  );
  if (initial.status !== 402) {
    throw new Error(`неожиданный статус ${initial.status}`);
  }

  const requirement = initial.data.accepts.find(
    (item: any) => item.network === "base"
  );
  if (!requirement) {
    throw new Error("нет базового требования");
  }

  const paymentHeader = await buildPaymentHeader({
    account,
    requirement,
  });

  const final = await api.post(
    payPath,
    { pay_way: "X402" },
    { headers: { "X-PAYMENT": paymentHeader } }
  );

  if (final.status >= 400) {
    throw new Error(`платеж x402 не удался: ${final.status} ${final.statusText}`);
  }
  const receipt = decodePaymentResponse(final.headers["x-payment-response"]);
  console.log("чек x402", receipt);
}

payOrder().catch(console.error);
```

### 2. Fetch（JavaScript）

```ts theme={null}
import { wrapFetchWithPayment, decodePaymentResponse } from "x402-fetch";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.ACE_X402_PRIVATE_KEY!);
const platformToken = process.env.ACE_PLATFORM_TOKEN!;
const orderId = process.env.ACE_X402_ORDER_ID!;
const fetchWithPayment = wrapFetchWithPayment(fetch, account);

async function payOrder() {
  const url = `https://api.xhuoapi.ai/api/v1/orders/${orderId}/pay/`;

  const response = await fetchWithPayment(url, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${platformToken}`,
    },
    body: JSON.stringify({ pay_way: "X402" }),
  });

  if (!response.ok) {
    const errorBody = await response.text();
    throw new Error(`платеж x402 не удался: ${response.status} ${errorBody}`);
  }

  const receipt = decodePaymentResponse(
    response.headers.get("x-payment-response")!
  );
  console.log("чек x402", receipt);
}

payOrder().catch(console.error);
```

### 3. Python requests

```python theme={null}
import os
from eth_account import Account
from x402.clients.requests import x402_requests
from x402.clients.base import decode_x_payment_response

order_id = os.environ["ACE_X402_ORDER_ID"]
platform_token = os.environ["ACE_PLATFORM_TOKEN"]
account = Account.from_key(os.environ["ACE_X402_PRIVATE_KEY"])

session = x402_requests(
    account,
    payment_requirements_selector=lambda accepts, **_: next(
        req for req in accepts if req.network == "base" and req.scheme == "exact"
    ),
)

response = session.post(
    f"https://api.xhuoapi.ai/api/v1/orders/{order_id}/pay/",
    json={"pay_way": "X402"},
    headers={"Authorization": f"Bearer {platform_token}"},
)

response.raise_for_status()
receipt_header = response.headers.get("X-PAYMENT-RESPONSE")
if receipt_header:
    print("чек x402:", decode_x_payment_response(receipt_header))
```

### 4. Python httpx（异步）

```python theme={null}
import asyncio
import os
from eth_account import Account
from x402.clients.httpx import x402HttpxClient
from x402.clients.base import decode_x_payment_response

async def pay_order() -> None:
    order_id = os.environ["ACE_X402_ORDER_ID"]
    platform_token = os.environ["ACE_PLATFORM_TOKEN"]
    account = Account.from_key(os.environ["ACE_X402_PRIVATE_KEY"])

    async with x402HttpxClient(
        account=account,
        base_url="https://api.xhuoapi.ai",
        headers={"Authorization": f"Bearer {platform_token}"},
        payment_requirements_selector=lambda accepts, **_: next(
            req for req in accepts if req.network == "base"
        ),
    ) as client:
        response = await client.post(
            f"/api/v1/orders/{order_id}/pay/",
            json={"pay_way": "X402"},
        )
        response.raise_for_status()
        receipt_header = response.headers.get("X-PAYMENT-RESPONSE")
        if receipt_header:
            print("чек x402:", decode_x_payment_response(receipt_header))

asyncio.run(pay_order())
```

> Пример только демонстрирует ключевые вызовы, в производственной среде необходимо добавить обработку исключений, стратегии повторных попыток, журналы и контроль безопасности.

***

## Пять, проверка после успешной оплаты

* **Проверка в консоли**：Перейдите на страницу деталей заказа `https://api.xhuoapi.ai/console/orders/{order_id}`. Если на странице отображается «Оплата успешна» или статус заказа изменился на оплаченный/завершенный, это означает, что расчет в цепочке завершен.
* **Проверка API**：Вызовите `GET https://api.xhuoapi.ai/api/v1/orders/{order_id}/` с заголовком `Authorization: Bearer {platform_token}` и проверьте поле `state` в ответе (значения `PAID` или `FINISHED` означают успешную оплату).
* **Заголовок ответа**：В ответе на успешный платеж прочитайте `X-PAYMENT-RESPONSE`, из которого можно извлечь хэш транзакции в цепочке как окончательное подтверждение; рекомендуется сохранить эту информацию в системных журналах для сверки.

***

## Шесть, устранение распространенных проблем

* **По-прежнему возвращает 402**：Убедитесь, что адрес платежа имеет достаточное количество USDC в основной сети, проверьте, не превышает ли `maxAmountRequired` баланс кошелька или пользовательский лимит.
* **Ошибка подписи**：Убедитесь, что приватный ключ имеет префикс `0x`; при подписании строго используйте `extra` (домен EIP-712) и `payTo` из ответа, не изменяйте порядок полей.
* **Несоответствие сети**：В `accepts` может быть несколько требований, выберите вариант с `network === "base"`.
* **Отсутствует `X-PAYMENT-RESPONSE`**：Это означает, что платеж не был фактически списан, можно повторно инициировать запрос на основе ошибки в теле ответа; если возникли проблемы с сетью, попробуйте позже.
* **Недействительный токен платформы**：Убедитесь, что токен не был удален и начинается с префикса `platform-v1-`; если интерфейс возвращает 401, можно заново сгенерировать его в консоли.

***

## Семь, дополнительная помощь

* Онлайн-документация и часто задаваемые вопросы: навигация «Документация» в верхней части консоли платформы.
* Подать заявку и поддержка клиентов: [https://api.xhuoapi.ai/support](https://api.xhuoapi.ai/support)
* Сообщество: Discord [https://discord.gg/f9GRuKCmRc](https://discord.gg/f9GRuKCmRc), X (Twitter) [https://x.com/XHuoAPI](https://x.com/XHuoAPI)
* Другие каналы: электронная почта `office@xhuoapi.ai`, `office@germey.tech`; адрес компании 651 N Broad St, Suite 201, Middletown, Delaware, USA; для поддержки WeChat смотрите последние QR-коды на странице поддержки.
* Обратная связь и предложения: мы будем рады услышать ваши требования по улучшению через любой из вышеуказанных каналов.
