Получи доступы мерчанта
Зарегистрируйся, добавь сайт и отправь его на модерацию. После одобрения ID мерчанта и секретный пароль будут в дашборде.
Разработчикам
Подписанные HTTP-запросы к обычным эндпоинтам. Возьми готовую платёжную страницу или забери реквизиты в JSON и собери свой чекаут — результат в обоих случаях придёт одним подписанным вебхуком.
# Запросить платёжные реквизиты — подпись строится из секретного пароля мерчанта # hash = md5(id : summ : password : sistems : order_id) HASH=$(printf '%s' "5:100.00:$PAYOU_PASSWORD:card_RUB:4444" | md5sum | cut -d' ' -f1) curl -G https://payou.pro/api/new/api.php \ --data-urlencode id=5 \ --data-urlencode sistems=card_RUB \ --data-urlencode summ=100.00 \ --data-urlencode order_id=4444 \ --data-urlencode user_code=1 \ --data-urlencode user_email=[email protected] \ --data-urlencode hash="$HASH"
Зарегистрируйся, добавь сайт и отправь его на модерацию. После одобрения ID мерчанта и секретный пароль будут в дашборде.
Собери хеш из ID мерчанта, суммы, секрета, способа оплаты и order_id и вызови эндпоинт. Сумма — десятичная строка с точкой.
Payou отправляет результат на твой URL вместе с подписью. Проверь её, ответь MERCHANT_ORDER_ID|success и зачисли заказ один раз.
АУТЕНТИФИКАЦИЯ
Запросы подписываются, а не авторизуются токеном. Подпись — это md5 от ID мерчанта, суммы, твоего секретного пароля, способа оплаты и order_id, так что сам секрет никуда не уходит. Выплаты подписываются отдельным ключом api_key по HMAC-SHA256.
СУММЫ
Сумма передаётся десятичной строкой с точкой в качестве разделителя — 100.00, но никогда не 100,00. Та же строка идёт в подпись, поэтому расхождение в формате ломает хеш, а не платёж.
НОМЕР ЗАКАЗА
order_id — твой собственный идентификатор. По нему ищет эндпоинт статуса, его же возвращает вебхук и по нему ты сверяешься — поэтому на твоей стороне он должен быть уникальным.
ВЕБХУКИ
Payou отправляет на твой URL поля AMOUNT, status, intid, MERCHANT_ORDER_ID и SIGN в формате application/x-www-form-urlencoded. Проверь SIGN и ответь MERCHANT_ORDER_ID|success — любое другое тело считается недоставкой.
СТАТУС
Два способа узнать статус: по идентификатору транзакции Payou и по твоему order_id. Оба отвечают полями id, order_id, status, paysys и summ — задаче сверки больше ничего не нужно.
ПРОДАКШЕН
Отдельного тестового хоста нет. Интеграция выполняется на боевых эндпоинтах с аккаунтом мерчанта, который включается после модерации.
Это вся поверхность для первой интеграции. Платёжные вызовы подписываются секретным паролем мерчанта, выплаты — отдельным ключом api_key и HMAC-SHA256.
| Метод | Эндпоинт | Назначение |
|---|---|---|
| GET | /sci/v1/ | Готовая платёжная страница — сюда отправляешь плательщика |
| GET | /api/new/api.php | Платёжные реквизиты в JSON для собственного чекаута |
| GET | /api/status | Статус платежа по идентификатору транзакции Payou |
| GET | /api/status2 | Статус платежа по твоему order_id |
| POST | /api/new/confirm_payment.php | Плательщик подтверждает или отменяет платёж |
| POST | /api/payout_create.php | Создать выплату на карту или счёт |
API
Страна и способ оплаты — параметры одного вызова, а не отдельные интеграции. Маршрут за ними выбирает слой.
Запрос
# Запросить платёжные реквизиты — подпись строится из секретного пароля мерчанта # hash = md5(id : summ : password : sistems : order_id) curl -G https://payou.pro/api/new/api.php \ --data-urlencode id=5 \ --data-urlencode sistems=card_RUB \ --data-urlencode summ=100.00 \ --data-urlencode order_id=4444 \ --data-urlencode user_code=1 \ --data-urlencode hash="$HASH"
Ответ
# HTTP 200 · application/json { "id": "3874512", "card": "0000 0000 0000 0000", "wallet_owner": "CARDHOLDER NAME", "sbp_bank": "BANK NAME", "amount": "100.00" }
Демонстрационный ответ. Реальные деньги не двигаются.
Документация открыта — чтобы начать читать или писать код под эндпоинты, звонок в отдел продаж не нужен.