Создание платежа по host2host (GATE)
Интеграция GATE позволяет инициировать платёж банковской картой напрямую с вашего сервера: вы передаёте реквизиты карты и параметры заказа в API 1Payment. При необходимости 3-D Secure в ответе приходит redirect_url для перенаправления плательщика.
Принцип работы
- Запрос — ваш сервер отправляет параметры платежа и данные карты на эндпоинт
init_paymentсpayment_type=card. - Ответ — система возвращает
order_id,statusи при необходимостиredirect_urlдля прохождения 3-D Secure. - 3-D Secure — если в ответе есть
redirect_url, перенаправьте плательщика по этому адресу для завершения оплаты. - Уведомление (колбек) — финальный статус приходит на ваш
notify_url.
Техническая информация
| Эндпоинт | https://api.1payment.com/init_payment |
| Методы | GET, POST |
| Формат ответа | JSON |
| Тип платежа | В запросе обязательно payment_type=card |
Параметры запроса
Обязательные
| Параметр | Тип | Описание |
|---|---|---|
partner_id | Integer | Ваш уникальный ID в системе 1Payment. |
payment_type | String | Всегда значение card. |
project_id | Integer | Идентификатор вашего проекта. |
account | String | Номер банковской карты. |
card_holder | String | Имя держателя карты (как указано на карте). |
year | String | Год окончания действия карты, две последние цифры (например, 22). |
month | String | Месяц окончания действия карты (например, 01). |
cvc | String | CVV/CVC код карты. |
amount | Number | Сумма платежа в валюте проекта (например, 50.00). |
user_data | String | Ваш внутренний ID заказа (вернётся в колбеке). |
shop_url | String | URL сайта источника платежа. |
sign | String | Контрольная подпись запроса (см. раздел «Подпись»). |
Дополнительные
| Параметр | Тип | Описание |
|---|---|---|
description | String | Описание платежа. |
subscription | Integer | Только для подписочных платежей: передайте 1, чтобы получить token для рекуррентных списаний. |
token | String | ID токена привязанной подписки. |
ip | String | IP-адрес плательщика. |
destination | String | Номер карты для пополнения (опционально, для P2P-сценариев). |
return_url | String | URL, куда вернуть плательщика после оплаты в банке. |
user_id | String | ID плательщика в вашей системе. |
Параметры 3-D Secure 2.x
Передаются для прохождения 3-D Secure версии 2.x.
| Параметр | Тип | Описание |
|---|---|---|
ext_notification_url | String | Адрес возврата плательщика после 3DS (TermUrl). |
ext_browser_accept_header | String | Содержимое HTTP-заголовка Accept (макс. 2048 символов). |
ext_browser_color_depth | String | Битовая глубина цветовой палитры браузера. |
ext_browser_ip | String | IP-адрес браузера плательщика. |
ext_browser_language | String | Язык браузера, IETF BCP47 (макс. 8 символов). |
ext_browser_screen_height | String | Высота экрана браузера, window.screen.height (макс. 6 символов). |
ext_browser_screen_width | String | Ширина экрана браузера, window.screen.width (макс. 6 символов). |
ext_browser_tz | String | Смещение локального времени от UTC в минутах (макс. 5 символов). |
ext_browser_user_agent | String | Содержимое HTTP-заголовка User-Agent (макс. 2048 символов). |
ext_browser_java_enabled | String | Включён ли JavaScript: true или false. |
ext_window_width | String | Ширина окна браузера, window.innerWidth (в пикселях). |
ext_window_height | String | Высота окна браузера, 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=22init_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=22bc2592ca4405860b254b7c07d56a095aПримеры запроса
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_id | ID платежа в системе 1Payment; используйте для запроса статуса. |
status | Числовой код состояния (2 — ожидание). |
status_description | Текстовое описание статуса (PENDING и др.). |
status_code | Код ошибки при отказе (см. коды отказов). |
redirect_url | URL для перенаправления плательщика при прохождении 3-D Secure (может отсутствовать). |
Если в ответе присутствует redirect_url, перенаправьте плательщика по этому адресу для завершения оплаты.
Ошибка запроса (400):
{
"error_code": 2
}Тестирование
Для тестирования платежей по картам можно использовать следующие данные:
| Результат | Номер карты | CARDHOLDER | EXP | CVC |
|---|---|---|---|---|
| Успешная оплата | 4111111111111111 | TEST | 01/01 | 123 |
| Неуспешная оплата | 4111111111111112 | TEST | 01/01 | 123 |
Уведомления о статусе (колбеки)
После изменения статуса на ваш notify_url будет отправлено POST-уведомление в формате JSON.
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
payment_type | String | Да | Тип платежа (card). |
order_id | String | Да | ID платежа в системе 1Payment. |
project_id | Integer | Да | ID вашего проекта. |
status | Integer | Да | Статус: 2 (ожидание), 3 (успех), 4 (отказ). |
status_description | String | Да | PENDING, SUCCESS или FAILURE. |
redirect_url | String | Нет | URL для перенаправления, если требуется завершить оплату. |
init_time | String | Да | Время создания платежа. |
status_time | String | Да | Время получения финального статуса. |
merchant_price | Number | Да | Стоимость для плательщика. |
init_price | Number | Нет | Сумма при инициации. |
user_price | Number | Да | Отчисления партнёра. |
currency | String | Да | Валюта платежа (ISO 4217). |
account | String | Да | Маска номера карты. |
user_data | String | Да | ID транзакции, переданный при создании. |
sign | String | Да | Контрольная подпись колбека. |
token | String | Нет | Идентификатор сохранённой карты при успешной оплате (если подключено). |
test | Integer | Нет | 1 при тестовых платежах. |
status_code | String | Нет | Код причины отказа. |
Важно: ваш сервер должен вернуть HTTP 200 OK. Иначе система повторяет отправку колбека раз в минуту в течение 10 минут.
Проверка подписи колбека: MD5 от всех параметров в алфавитном порядке через & + API_KEY (без префикса init_payment). Подробнее — в разделе Формат запроса к API.