Skip to main content
X402 включает HTTP, SDK, подписи, Facilitator и ончейн-транзакции. При устранении проблем с подписями или расчётами рекомендуется послойно проверять в порядке «публичный вход -> ответ 402 -> SDK payment handler -> ончейн settlement». В этом руководстве описаны способы проверки каждого слоя и перечислены распространённые ошибки.

Проверка публичного входа

Объявление возможностей Facilitator:
Если возвращаются facilitator, supportedKinds и конечные точки протокола, это означает, что метаданные возможностей в норме. Обнаружение API-ресурсов выведено из эксплуатации; вызывайте целевой API напрямую и ориентируйтесь на ответ 402 в реальном времени. Поддерживаемые возможности Facilitator:
Если возвращается kinds, это означает, что вход Facilitator работает нормально.

Проверка 402 accepts

Отправьте неаутентифицированный запрос, за который не будет списана плата:
Проверьте, содержит ли возвращаемый accepts сеть, которую вы хотите использовать. network — это идентификатор CAIP-2:
  • eip155:8453 + exact (Base)
  • eip155:8453 + upto (Base, постоплатный учёт)
  • eip155:1187947933 + exact (SKALE)
  • solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp + exact (Solana)
Если целевая сеть отсутствует, это означает, что данный API или текущая среда не настроены с соответствующим способом приёма платежей X402.

Запуск расширенных инструментов проверки X402Client

Репозиторий X402Client предоставляет расширенные инструменты проверки, которые можно использовать для подтверждения выбора ответа 402, генерации подписи, paid retry и ончейн settlement. Для них требуются funded wallet, RPC, приватный ключ и зависимости для разработки. Для обычной интеграции в бизнес-приложение рекомендуется в первую очередь использовать TypeScript или Python SDK; запускайте эти инструменты только при необходимости локализовать проблемы с подписями или ончейн-расчётами. Адрес репозитория: https://github.com/AceDataCloud/X402Client
Base:
SKALE:
Solana:
Инструменты проверки обычно выводят:
  1. Ответ 402 первого запроса.
  2. Выбранное payment requirement.
  3. Сводку подписанного PAYMENT-SIGNATURE.
  4. HTTP-статус и тело ответа после повторной попытки.
  5. Ончейн settlement transaction или причину ошибки Facilitator в случае сбоя.
Не отправляйте приватные ключи или полный PAYMENT-SIGNATURE в системы логирования или тикеты. Пример результатов проверки публичного API:
Пояснения:
  • SKALE exact, Base exact, Solana exact и Base upto все завершили paid retry от HTTP 402 до HTTP 200.
  • Ончейн-транзакция SKALE exact доступна для просмотра в SKALE explorer, а сумма расчёта составляет 0.095215 USDC.
  • Ончейн-транзакция Base exact доступна для просмотра в BaseScan, а сумма расчёта составляет 95215 atomic USDC.
  • Лимит подписи Base upto составляет 95215 atomic USDC, но фактический ончейн settlement составляет 3 atomic USDC, что означает списание по фактическому использованию при постоплатном учёте.
  • Для пути Solana подтверждены paid retry и вывод модели. Публичный RPC может ограничивать частоту запросов; если требуется строгое ончейн-сверение, используйте собственный Solana RPC или подтвердите подпись транзакции по записям расчётов на стороне платформы.

SDK smoke test

Расширенные инструменты проверки используются для проверки подписей и ончейн-расчётов. Со стороны приложения также следует выполнить SDK smoke test, чтобы подтвердить, что код приложения может автоматически обрабатывать 402 через payment handler. Ниже показаны только ключевые фрагменты; для полного кода необходимо дополнить wallet, provider и import. TypeScript:
Python:
Если модель возвращает фиксированную строку согласно требованиям, это означает, что SDK, payment handler, Gateway, Facilitator и целевой API соединены в единую цепочку. Два приведённых выше smoke test используют SKALE exact. В настоящее время SKALE предоставляет только exact, расчёт производится по фиксированной сумме из котировки 402 и не снижается в зависимости от фактического потребления token. Чат-дополнения относятся к сценариям с тарификацией по token; при боевом подключении рекомендуется использовать Base и передавать preferScheme: 'upto', чтобы расчёт производился по фактическому потреблению. Результаты выполнения программы SDK smoke test:
Пояснение результатов:
  • TypeScript SDK автоматически обрабатывает 402, подпись и повторную попытку через createX402PaymentHandler, в итоге получая ADC_TS_SDK_X402_OK.
  • Python SDK выполняет ту же цепочку через create_x402_payment_handler, в итоге получая ADC_PY_SDK_X402_OK.
  • Оба smoke test используют SKALE payer 0xd0479FA9FD8C678303d477433d24C15e3723CC1C.
  • Возвращаемый объект Python SDK — это dict; в примере для чтения содержимого можно использовать res["choices"][0]["message"]["content"].

E2E оплаты заказа

Для оплаты заказа используется платформенный API platform.acedata.cloud, которому требуется токен платформенного аккаунта. Полная цепочка выглядит так: создание Pending-заказа, POST /api/v1/orders/{order_id}/pay/ вызывает 402, затем выполняется повторная попытка с PAYMENT-SIGNATURE. Пример результата проверки оплаты небольшого заказа:
Следующая запись транзакции является историческим образцом фактического тестирования по старой политике; сумма и хеш транзакции сохранены без изменений. Новые X402-заказы больше не имеют скидки по способу оплаты; используйте amount из текущего ответа 402 в качестве основания для подписи и оплаты.
Пояснение результатов:
  • После создания заказа его статус — Pending, а цена — 1.26.
  • Первый запрос pay/ возвращает HTTP 402; в accepts есть Base exact и Solana exact, суммы обеих составляют 1200000 atomic USDC.
  • После повторной попытки с Base PAYMENT-SIGNATURE возвращается HTTP 200, статус заказа меняется на Finished, а pay_way — X402.
  • После декодирования PAYMENT-RESPONSE отображаются success=True, network=base и тот же хеш транзакции.
  • На BaseScan статус транзакции — 1, сумма перевода — 1200000 atomic USDC, то есть 1.2 USDC.
  • Цена создания 1.26 была оплачена в период старой политики скидок на оплату X402, итоговая сумма подписи и расчёта составила 1.2 USDC.
Если при оплате заказа отсутствует Authorization: Bearer {platform_token} или заказ не принадлежит текущему аккаунту, сбой произойдёт на уровне прав доступа платформы; это отличается от безаккаунтного X402 API при прямом вызове x402.acedata.cloud.

Распространённые ошибки

Контрольный список Base upto

upto в настоящее время предоставляется только в Base (eip155:8453). SKALE предоставляет только exact. Поскольку подпись upto привязывает больше параметров EVM typed data, при подключении следует особенно убедиться, что поля реального времени в ответе 402 полностью совпадают с клиентской подписью.
Если Base upto возвращает invalid_upto_evm_payload_invalid_signature, прежде всего проверьте:
  1. extra.chainId в записи eip155:8453 + upto, возвращённой API (должен быть 8453).
  2. extra.facilitatorAddress, возвращённый API.
  3. Адрес Base upto facilitator, возвращаемый https://facilitator.acedata.cloud/supported.
  4. Permit2 domain, spender, контракт USDC и аккаунт подписи.
  5. Выполнил ли кошелёк approve Permit2 для Base USDC.
Digest подписи upto одновременно привязывает Permit2 domain, chain ID, spender, адрес получателя, адрес facilitator и validAfter. При несовпадении любого из них Facilitator восстановит неверный signer, вследствие чего вернёт invalid signature. Если всё это совпадает, но всё равно возвращается 402, следующим шагом проверьте Permit2 allowance; при отсутствии разрешения возвращается PERMIT2_ALLOWANCE_REQUIRED.

Сохранение информации проверки

Одно полное подтверждение должно сохранять как минимум:
  • API path и сводку тела запроса;
  • выбранные network и scheme;
  • maxAmountRequired;
  • адрес кошелька payer;
  • итоговый HTTP-статус;
  • вывод модели или ID задачи в ответе;
  • ссылку на settlement transaction;
  • Gateway trace ID или ID записи об использовании платформы.
Не сохраняйте приватные ключи, полный PAYMENT-SIGNATURE, полную EIP-712 signature или мнемоническую фразу.

Структурированные ошибки оплаты

Сбои X402 после подписи возвращают в extensions.acedatacloud.paymentError стабильный code, безопасные параметры интерполяции, этап и флаг возможности повтора. Для диагностики в первую очередь используйте эту структуру, не анализируйте английский error верхнего уровня и не просите пользователя предоставить подпись кошелька или исходный текст on-chain simulation.
  • charged: false:проверка была явно отклонена до settlement, в этот раз списание не было инициировано.
  • Без charged:результат неизвестен или уже перешёл на этап settlement, сначала проверьте заказ и on-chain status, запрещено напрямую повторять оплату.
  • settlement_pending:пока не повторяйте оплату, сначала обновите заказ или обратитесь в поддержку.
  • Нераспознанный code:обрабатывайте как payment_failed и сохраняйте публичный технический код для поиска службой поддержки.