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

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

Интеграция GATE позволяет инициировать платёж банковской картой напрямую с вашего сервера: вы передаёте реквизиты карты и параметры заказа в API 1Payment. При необходимости 3-D Secure в ответе приходит redirect_url для перенаправления плательщика.

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

  1. Запрос — ваш сервер отправляет параметры платежа и данные карты на эндпоинт init_payment с payment_type=card.
  2. Ответ — система возвращает order_id, status и при необходимости redirect_url для прохождения 3-D Secure.
  3. 3-D Secure — если в ответе есть redirect_url, перенаправьте плательщика по этому адресу для завершения оплаты.
  4. Уведомление (колбек) — финальный статус приходит на ваш notify_url.

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

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

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

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

ПараметрТипОписание
partner_idIntegerВаш уникальный ID в системе 1Payment.
payment_typeStringВсегда значение card.
project_idIntegerИдентификатор вашего проекта.
accountStringНомер банковской карты.
card_holderStringИмя держателя карты (как указано на карте).
yearStringГод окончания действия карты, две последние цифры (например, 22).
monthStringМесяц окончания действия карты (например, 01).
cvcStringCVV/CVC код карты.
amountNumberСумма платежа в валюте проекта (например, 50.00).
user_dataStringВаш внутренний ID заказа (вернётся в колбеке).
shop_urlStringURL сайта источника платежа.
signStringКонтрольная подпись запроса (см. раздел «Подпись»).

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

ПараметрТипОписание
descriptionStringОписание платежа.
subscriptionIntegerТолько для подписочных платежей: передайте 1, чтобы получить token для рекуррентных списаний.
tokenStringID токена привязанной подписки.
ipStringIP-адрес плательщика.
destinationStringНомер карты для пополнения (опционально, для P2P-сценариев).
return_urlStringURL, куда вернуть плательщика после оплаты в банке.
user_idStringID плательщика в вашей системе.

Параметры 3-D Secure 2.x

Передаются для прохождения 3-D Secure версии 2.x.

ПараметрТипОписание
ext_notification_urlStringАдрес возврата плательщика после 3DS (TermUrl).
ext_browser_accept_headerStringСодержимое HTTP-заголовка Accept (макс. 2048 символов).
ext_browser_color_depthStringБитовая глубина цветовой палитры браузера.
ext_browser_ipStringIP-адрес браузера плательщика.
ext_browser_languageStringЯзык браузера, IETF BCP47 (макс. 8 символов).
ext_browser_screen_heightStringВысота экрана браузера, window.screen.height (макс. 6 символов).
ext_browser_screen_widthStringШирина экрана браузера, window.screen.width (макс. 6 символов).
ext_browser_tzStringСмещение локального времени от UTC в минутах (макс. 5 символов).
ext_browser_user_agentStringСодержимое HTTP-заголовка User-Agent (макс. 2048 символов).
ext_browser_java_enabledStringВключён ли JavaScript: true или false.
ext_window_widthStringШирина окна браузера, window.innerWidth (в пикселях).
ext_window_heightStringВысота окна браузера, window.innerHeight (в пикселях).

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

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

Формула:

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

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

init_paymentaccount=4111111111111111&amount=50&card_holder=TEST&cvc=111&description=test_payment&month=01&partner_id=1234&payment_type=card&project_id=5678&year=22secret_key

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

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

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

Строка параметров: account=4111111111111111&amount=50&card_holder=TEST&cvc=111&description=test_payment&month=01&partner_id=1234&payment_type=card&project_id=5678&shop_url=https://test.com&user_data=order_777&year=22
Строка для MD5: init_paymentaccount=4111111111111111&amount=50&card_holder=TEST&cvc=111&description=test_payment&month=01&partner_id=1234&payment_type=card&project_id=5678&shop_url=https://test.com&user_data=order_777&year=22
Ожидаемая подпись: bc2592ca4405860b254b7c07d56a095a
Подпись не совпадает

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

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

async function createCardPayment(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;
  } catch (error) {
    console.error('Ошибка:', error.message);
  }
}

// Пример данных запроса
const mockApiKey = process.env.ONEPAYMENT_API_KEY;
const mockData = {
  partner_id: 1234,
  payment_type: 'card',
  project_id: 5678,
  account: '4111111111111111',
  card_holder: 'TEST',
  year: '22',
  month: '01',
  cvc: '111',
  amount: '50.00',
  user_data: 'order_777',
  shop_url: 'https://test.com',
  description: 'test_payment',
};

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

Ответ API

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

{
  "order_id": "8p3brmb19gfg0sg8gcwhws8kgc748s87",
  "status": 2,
  "status_description": "PENDING",
  "status_code": 0,
  "redirect_url": "https://testsite.com"
}
ПолеОписание
order_idID платежа в системе 1Payment; используйте для запроса статуса.
statusЧисловой код состояния (2 — ожидание).
status_descriptionТекстовое описание статуса (PENDING и др.).
status_codeКод ошибки при отказе (см. коды отказов).
redirect_urlURL для перенаправления плательщика при прохождении 3-D Secure (может отсутствовать).

Если в ответе присутствует redirect_url, перенаправьте плательщика по этому адресу для завершения оплаты.

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

{
  "error_code": 2
}

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

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

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

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

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

ПараметрТипОбяз.Описание
payment_typeStringДаТип платежа (card).
order_idStringДаID платежа в системе 1Payment.
project_idIntegerДаID вашего проекта.
statusIntegerДаСтатус: 2 (ожидание), 3 (успех), 4 (отказ).
status_descriptionStringДаPENDING, SUCCESS или FAILURE.
redirect_urlStringНетURL для перенаправления, если требуется завершить оплату.
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_payment). Подробнее — в разделе Формат запроса к API.

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

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