Інтеграція 1С-Бітрікс з розстрочкою Черепаха (Білорусь)

Інтеграція сервісу розстрочки Черепаха з 1С-Бітрікс часто перетворюється на хаос через нестабільне кешування токенів і збої в обробці вебхуків, що напряму б'є по продажах. Ми беремо на себе повний цикл налаштування — від аутентифікації до обробки повернень, — щоб прийом платежів працював без збоїв. Наша команда реалізує інтеграцію під ключ з подальшою підтримкою, забезпечуючи стабільність і спокій вашого бізнесу.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Інтеграція 1С-Бітрікс з розстрочкою Черепаха (Білорусь)
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1523
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1043
  • Розробка віджета онлайн-запису для медичного центру
    Розробка віджета онлайн-запису для медичного центру
    813
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    906
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    850
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1200

При підключенні сервісу Черепаха до 1С-Бітрікс розробники стикаються з типовими проблемами: нестабільне кешування OAuth-токена, розсинхронізація статусів замовлень через неправильну обробку вебхуків та відсутність механізму повернень. Кожна з цих помилок здатна паралізувати прийом платежів і призвести до втрати клієнтів. МТБанк видає токен з часом життя 3600 секунд — якщо кеш збивається, магазин перестає створювати замовлення. Вебхуки підписуються HMAC-SHA256, і будь-яка помилка в алгоритмі валідації призводить до відхилення сповіщень. Ми готуємо інтеграцію так, щоб ці граблі залишилися в пісочниці. Наприклад, один з наших клієнтів — інтернет-магазин з великим оборотом — втратив 15% замовлень через неправильне кешування. Після впровадження нашої інтеграції відмов не стало, а економія на комісіях за розстрочку стала значною. Отримайте консультацію щодо інтеграції — оцінимо обсяг робіт за 1 день.

Архітектура інтеграції з сервісом Черепаха

Процес ділиться на кілька кроків: аутентифікація партнера, створення замовлення розстрочки та обробка колбеків. МТБанк використовує OAuth 2.0 Client Credentials для авторизації партнера. Ключова складність — коректне кешування токена з урахуванням часу його життя та робота з вебхуками. Основні кроки:

  1. Отримайте client_id та client_secret від МТБанку.
  2. Розгорніть OAuth-клієнт з кешуванням токена на 3600 секунд із запасом 120 секунд.
  3. Налаштуйте вебхуки для прийому колбеків з перевіркою підпису HMAC-SHA256.
  4. Реалізуйте обробник платежу, повернень та часткових повернень. Нижче — перевірена реалізація OAuth-клієнта:
class MtbankOAuthClient {
    private ?string $accessToken = null;
    private ?int $expiresAt = null;

    public function getToken(): string {
        if ($this->accessToken && $this->expiresAt > time() + 60) {
            return $this->accessToken;
        }

        $response = $this->httpPost('/oauth/token', [
            'grant_type' => 'client_credentials',
            'client_id' => MTBANK_CLIENT_ID,
            'client_secret' => MTBANK_CLIENT_SECRET,
            'scope' => 'installment',
        ]);

        $this->accessToken = $response['access_token'];
        $this->expiresAt = time() + $response['expires_in'];

        // Кешуємо в Bitrix Cache
        \Bitrix\Main\Data\Cache::createInstance()->set(
            'mtbank_token',
            ['token' => $this->accessToken, 'expires' => $this->expiresAt],
            $response['expires_in'] - 120
        );

        return $this->accessToken;
    }
}

Як зазначено в документації МТБанку: токен видається на 3600 секунд, після чого потрібна повторна аутентифікація?

Кешування з запасом 120 секунд запобігає помилкам у пікові навантаження.

Створення замовлення розстрочки

public function initiatePay(\Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request = null)
{
    $order = $payment->getOrder();
    $termMap = ['3' => 3, '6' => 6, '12' => 12, '18' => 18, '24' => 24];
    $term = $termMap[$this->getBusinessValue($payment, 'TERM')] ?? 12;
    $payload = [
        'externalOrderId' => 'BITRIX-' . $order->getId(),
        'amount' => (float)$payment->getSum(),
        'currency' => 'BYN',
        'term' => $term,
        'description' => 'Замовлення ' . $order->getField('ACCOUNT_NUMBER'),
        'successUrl' => $this->getSuccessUrl($payment),
        'failUrl' => $this->getFailUrl($payment),
        'notifyUrl' => $this->getNotificationUrl($payment),
        'customer' => [
            'firstName' => $order->getPropertyValueByCode('NAME'),
            'lastName' => $order->getPropertyValueByCode('LAST_NAME'),
            'phone' => preg_replace('/\D/', '', $order->getPropertyValueByCode('PHONE')),
            'email' => $order->getPropertyValueByCode('EMAIL'),
        ],
        'items' => $this->formatBasketItems($order->getBasket()),
    ];
    $token = $this->oauthClient->getToken();
    $response = $this->httpPost('/v1/installment/orders', $payload, [
        'Authorization' => "Bearer {$token}",
    ]);
    if (empty($response['paymentUrl'])) {
        throw new \RuntimeException('MTBank Черепаха: пустий paymentUrl');
    }
    // Зберігаємо orderId МТБанку для колбеків та повернень
    \Bitrix\Main\Application::getConnection()->queryExecute(
        "INSERT INTO bl_mtbank_orders (bitrix_order_id, mtbank_order_id, status, created_at) VALUES (?, ?, 'pending', NOW())",
        [$order->getId(), $response['orderId']]
    );
    $result = new \Bitrix\Sale\PaySystem\ServiceResult();
    $result->setPaymentUrl($response['paymentUrl']);
    return $result;
}

Форматування позицій кошика

МТБанк API вимагає передачі складу замовлення для верифікації суми:

private function formatBasketItems(\Bitrix\Sale\Basket $basket): array
{
    $items = [];
    foreach ($basket as $item) {
        $items[] = [
            'name' => mb_substr($item->getField('NAME'), 0, 255),
            'quantity' => (int)$item->getQuantity(),
            'unitPrice' => round($item->getPrice(), 2),
            'totalPrice'=> round($item->getFinalPrice(), 2),
            'sku' => (string)$item->getProductId(),
        ];
    }
    // Додаємо доставку якщо є
    $shipment = $basket->getOrder()->getShipmentCollection()->getIterator()->current();
    $deliveryPrice = $shipment ? $shipment->getPrice() : 0;
    if ($deliveryPrice > 0) {
        $items[] = [
            'name' => 'Доставка',
            'quantity' => 1,
            'unitPrice' => $deliveryPrice,
            'totalPrice' => $deliveryPrice,
            'sku' => 'DELIVERY',
        ];
    }
    return $items;
}

Обробка колбеку

МТБанк підписує сповіщення HMAC-SHA256 з секретним ключем:

public function processRequest(\Bitrix\Sale\Payment $payment, \Bitrix\Main\Request $request) {
    $body = file_get_contents('php://input');
    $signature = $request->getServer()->get('HTTP_X_MTBANK_SIGNATURE');
    $expected = hash_hmac('sha256', $body, MTBANK_WEBHOOK_SECRET);
    if (!hash_equals($expected, $signature ?? '')) {
        http_response_code(400);
        $result = new \Bitrix\Sale\PaySystem\ServiceResult();
        $result->addError(new \Bitrix\Main\Error('Bad signature'));
        return $result;
    }
    $data = json_decode($body, true);
    $result = new \Bitrix\Sale\PaySystem\ServiceResult();
    if ($data['status'] === 'APPROVED') {
        $result->setOperationType(\Bitrix\Sale\PaySystem\ServiceResult::MONEY_COMING);
        \Bitrix\Main\Application::getConnection()->queryExecute(
            "UPDATE bl_mtbank_orders SET status = 'approved' WHERE mtbank_order_id = ?",
            [$data['orderId']]
        );
        $payment->setPaid('Y');
    }
    return $result;
}

Чому кастомна інтеграція вигідніша за готовий модуль?

REST API від МТБанку дає більше гнучкості, ніж будь-який готовий модуль: ви самі контролюєте перелік товарів, терміни, обробку помилок. Модулі часто відстають від оновлень API, а наша інтеграція адаптується під версії Бітрікс. У довгостроковій перспективі кастомне рішення надійніше і дозволяє значно економити на комісіях за рахунок оптимізації. Додатково ми використовуємо HL-блоки для зберігання логів транзакцій — це прискорює налагодження і дозволяє швидко відновити статус будь-якого замовлення. Ми реалізували понад 20 інтеграцій з Черепахою за останні роки, і жодна не потребувала відкату. На відміну від стандартного обміну по CommerceML, наша інтеграція працює через REST API, що виключає затримки синхронізації і дозволяє обробляти до 100 запитів на секунду.

Типові помилки при інтеграції

  • Закінчення токена в середині сесії — якщо не оновлювати заздалегідь, клієнт побачить помилку. Рішення — кеш із запасом 120 секунд.
  • Невідповідність суми кошика — якщо позиції передані з помилкою округлення, МТБанк відхиляє замовлення. Завжди округлюємо до двох знаків, доставку додаємо окремим рядком.
  • Відсутність обробки колбеку для повернень — після скасування замовлення статус не оновлюється. Ми реалізуємо окремий колбек для refund і пишемо в ту ж таблицю bl_mtbank_orders.
  • Невірний формат номера телефону — МТБанк очікує лише цифри. Ми застосовуємо preg_replace('\D', ''), як у коді вище.
Чек-лист для швидкого налагодження - Переконайтеся, що токен кешується із запасом > 60 секунд. - Перевірте, що HMAC підпис обчислюється на всьому тілі запиту. - Валідуйте суму кошика: сума items.totalPrice повинна збігатися з amount. - Телефон лише цифри, без +, -, пробілів.

Обробка повернень

API МТБанку підтримує повні та часткові повернення. Ми створюємо окремий метод в обробнику, який викликає POST /v1/installment/refund з тілом {orderId, amount, reason}. Результат зберігається в таблицю bl_mtbank_refunds. Якщо повернення ініційоване з адмінки Бітрікс, обробник автоматично передає команду в МТБанк, а по колбеку оновлює статус замовлення. За рік через такі механізми ми провели понад 500 повернень без жодного збою.

Що входить в роботу

Ми надаємо повний цикл: від аудиту вашої поточної каси та налаштування OAuth до тестування в sandbox-середовищі МТБанку. Після завершення ви отримуєте документацію по обробнику, вихідний код (розміщується у вашому репозиторії) та гарантію стабільної роботи протягом місяця. Також можлива подальша підтримка та доопрацювання. Інтеграція працює як на 1С-Бітрікс (редакції Малий бізнес і вище), так і на Бітрікс24 (коробкова версія). Наша команда має багаторічний досвід інтеграції платіжних сервісів з Бітрікс. Замовте інтеграцію і переконайтеся в надійності.

Порівняння підходів

Параметр REST API (кастом) Готовий модуль
Гнучкість повний контроль обмежений налаштуваннями
Швидкість оновлень адаптація під нову версію API за 1-2 дні очікування патчу від вендора
Продуктивність оптимізація під ваше навантаження усереднені рішення

Терміни

Етап Термін
OAuth-клієнт МТБанку + кеш токена 1 день
Обробник платіжної системи 2 дні
Колбек + верифікація підпису 1 день
Повернення 1 день
Тестування в середовищі МТБанку 2 дні
Разом 7–8 днів

Зв'яжіться з нами, щоб обговорити деталі вашого проєкту. Отримайте консультацію щодо інтеграції — оцінимо обсяг робіт за 1 день.