Перейти к содержимому

Приём криптоплатежей через REST API: полное руководство

20 мая 2026 г. 6 мин чтения Claude C. Claude C.
Приём криптоплатежей через REST API — руководство для разработчиков Paymos

Ошибки чаще возникают не в HTTP-запросе, а на границе двух систем. Постоянный номер заказа, отдельные ключи, проверенная подпись и защита от повторного исполнения сохраняют единое состояние заказа при сбоях связи.

Кратко

REST API для криптоплатежей нужен бизнесу с собственной системой заказов. Сервер создаёт счёт с постоянным external_order_id, Paymos возвращает готовую страницу оплаты, а подписанный вебхук сообщает о дальнейшем состоянии. Надёжная интеграция разделяет Payment и Payout, тестовый и рабочий режимы и исполняет один подтверждённый заказ не более одного раза.

REST API для криптоплатежей соединяет собственную систему заказов с Paymos. Сервер создаёт счёт, сохраняет его связь с заказом и направляет покупателя на оплату. После подтверждения обработчик получает подписанное уведомление и меняет состояние заказа.

Качество интеграции проверяется сбоями. Повтор запроса не должен создавать новый счёт, задержка вебхука — терять оплату, а повтор события — выдавать товар второй раз. Поэтому проектирование начинается с границы учёта, а не с копирования первого примера HTTP-запроса.

Когда бизнесу нужен REST API?

REST API подходит компаниям, которые ведут товары, доступы и статусы заказов на собственном сервере. Такой вариант даёт серверу возможность создавать, получать и отменять счета, читать балансы и управлять предусмотренными операциями вывода через отдельные учётные данные.

Если менеджеру нужно отправить разовый счёт, проще использовать платёжную ссылку. Магазину на поддерживаемой CMS стоит сначала проверить официальный плагин. Host-to-Host API оправдан, когда бизнесу действительно нужна программная связь между счётом, внутренним заказом и дальнейшим исполнением.

Ключевое условие — сервер остаётся единственным местом, где хранится связь заказа и счёта.

Иначе платёжный контур не сможет восстановить контекст после сбоя или повторного запроса.

Как спроектировать границу между заказом и Paymos?

Система бизнеса остаётся источником данных о товаре, клиенте и результате исполнения. Paymos ведёт платёжный счёт и его состояние. Связующим полем служит постоянный external_order_id, который создаёт система заказов.

Рядом с заказом сохраните идентификатор счёта Paymos и запись о выполненном результате. Не используйте номер отдельной HTTP-попытки в качестве внешнего номера заказа. Тогда повтор запроса восстанавливает связь, а не создаёт новый объект без понятного владельца.

Такая граница позволяет повторять сетевые операции, не меняя бизнес-смысл заказа и не теряя его владельца.

Изменения товара и клиента остаются внутри системы бизнеса; Paymos не подменяет этот учёт.

Как создать счёт и безопасно повторить запрос?

Передайте external_order_id при создании счёта. Если ответ не дошёл из-за сетевого сбоя, повторите запрос с тем же значением. Paymos вернёт существующий счёт; заголовок Idempotency-Key для создания счёта не нужен.

Смена внешнего номера означает новый заказ. Генерируйте его один раз в собственной системе и не меняйте между попытками. После ответа сохраните идентификатор счёта Paymos до того, как покажете покупателю страницу оплаты.

Значение должно сохраняться и после перезапуска сервиса: его нельзя вычислять заново для каждой попытки создания счёта.

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

Как разделить ключи и среды?

Merchant API использует HMAC-SHA256, а не Bearer-токен. Подпись формирует доверенный сервер с общим секретом. Секрет нельзя помещать в браузерный JavaScript, мобильное приложение, открытый репозиторий или журналы аналитики.

Для Payment и Payout действуют разные учётные данные. Тестовый и рабочий режимы также используют отдельные ключи при одинаковом наборе методов API. Назовите секреты по назначению и среде, а сервису создания счетов выдайте только доступ Payment.

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

Это обязательная граница доступа.

Так каждый сервис получает только те полномочия, которые нужны его конкретной операции.

Когда переводить заказ в оплаченное состояние?

Сначала проверьте подпись вебхука. Затем дождитесь выполнения политики подтверждений, которая зависит от сети и суммы. Единого срока для каждого блокчейна и любой суммы нет, поэтому таймер на стороне бизнеса не заменяет состояние счёта.

После проверки найдите заказ по сохранённой связи и атомарно зафиксируйте исполнение. Если запись уже существует, верните успешный ответ без повторной выдачи. Переход покупателя на страницу успеха не является основанием для изменения заказа.

Связывайте изменение заказа только с подтверждённым состоянием счёта, а не со временем после его создания.

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

Как построить обработчик вебхука?

Paymos передаёт X-Webhook-Signature в формате t={timestamp},v1={hmac_hex}. Обработчик пересчитывает HMAC-SHA256 на секрете вебхука и сравнивает подписи способом, устойчивым к атакам по времени, до любого изменения данных.

Смена секрета предусматривает переходный период, когда могут приниматься текущий и предыдущий секреты. После завершения периода предыдущий секрет удаляют. Не заменяйте криптографическую проверку списком IP-адресов или Bearer-токеном.

В переходный период проверяйте подпись по разрешённым секретам. Только после успешной проверки разбирайте событие, извлекайте данные и обращайтесь к заказу.

Проверка завершается до изменения заказа, баланса или статуса. Ошибка подписи останавливает обработку события.

Что произойдёт при недоступности обработчика?

Один цикл доставки включает 11 попыток: первую отправку и десять повторов. Задержки увеличиваются от одной минуты до восьми часов, а полный цикл занимает примерно 16 часов. После восстановления событие можно повторить вручную.

Ручной и автоматический повторы должны использовать один обработчик. Paymos блокирует адреса обратной петли, частные и локальные адреса канала, CGNAT и IPv6 ULA и не следует автоматическим HTTP-перенаправлениям. Поэтому адрес должен быть доступен из интернета напрямую.

Восстановление не должно требовать отдельной ветки кода или специальных данных для ручного повтора.

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

Что проверять в тестовом режиме?

Тестовый режим использует тот же набор методов API с отдельными учётными данными. Проверьте предусмотренные сценарии платежей и выводов без реального движения активов. Повторите создание счёта с одним external_order_id, затем дважды передайте одно уведомление.

Добавьте проверку недоплаты. По умолчанию допуск проекта равен 0 %, а платёж в настроенном пределе закрывает счёт по фактически полученной сумме. Убедитесь, что частичная оплата ниже порога не исполняет заказ раньше установленного правила.

Отдельно проверьте отмену и вывод, если эти операции входят в ваш конкретный сценарий.

Цель теста — доказать, что повтор и частичная оплата не создают второй результат.

Какой интерфейс оплаты показать покупателю?

Создание счёта через API не требует собственной платёжной страницы. Paymos предоставляет готовую страницу оплаты с QR-кодом и переходами в Trust Wallet, MetaMask, Coinbase Wallet и OKX Wallet. Её можно открыть отдельно или встроить через iframe.

Для оплаты внутри сайта доступен Widget SDK. Он поддерживает встроенный режим и переход на отдельную страницу. Покупателю не нужны учётная запись Paymos, электронная почта или проверка KYC на странице оплаты.

Выбор между отдельной страницей и iframe не меняет серверную связь созданного счёта с заказом.

Сервер всё равно создаёт счёт и сохраняет его идентификатор рядом с заказом.

Как сверять платежи после запуска?

Сопоставляйте каждый счёт Paymos с одним заказом по сохранённым идентификаторам. Контролируйте неудачные доставки, повторяйте их после восстановления обработчика и проверяйте, что повторное уведомление не меняет уже исполненный заказ.

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

Сверяйте фактически полученную сумму, особенно если проект допускает недоплату.

Регулярная сверка показывает, где доставка остановилась и какой заказ требует внимания.

Выбор интеграции для системы заказов (июль 2026 года)
Условия бизнесаПодходЧто хранит серверОбъём интеграции
Своя система заказовREST APIСвязь заказа и счётаПолный
Магазин на поддерживаемой CMSОфициальный плагинДанные заказа в CMSНастройка
Счёт отправляет менеджерПлатёжная ссылкаСобственный учёт клиентаМинимальный
Оплата внутри сайтаWidget SDKПараметры запускаНебольшой

Частые вопросы

Когда выбирать REST API, а не плагин или платёжную ссылку?

REST API подходит бизнесу с собственной серверной системой заказов. Для магазина на поддерживаемой CMS или разовых счетов плагин и платёжная ссылка обычно требуют меньше разработки.

Что хранить рядом с заказом?

Сохраняйте постоянный `external_order_id`, идентификатор счёта Paymos и запись о том, что оплаченный заказ уже исполнен. Это позволяет безопасно повторять запросы и уведомления.

Нужен ли заголовок Idempotency-Key?

Нет. Для создания счёта Paymos использует `external_order_id`. Повтор запроса с тем же значением возвращает существующий счёт.

Можно ли подписывать запросы в браузере?

Нет. Merchant API использует HMAC-SHA256 с общим секретом, поэтому подпись формируется на доверенном сервере. Для браузерного сценария предусмотрен Widget SDK с ключом `X-Sdk-Key`.

Как проверить защиту от повторного исполнения?

В тестовом режиме повторите одно уведомление и убедитесь, что товар, доступ или внутренняя запись создаются один раз. Ручной повтор должен проходить через тот же обработчик.

Подходит ли API для автоматических списаний и разделения платежа?

Нет. Paymos не поддерживает автоматические повторные списания с кошелька, распределение платежа между продавцами или выплаты по расписанию.

Когда НЕ стоит использовать REST API

  • Если бизнес не ведёт заказы на собственном сервере, выберите платёжную ссылку, готовую страницу оплаты, виджет или официальный плагин CMS.
  • Если задача ограничена разовыми счетами, серверная интеграция добавит поддержку и хранение секретов без заметной пользы.
  • Если обработчик не умеет распознавать уже исполненный заказ, сначала добавьте защиту от повторов, а затем принимайте события вебхука.

Источники

  1. 1. Architectural Styles and the Design of Network-based Software Architectures (accessed 2026-07-29)
  2. 2. HMAC: Keyed-Hashing for Message Authentication (RFC 2104) (accessed 2026-07-29)
  3. 3. The Keyed-Hash Message Authentication Code (FIPS 198-1) (accessed 2026-07-29)
  4. 4. OWASP Server Side Request Forgery Prevention Cheat Sheet (accessed 2026-07-29)

Последняя проверка: 29 июл. 2026 г.

#криптоплатежи#rest-api#вебхуки#hmac#интеграция
Поделиться