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

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

Интеграция через платёжную форму 1Payment — самый простой способ начать принимать платежи банковской картой.

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

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

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

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

Эндпоинтhttps://api.1payment.com/init_form
МетодыGET, POST
Формат ответаJSON

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

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

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

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

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

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

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

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

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

Формула:

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

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

init_formamount=50&description=test_payment&partner_id=1234&project_id=5678secret_key

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

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

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

Строка параметров: amount=50&description=test_payment&partner_id=1234&project_id=5678&shop_url=https://test.com&user_data=order_777
Строка для MD5: init_formamount=50&description=test_payment&partner_id=1234&project_id=5678&shop_url=https://test.com&user_data=order_777
Ожидаемая подпись: 8772da4f4ce287912769b3b36fce48ba
Подпись не совпадает

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

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

async function createCardForm(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: 1234,
  project_id: 5678,
  amount: '50.00',
  user_data: 'order_777',
  shop_url: 'https://test.com',
  description: 'test_payment',
};

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

Ответ API

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

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

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

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

{
  "error_code": 2
}

Тестирование

Для тестирования платежей по картам можно использовать следующие данные:

РезультатНомер картыCARDHOLDEREXPCVC
Успешная оплата4111111111111111TEST01/01123
Неуспешная оплата4111111111111112TEST01/01123

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

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

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

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

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

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

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