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

Создание инвойса

Метод позволяет выставить инвойс (счёт на оплату) и получить ссылку на платёжную форму. Запрос отправляется на эндпоинт init_invoice. После оплаты или истечения срока действия инвойса финальный статус приходит на invoice_notify_url, указанный в настройках проекта.

Формат запросов и подписи — в разделе Формат запроса к API.

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

  1. Запрос — ваш сервер отправляет подписанный запрос на init_invoice с суммой и invoice_user_data.
  2. Ответ — API возвращает invoice_id и url платёжной страницы.
  3. Оплата — вы перенаправляете плательщика по url или передаёте ссылку иным способом.
  4. Уведомление (колбек) — при финальном статусе инвойса отправляется POST JSON на invoice_notify_url проекта.

Расшифровка кодов status — в разделе Статусы транзакций.

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

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

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

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

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

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

ПараметрТипОписание
descriptionStringОписание платежа для плательщика.
success_urlStringURL возврата плательщика после успешной оплаты.
failure_urlStringURL возврата плательщика после ошибки оплаты.

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

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

Формула:

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

Пример строки до хеширования (как в архивной документации, без invoice_user_data в минимальном примере):

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

Если передаёте invoice_user_data, success_url и другие поля, они участвуют в строке подписи в алфавитном порядке.

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

Проверка подписи init_invoice

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

Строка параметров: amount=50&description=test_payment&invoice_user_data=inv_12345&partner_id=1234&project_id=5678
Строка для MD5: init_invoiceamount=50&description=test_payment&invoice_user_data=inv_12345&partner_id=1234&project_id=5678
Ожидаемая подпись: e65714bdce70f68c92553ed3c2ecbb47
Подпись не совпадает

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

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

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

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

  // 3. GET-запрос
  const response = await axios.get('https://api.1payment.com/init_invoice', { params });
  return response.data;
}

const apiKey = process.env.ONEPAYMENT_API_KEY;
const data = {
  partner_id: 1234,
  project_id: 5678,
  amount: 50,
  description: 'test_payment',
  invoice_user_data: 'inv_12345',
};

createInvoice(apiKey, data).then(console.log);

Ответ API

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

{
  "invoice_id": "inv_dp2eqgnyt008ocg88wwsw00oksgs8s88",
  "url": "https://merchant.1payment.com/xZ5g7F"
}
ПолеОписание
invoice_idID инвойса в системе 1Payment.
urlСсылка на платёжную форму; перенаправьте плательщика по этому адресу.

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

{
  "error_code": 2
}

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

После получения финального статуса инвойса на ваш invoice_notify_url (из настроек проекта) отправляется POST-уведомление в формате JSON.

ПараметрТипОбяз.Описание
typeStringДаТип уведомления; для инвойса — invoice.
invoice_idStringДаID инвойса в системе 1Payment.
order_idStringНетПри успешной оплате — ID транзакции, которой оплачен инвойс.
project_idIntegerДаID вашего проекта.
statusIntegerДа3 — инвойс оплачен, 4 — истёк срок ожидания оплаты.
init_timeStringДаВремя создания инвойса.
vaild_tillStringДаВремя окончания срока действия инвойса (имя поля — как в API).
amountNumberДаСумма, на которую выставлен инвойс.
currencyStringДаВалюта инвойса (ISO 4217).
invoice_user_dataStringДаID инвойса, переданный при создании.
signStringДаКонтрольная подпись колбека.

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

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

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

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