Skip to main content

Обзор

Redirect-интеграция позволяет перенаправить клиента на hosted-страницу оплаты Meridian. Клиент увидит реквизиты, таймер обратного отсчёта и кнопку для открытия банковского приложения (deeplink). После завершения платежа клиент автоматически перенаправляется обратно на ваш сайт.
Поддерживаемые банки: Сбербанк, ВТБ, Т-Банк, Газпромбанк, Солидарность
КодБанкDeeplink
1ВТБ
2Сбербанк
3Газпромбанк
4Т-Банк
5Солидарность

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

POST https://api.meridian.vip/api/v1/transgran/redirect-payments

Обязательные параметры

ПараметрТипОписание
amountnumberСумма платежа в рублях (не в копейках). Пример: 1000 = 1000 RUB
currencystringКод валюты. Только "RUB"
banknumberПредпочтительный банк клиента. См. Коды банков
internalIdstringУникальный идентификатор заказа в вашей системе (ключ идемпотентности)
customerEmailstringEmail клиента
notificationUrlstringURL для webhook-уведомлений
notificationTokenstringСекретный токен для подписи webhook-уведомлений
successUrlstringURL для перенаправления при успешной оплате
cancelUrlstringURL для перенаправления при отмене
errorUrlstringURL для перенаправления при ошибке/истечении

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

const crypto = require('crypto');

function calculateSignature(method, url, body, secret) {
  const stringToSign = method + url + (body || '');
  const hmac = crypto.createHmac('sha256', secret);
  hmac.update(stringToSign);
  return hmac.digest('base64');
}

const method = 'POST';
const url = 'https://api.meridian.vip/api/v1/transgran/redirect-payments';
const body = JSON.stringify({
  amount: 1000,
  currency: 'RUB',
  bank: 2, // Sberbank
  internalId: 'order-12345',
  customerEmail: '[email protected]',
  notificationUrl: 'https://your-site.com/webhooks/transgran',
  notificationToken: 'your-webhook-secret-token',
  successUrl: 'https://your-site.com/payment/success',
  cancelUrl: 'https://your-site.com/payment/cancel',
  errorUrl: 'https://your-site.com/payment/error'
});

const apiKey = 'meridian_abc123...:meridian_xyz789...';
const [keyId, secret] = apiKey.split(':');
const signature = calculateSignature(method, url, body, secret);

const response = await fetch(url, {
  method,
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': apiKey,
    'X-Signature': signature
  },
  body
});

const result = await response.json();

// Перенаправьте клиента на страницу оплаты
console.log('Redirect URL:', result.paymentUrl);
// → "https://securepaymer.com/pay/aB3xK9mN..."

Пример ответа (успех)

HTTP Status: 201 Created
{
  "id": "cm3k8x7y80001z8j4k5m6n7o8",
  "status": "new",
  "bankName": "sberbank",
  "amount": "1000",
  "currency": "RUB",
  "expireAt": "2025-11-03T15:10:00.000Z",
  "dealRequisites": "{\"bankName\":\"garant_bank\",\"cardNumber\":\"**** 1234\",\"fullName\":\"Ivan Ivanov\"}",
  "dealRate": "95.50",
  "createdAt": "2025-11-03T15:00:00.000Z",
  "updatedAt": "2025-11-03T15:00:00.000Z",
  "internalId": "order-12345",
  "merchantName": "MerchantName",
  "clientEmail": "[email protected]",
  "paymentUrl": "https://securepaymer.com/pay/aB3xK9mNpQ7rS2tU4vW6xY8z"
}
Важно: Поле paymentUrl — это ссылка для перенаправления клиента. Токен в URL является единственным способом авторизации на странице оплаты. Не передавайте его третьим лицам.

Поля ответа

ПолеТипОписание
idstringУникальный идентификатор платежа в системе Meridian
statusstringСтатус: new, processing, paid, expired, failed
bankNamestringЗапрошенный банк из параметра bank. Не является банком назначения — см. dealRequisites
amountstringСумма платежа
currencystringВалюта (RUB)
expireAtstringВремя истечения платежа. ISO 8601
dealRequisitesstringJSON-строка с реквизитами. См. Структура dealRequisites
dealRatestringКурс сделки
createdAtstringВремя создания платежа. ISO 8601
updatedAtstringВремя последнего обновления. ISO 8601
internalIdstringВаш идентификатор заказа
merchantNamestringНазвание мерчанта
clientEmailstringEmail клиента
paymentUrlstringURL для перенаправления клиента на hosted-страницу оплаты

Структура dealRequisites

Поле dealRequisites содержит JSON-строку с реквизитами, куда клиент должен отправить платёж.
Важно: Поле bankName в ответе — это запрошенный банк. Фактический банк назначения находится в dealRequisites.bankName.
ПолеТипОписание
bankNamestringБанк назначения
cardNumberstringНомер карты (может быть частично скрыт)
fullNamestringФИО получателя
phoneNumberstringНомер телефона (для СБП-переводов, опционально)

Проверка статуса

GET https://api.meridian.vip/api/v1/transgran/payments/:id
Используется тот же endpoint, что и для H2H интеграции.

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

const method = 'GET';
const paymentId = 'cm3k8x7y80001z8j4k5m6n7o8';
const url = `https://api.meridian.vip/api/v1/transgran/payments/${paymentId}`;

const signature = calculateSignature(method, url, '', secret);

const response = await fetch(url, {
  method,
  headers: {
    'X-API-Key': apiKey,
    'X-Signature': signature
  }
});

const payment = await response.json();
console.log('Status:', payment.status);

Webhook-уведомления

Webhook-уведомления работают идентично H2H интеграции. При изменении статуса платежа система отправляет POST-запрос на указанный notificationUrl.

Формат и верификация

См. полную документацию в разделе Трансграничные платежи — Webhook.

Создание апелляции

Если клиент оплатил, но статус не изменился, создайте апелляцию. Процесс идентичен H2H интеграции.
POST https://api.meridian.vip/api/v1/transgran/payments/:id/disputes