Payou

Разработчикам

Шесть эндпоинтов. Одна подпись. Без SDK.

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

GET/api/new/api.php
# Запросить платёжные реквизиты — подпись строится из секретного пароля мерчанта
# 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"
Запрос
АУТЕНТИФИКАЦИЯ
ВЕБХУКИ
ШАГ 01

Получи доступы мерчанта

Зарегистрируйся, добавь сайт и отправь его на модерацию. После одобрения ID мерчанта и секретный пароль будут в дашборде.

ШАГ 02

Подпиши и отправь

Собери хеш из ID мерчанта, суммы, секрета, способа оплаты и order_id и вызови эндпоинт. Сумма — десятичная строка с точкой.

ШАГ 03

Прими вебхук

Payou отправляет результат на твой URL вместе с подписью. Проверь её, ответь MERCHANT_ORDER_ID|success и зачисли заказ один раз.

АУТЕНТИФИКАЦИЯ

ID мерчанта и секрет

Запросы подписываются, а не авторизуются токеном. Подпись — это md5 от ID мерчанта, суммы, твоего секретного пароля, способа оплаты и order_id, так что сам секрет никуда не уходит. Выплаты подписываются отдельным ключом api_key по HMAC-SHA256.

СУММЫ

Десятичная строка с точкой

Сумма передаётся десятичной строкой с точкой в качестве разделителя — 100.00, но никогда не 100,00. Та же строка идёт в подпись, поэтому расхождение в формате ломает хеш, а не платёж.

НОМЕР ЗАКАЗА

Всё завязано на твой order_id

order_id — твой собственный идентификатор. По нему ищет эндпоинт статуса, его же возвращает вебхук и по нему ты сверяешься — поэтому на твоей стороне он должен быть уникальным.

ВЕБХУКИ

Подписанный POST с полями формы

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

Один подписанный запрос. Реквизиты приходят в JSON.

Страна и способ оплаты — параметры одного вызова, а не отдельные интеграции. Маршрут за ними выбирает слой.

GET/api/new/api.php

Запрос

# Запросить платёжные реквизиты — подпись строится из секретного пароля мерчанта
# 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"
}

Демонстрационный ответ. Реальные деньги не двигаются.

Доступы, документация, первый запрос.

Документация открыта — чтобы начать читать или писать код под эндпоинты, звонок в отдел продаж не нужен.