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

Создание платежа по форме

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

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

Процесс оплаты через СБП состоит из четырёх этапов:

  1. Инициализация — ваш сервер отправляет запрос с параметрами заказа на эндпоинт 1Payment.
  2. Получение ссылки — в ответ система возвращает уникальный URL платёжной страницы.
  3. Оплата — вы перенаправляете пользователя по полученному адресу; там он выбирает банк, переходит в мобильное приложение и подтверждает платёж.
  4. Уведомление (колбек) — после завершения транзакции мы отправляем уведомление о статусе платежа на ваш notify_url.

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

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

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

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

Эти поля необходимы для корректного создания платёжной формы.

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

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

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

ПараметрТипОписание
descriptionStringОписание покупки для клиента на платёжной форме.
success_urlStringURL для возврата клиента при успешной оплате.
failure_urlStringURL для возврата клиента при ошибке.
user_idStringВнутренний ID плательщика в вашей системе.
langStringЯзык формы (например, ru, en).

Формирование подписи (sign)

Подпись: MD5, lowercase (hex). Общие правила — Формат запроса к API.

Формула:

MD5(init_form + <параметры_без_sign_в_алфавитном_порядке_через_&> + <API_KEY>)

Пример строки до хеширования:

init_formamount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_777secret_key

Проверка подписи в документации

Проверка подписи {{method}}

Вставьте параметры запроса (JSON), API key и подпись. Виджет автоматически проверит корректность.

Строка параметров: amount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_777
Строка для MD5: init_formamount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_777
Ожидаемая подпись: 6f92ce341c2b161fad0444ca5a1ef82b
Подпись не совпадает

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

const crypto = require('crypto');
const axios = require('axios');

async function createSbpForm(apiKey, params) {
  // 1. Сортируем параметры по алфавиту
  const sortedKeys = Object.keys(params).sort();
  const queryString = sortedKeys.map((key) => `${key}=${params[key]}`).join('&');

  // 2. Генерируем подпись с префиксом init_form
  const baseString = `init_form${queryString}${apiKey}`;
  params.sign = crypto.createHash('md5').update(baseString).digest('hex');

  // 3. Отправляем POST-запрос
  try {
    const response = await axios.post('https://api.1payment.com/init_form', params);
    return response.data; // в ответе поле url — ссылка на форму
  } catch (error) {
    console.error('Ошибка:', error.message);
  }
}

// Пример данных запроса
const mockApiKey = process.env.ONEPAYMENT_API_KEY;
const mockData = {
  partner_id: 123,
  project_id: 456,
  amount: '100.00',
  payment_type: 'sbp',
  user_data: 'order_777',
  shop_url: 'myshop.ru',
};

createSbpForm(mockApiKey, mockData).then(console.log);

Ответ API

Успешный ответ (200):

{
  "url": "https://merchant.1payment.com/xZ5g7F"
}

Поле url — адрес платёжной страницы, на которую нужно перенаправить плательщика.

Ошибка запроса (400):

{
  "error_code": 2
}

Уведомления о статусе (колбеки)

После изменения статуса транзакции наш сервер отправляет POST-запрос в формате JSON на ваш notify_url.

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

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

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

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

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