Интеграция платёжной системы iPay на сайт

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Интеграция платёжной системы iPay на сайт
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Интеграция платёжной системы iPay на сайт

iPay — украинский платёжный сервис, ориентированный на малый и средний бизнес. Поддерживает карты Visa, Mastercard, оплату через Приват24, а также токенизацию для повторных списаний. Документация доступна на сайте ipay.ua, API — REST с JSON.

Регистрация и получение ключей

После регистрации в системе 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');

    // Подпись: HMAC-SHA512 от конкатенации параметров
    $body = [
        'auth' => [
            'mch_id'   => $mchId,
            'salt'     => $salt,
            'sign'     => '', // будет заменено
        ],
        'transaction' => [
            'mch_id'           => $mchId,
            'srv_id'           => 1, // ID услуги из ЛК
            '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();
}

// Использование:
$result = createIPayTransaction(12345, 1500.00, 'Заказ #12345');
$paymentUrl = $result['url']; // редирект покупателя

Обработка уведомления

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']; // наш order ID

    if ($status === 'SUCCESS') {
        Order::where('id', $extId)->update([
            'status'         => 'paid',
            'transaction_id' => $data['transaction']['id'],
        ]);
    }

    return response()->json(['ok' => true]);
}

Статусы транзакции: SUCCESS, FAILURE, PROCESSING, REFUNDED.

Проверка статуса транзакции

Дополнительно к webhook — проверка статуса по запросу на странице return:

public function return(Request $request): View
{
    $extTrnId = $request->input('ext_trn_id');

    $body = [
        'auth' => [
            'mch_id' => env('IPAY_MERCHANT_ID'),
            'salt'   => env('IPAY_SALT'),
            'sign'   => hash_hmac('sha512', $extTrnId, env('IPAY_SIGN_KEY')),
        ],
        'request' => ['ext_trn_id' => $extTrnId],
    ];

    $response = Http::post('https://api.ipay.ua/api/v1/transactions/info', $body);
    $status = $response->json('transaction.status');

    $order = Order::where('id', $extTrnId)->firstOrFail();
    return view('payment.result', ['paid' => $status === 'SUCCESS', 'order' => $order]);
}

Токенизация

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);

Сроки активации — 2–4 рабочих дня после верификации. Лимиты на транзакции в первые месяцы работы — уточнять у менеджера.