Создание платежа по форме
Интеграция через платёжную форму 1Payment — самый простой способ начать принимать платежи через Систему быстрых платежей (СБП). Вам не нужно самостоятельно генерировать QR-коды или работать с банковскими API: техническую часть берёт на себя 1Payment.
Принцип работы
Процесс оплаты через СБП состоит из четырёх этапов:
- Инициализация — ваш сервер отправляет запрос с параметрами заказа на эндпоинт 1Payment.
- Получение ссылки — в ответ система возвращает уникальный URL платёжной страницы.
- Оплата — вы перенаправляете пользователя по полученному адресу; там он выбирает банк, переходит в мобильное приложение и подтверждает платёж.
- Уведомление (колбек) — после завершения транзакции мы отправляем уведомление о статусе платежа на ваш
notify_url.
Техническая информация
| Эндпоинт | https://api.1payment.com/init_form |
| Методы | GET, POST |
| Формат ответа | JSON |
| Тип платежа | В запросе обязательно payment_type=sbp |
Параметры запроса
Обязательные
Эти поля необходимы для корректного создания платёжной формы.
| Параметр | Тип | Описание |
|---|---|---|
partner_id | Integer | Ваш уникальный идентификатор в системе 1Payment. |
project_id | Integer | Идентификатор вашего проекта. |
amount | Number | Сумма платежа (например, 100.00). |
payment_type | String | Для оплаты через СБП всегда передаётся значение sbp. |
user_data | String | Ваш внутренний ID заказа для сопоставления платежа. |
shop_url | String | URL сайта, на котором совершается покупка. |
sign | String | Контрольная подпись запроса (см. раздел «Подпись»). |
Дополнительные
Позволяют настроить поведение формы и передать данные о клиенте.
| Параметр | Тип | Описание |
|---|---|---|
description | String | Описание покупки для клиента на платёжной форме. |
success_url | String | URL для возврата клиента при успешной оплате. |
failure_url | String | URL для возврата клиента при ошибке. |
user_id | String | Внутренний ID плательщика в вашей системе. |
lang | String | Язык формы (например, 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_777init_formamount=100.00&partner_id=123&payment_type=sbp&project_id=456&shop_url=myshop.ru&user_data=order_7776f92ce341c2b161fad0444ca5a1ef82bПримеры запроса
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_type | String | Да | Тип платежа (sbp). |
order_id | String | Да | ID платежа в системе 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). |
user_data | String | Да | ID транзакции, переданный при создании. |
account | String | Да | Реквизит СБП (значение sbp). |
sign | String | Да | Контрольная подпись колбека. |
test | Integer | Нет | 1 при тестовых платежах. |
status_code | String | Нет | Дополнительный код причины отказа. |
Важно: ваш сервер должен вернуть HTTP 200 OK. Иначе система повторяет отправку колбека раз в минуту в течение 10 минут.
Проверка подписи колбека: MD5 от всех параметров в алфавитном порядке через & + API_KEY (без префикса init_form). Подробнее — в разделе Формат запроса к API.