Создание платежа по host2host (GATE)
Интеграция GATE позволяет создать платёж напрямую с вашего сервера и получить готовую ссылку на оплату в Системе быстрых платежей (СБП). Вы полностью контролируете внешний вид: можете отрисовать ссылку как QR-код на сайте или сделать кнопку «Оплатить», которая откроет приложение банка на телефоне клиента.
Принцип работы
Процесс проведения платежа через API состоит из четырёх шагов:
- Инициализация — ваш сервер формирует запрос с параметрами заказа и отправляет его на эндпоинт 1Payment.
- Получение ссылки — в ответ система возвращает прямую ссылку на оплату в СБП (
redirect_url). - Оплата — вы отрисовываете ссылку в виде QR-кода на сайте или используете её для кнопки «Оплатить» в мобильной версии; клиент переходит в приложение банка и подтверждает платёж.
- Уведомление (колбек) — после изменения статуса операции мы отправляем POST-уведомление на ваш
notify_urlс финальным результатом транзакции.
Техническая информация
| Эндпоинт | https://api.1payment.com/init_payment |
| Методы | GET, POST |
| Формат ответа | JSON |
| Тип платежа | В запросе обязательно payment_type=sbp |
Параметры запроса
Обязательные
Эти поля должны присутствовать в каждом запросе для корректного создания платежа.
| Параметр | Тип | Описание |
|---|---|---|
partner_id | Integer | Ваш уникальный ID в системе 1Payment. |
project_id | Integer | Идентификатор вашего проекта. |
amount | Number | Сумма платежа (например, 100.00). |
payment_type | String | Для СБП всегда передаётся значение sbp. |
user_data | String | Ваш внутренний ID заказа (вернётся в колбеке). |
shop_url | String | URL сайта, на котором совершается покупка. |
sign | String | Контрольная подпись запроса (см. раздел «Подпись»). |
Дополнительные
Позволяют передать расширенную информацию о клиенте или активировать подписку.
| Параметр | Тип | Описание |
|---|---|---|
description | String | Описание заказа, которое увидит клиент в банковском приложении. |
phone | String | Номер телефона плательщика. |
email | String | Электронная почта плательщика. |
user_id | String | ID клиента в вашей базе данных. |
return_url | String | URL, куда вернуть плательщика после оплаты в банке. |
subscribe | Integer | Передайте 1, чтобы создать токен для рекуррентных платежей. |
Формирование подписи (sign)
Подпись: MD5, lowercase (hex). Общие правила — Формат запроса к API.
Формула:
MD5(init_payment + <параметры_без_sign_в_алфавитном_порядке_через_&> + <API_KEY>)Сценарий 1 — только обязательные параметры
Параметры: amount=50, partner_id=1, payment_type=sbp, project_id=5678, shop_url=test.com, user_data=order123.
init_paymentamount=50&partner_id=1&payment_type=sbp&project_id=5678&shop_url=test.com&user_data=order123secret_keyСценарий 2 — с полем description
При добавлении description=Payment1 поле включается в строку по алфавиту:
init_paymentamount=50&description=Payment1&partner_id=1&payment_type=sbp&project_id=5678&shop_url=test.com&user_data=order123secret_keyПроверка подписи в документации
Проверка подписи {{method}}
Вставьте параметры запроса (JSON), API key и подпись. Виджет автоматически проверит корректность.
amount=50&partner_id=1234&payment_type=sbp&project_id=5678&shop_url=https://myshop.com&user_data=inv_12345init_paymentamount=50&partner_id=1234&payment_type=sbp&project_id=5678&shop_url=https://myshop.com&user_data=inv_12345da3006268cf6b16ae39abd802cccd3a9Примеры запроса
const crypto = require('crypto');
const axios = require('axios');
async function createSbpPayment(apiKey, params) {
// 1. Сортируем параметры по алфавиту
const sortedKeys = Object.keys(params).sort();
const queryString = sortedKeys.map((key) => `${key}=${params[key]}`).join('&');
// 2. Формируем подпись с префиксом init_payment
const baseString = `init_payment${queryString}${apiKey}`;
params.sign = crypto.createHash('md5').update(baseString).digest('hex');
// 3. Отправляем POST-запрос
try {
const response = await axios.post('https://api.1payment.com/init_payment', params);
return response.data; // order_id, status, redirect_url
} catch (error) {
console.error('Ошибка при создании платежа:', error.message);
}
}
// Пример данных запроса
const apiKey = process.env.ONEPAYMENT_API_KEY;
const data = {
partner_id: 1234,
payment_type: 'sbp',
project_id: 5678,
amount: 50.0,
user_data: 'inv_12345',
shop_url: 'https://myshop.com',
};
createSbpPayment(apiKey, data).then((result) => console.log('Ответ системы:', result));Ответ API
Успешный ответ (200):
{
"order_id": "8p3brmb19gfg0sg8gcwhws8kgc748s87",
"status": 2,
"status_description": "PENDING",
"redirect_url": "https://qr.nspk.ru/XXX"
}| Поле | Описание |
|---|---|
order_id | Уникальный ID транзакции в системе 1Payment. |
status | Числовой код состояния (2 — ожидание оплаты). |
status_description | Текстовое описание статуса (PENDING и др.). |
redirect_url | Прямая ссылка на СБП: отрисуйте QR-код или используйте её в качестве ссылки для кнопки «Оплатить». |
Ошибка запроса (400):
{
"error_code": 2
}Уведомления о статусе (колбеки)
Если при инициации платежа система не смогла получить данные для редиректа, в ответе на init_payment не будет параметра redirect_url. Тогда redirect_url поступит позже на ваш notify_url в промежуточном статусе.
После изменения статуса операции наш сервер отправляет POST-запрос в формате JSON на ваш notify_url.
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
payment_type | String | Да | Тип платежа (sbp). |
order_id | String | Да | Идентификатор платежа в системе 1Payment. |
project_id | Integer | Да | ID вашего проекта. |
status | Integer | Да | Состояние: 2 (ожидание), 3 (успех), 4 (отказ). |
status_description | String | Да | PENDING, SUCCESS или FAILURE. |
init_time | String | Да | Время создания платежа. |
status_time | String | Да | Время получения финального статуса. |
merchant_price | Number | Да | Сумма платежа. |
user_price | Number | Да | Отчисления партнёра. |
currency | String | Да | Валюта платежа (ISO 4217). |
account | String | Да | Реквизит СБП (значение sbp). |
user_data | String | Да | ID транзакции, переданный при инициации. |
sign | String | Да | Контрольная подпись колбека. |
redirect_url | String | Нет | URL для QR-кода, если не был передан ранее. |
status_code | String | Нет | Код ошибки при отказе. |
token | String | Нет | Идентификатор подписки для рекуррентных платежей. |
test | Integer | Нет | 1 при тестовых операциях. |
Важно: ваш сервер должен вернуть HTTP 200 OK. Иначе система повторяет отправку колбека раз в минуту в течение 10 минут.
Проверка подписи колбека: MD5 от всех параметров в алфавитном порядке через & + API_KEY (без префикса init_payment). Подробнее — в разделе Формат запроса к API.