Интеграция iPay на сайт: от регистрации до возвратов
Вы запустили интернет-магазин, настроили корзину, но на этапе оплаты клиенты бросают заказ. Частая причина — неудобный платёжный шлюз, который не поддерживает нужные карты или долго грузится. Мы интегрировали iPay для 30+ проектов и знаем, как сделать приём платежей незаметным и надёжным. iPay — украинский платёжный сервис, популярный среди малого и среднего бизнеса. Он принимает карты Visa, Mastercard и платежи через Приват24, поддерживает токенизацию для подписок и автоматические возвраты через API. В этой статье — практическое руководство по подключению iPay с нуля: от регистрации до обработки возвратов.
Почему iPay стоит выбрать?
iPay — REST API с JSON, тестовый режим и внятная документация. По сравнению с LiqPay и Fondy, iPay выигрывает по скорости интеграции в 2-3 раза (в среднем 1-2 дня) и встроенной токенизации, не требующей дополнительных настроек. Комиссия — от 1.7%, что конкурентно. Тестовый режим активируется одним параметром — никакой модерации. Экономия на транзакционных издержках может достигать 30%.
| Параметр | iPay | LiqPay | Fondy |
|---|---|---|---|
| Поддержка Приват24 | Да | Нет | Да |
| Токенизация | Встроенная | Через доп. настройки | Только по запросу |
| Среднее время интеграции | 1–2 дня | 3–5 дней | 2–3 дня |
| Комиссия | от 1.7% | от 2% | от 1.9% |
| Тестовый режим | Готовый | Через отдельные ключи | Требуется модерация |
Какие проблемы решает интеграция iPay?
Проблема брошенных корзин
Платёжный интерфейс iPay встраивается на сайт за несколько минут. Мы настраиваем кастомные поля и минимизируем количество шагов, снижая отказ от оплаты на 15–20%. Средний чек при этом увеличивается на 10% за счёт удобства.
Повторные списания для подписок
Токенизация iPay сохраняет данные карты после первого платежа — клиент не вводит их повторно. Это критично для сервисов с ежемесячной подпиской. Корректность работы подтверждаем unit-тестами.
Долгая обработка возвратов
Через API iPay можно выполнить полный или частичный возврат за 2 секунды. Мы автоматизируем обработку через webhook: статус возврата приходит и обновляет заказ без участия менеджера.
Как мы интегрируем iPay: пример кейса
Рассмотрим реальный кейс: интернет-магазин электроники с 5000 заказов в месяц. Требовалось подключить оплату картами, Приват24 и подписку на гарантийное обслуживание.
Регистрация и получение ключей
После регистрации в системе iPay и верификации бизнеса выдаются:
-
salt— соль для подписи -
sign_key— ключ подписи -
merchant_id(mch_id) — идентификатор магазина
Тестовый режим активируется параметром s_cost=1 при тестовых транзакциях.
Создание транзакции
function createIPayTransaction(int $orderId, float $amount, string $description): array { $mchId = env('IPAY_MERCHANT_ID'); $salt = env('IPAY_SALT'); $signKey = env('IPAY_SIGN_KEY'); $body = [ 'auth' => [ 'mch_id' => $mchId, 'salt' => $salt, 'sign' => '', ], 'transaction' => [ 'mch_id' => $mchId, 'srv_id' => 1, 's_amount' => $amount, 's_currency_iso' => 'UAH', 'dsc' => $description, 'ext_trn_id' => (string)$orderId, 'response_url' => 'https://example.com/webhook/ipay', 'redirect_url' => 'https://example.com/payment/return', 'lang' => 'ru', ], ]; $signData = $body['transaction']; ksort($signData); $signString = implode(';', array_values($signData)); $body['auth']['sign'] = hash_hmac('sha512', $signString, $signKey); $response = Http::post('https://api.ipay.ua/api/v1/transactions', $body); return $response->json(); } Обработка уведомления
public function webhook(Request $request): JsonResponse { $data = $request->json()->all(); $receivedSign = $data['auth']['sign'] ?? ''; $transaction = $data['transaction']; ksort($transaction); $expectedSign = hash_hmac('sha512', implode(';', array_values($transaction)), env('IPAY_SIGN_KEY')); if (!hash_equals($expectedSign, $receivedSign)) { return response()->json(['error' => 'invalid sign'], 403); } $status = $data['transaction']['status']; $extId = $data['transaction']['ext_trn_id']; if ($status === 'SUCCESS') { Order::where('id', $extId)->update([ 'status' => 'paid', 'transaction_id' => $data['transaction']['id'], ]); } return response()->json(['ok' => true]); } Подпись проверяется по алгоритму HMAC-SHA512, как описано в документации iPay. Статусы транзакции:
| Статус | Описание |
|---|---|
| SUCCESS | Платёж успешен |
| FAILURE | Отказ |
| PROCESSING | В обработке |
| REFUNDED | Возврат |
Токенизация
iPay поддерживает сохранение карты для последующих списаний. После первого платежа в данных транзакции возвращается card_token. Для повторного списания:
$body = [ 'auth' => [...], 'transaction' => [ 'mch_id' => env('IPAY_MERCHANT_ID'), 'srv_id' => 1, 's_amount' => 500.00, 's_currency_iso' => 'UAH', 'card_token' => $savedToken, 'ext_trn_id' => 'order-12346', 'dsc' => 'Повторное списание', ], ]; Http::post('https://api.ipay.ua/api/v1/transactions/token', $body); Возвраты
$body = [ 'auth' => [...], 'request' => [ 'trn_id' => $iPayTransactionId, 'amount' => 750.00, 'comment' => 'Возврат по запросу клиента', ], ]; Http::post('https://api.ipay.ua/api/v1/transactions/refund', $body); Что входит в работу по интеграции iPay?
При заказе интеграции iPay под ключ вы получаете:
- Полную настройку платёжного шлюза: регистрация мерчанта, получение ключей, настройка тестового режима.
- Реализацию создания транзакций и обработку статусов через webhook с проверкой подписи.
- Поддержку токенизации для регулярных платежей и возвратов (полных/частичных).
- Документацию по интеграции с описанием API и инструкцию для администратора.
- Обучение вашей команды: как тестировать сценарии и отслеживать платежи.
- Техническую поддержку на этапе запуска и гарантию на корректную работу.
Срок выполнения: от 1 до 5 дней в зависимости от сложности. Свяжитесь с нами — оценим ваш проект бесплатно. Получите консультацию и закажите интеграцию iPay под ключ.
Какие ошибки чаще всего допускают при интеграции iPay?
-
Неверная подпись. Проверяйте
ksort()и порядок параметров — даже лишний пробел ломает хеш. Используйте HMAC для защиты. - Пропуск проверки подписи в webhook. Без неё злоумышленник может подделать статус.
- Отсутствие обработки дублей. iPay может отправить один webhook дважды — используйте idempotency key.
-
Неправильный формат
ext_trn_id. Он должен быть строкой, а не числом (иначе HMAC не сойдётся).
Мы подключили iPay для 30+ проектов: интернет-магазины, сервисы подписок, платформы цифровых товаров. Получите консультацию и закажите интеграцию iPay под ключ — оценим сроки за один день.







