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

Создание платежа по host2host (GATE)

Интеграция GATE позволяет создать платёж напрямую с вашего сервера и получить готовую ссылку на оплату в Системе быстрых платежей (СБП). Вы полностью контролируете внешний вид: можете отрисовать ссылку как QR-код на сайте или сделать кнопку «Оплатить», которая откроет приложение банка на телефоне клиента.

Принцип работы

Процесс проведения платежа через API состоит из четырёх шагов:

  1. Инициализация — ваш сервер формирует запрос с параметрами заказа и отправляет его на эндпоинт 1Payment.
  2. Получение ссылки — в ответ система возвращает прямую ссылку на оплату в СБП (redirect_url).
  3. Оплата — вы отрисовываете ссылку в виде QR-кода на сайте или используете её для кнопки «Оплатить» в мобильной версии; клиент переходит в приложение банка и подтверждает платёж.
  4. Уведомление (колбек) — после изменения статуса операции мы отправляем POST-уведомление на ваш notify_url с финальным результатом транзакции.

Техническая информация

Эндпоинтhttps://api.1payment.com/init_payment
МетодыGET, POST
Формат ответаJSON
Тип платежаВ запросе обязательно payment_type=sbp

Параметры запроса

Обязательные

Эти поля должны присутствовать в каждом запросе для корректного создания платежа.

ПараметрТипОписание
partner_idIntegerВаш уникальный ID в системе 1Payment.
project_idIntegerИдентификатор вашего проекта.
amountNumberСумма платежа (например, 100.00).
payment_typeStringДля СБП всегда передаётся значение sbp.
user_dataStringВаш внутренний ID заказа (вернётся в колбеке).
shop_urlStringURL сайта, на котором совершается покупка.
signStringКонтрольная подпись запроса (см. раздел «Подпись»).

Дополнительные

Позволяют передать расширенную информацию о клиенте или активировать подписку.

ПараметрТипОписание
descriptionStringОписание заказа, которое увидит клиент в банковском приложении.
phoneStringНомер телефона плательщика.
emailStringЭлектронная почта плательщика.
user_idStringID клиента в вашей базе данных.
return_urlStringURL, куда вернуть плательщика после оплаты в банке.
subscribeIntegerПередайте 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_12345
Строка для MD5: init_paymentamount=50&partner_id=1234&payment_type=sbp&project_id=5678&shop_url=https://myshop.com&user_data=inv_12345
Ожидаемая подпись: da3006268cf6b16ae39abd802cccd3a9
Подпись не совпадает

Примеры запроса

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_typeStringДаТип платежа (sbp).
order_idStringДаИдентификатор платежа в системе 1Payment.
project_idIntegerДаID вашего проекта.
statusIntegerДаСостояние: 2 (ожидание), 3 (успех), 4 (отказ).
status_descriptionStringДаPENDING, SUCCESS или FAILURE.
init_timeStringДаВремя создания платежа.
status_timeStringДаВремя получения финального статуса.
merchant_priceNumberДаСумма платежа.
user_priceNumberДаОтчисления партнёра.
currencyStringДаВалюта платежа (ISO 4217).
accountStringДаРеквизит СБП (значение sbp).
user_dataStringДаID транзакции, переданный при инициации.
signStringДаКонтрольная подпись колбека.
redirect_urlStringНетURL для QR-кода, если не был передан ранее.
status_codeStringНетКод ошибки при отказе.
tokenStringНетИдентификатор подписки для рекуррентных платежей.
testIntegerНет1 при тестовых операциях.

Важно: ваш сервер должен вернуть HTTP 200 OK. Иначе система повторяет отправку колбека раз в минуту в течение 10 минут.

Проверка подписи колбека: MD5 от всех параметров в алфавитном порядке через & + API_KEY (без префикса init_payment). Подробнее — в разделе Формат запроса к API.

Связанные разделы

Статья была полезна?