Skip links

Пошаговая инструкция по интеграции Яндекс Сплит на CMS Drupal

Эта инструкция поможет вам подключить сервис “Сплит” от Яндекса (оплата частями) на весь каталог вашего интернет-магазина шин и дисков. Это повысит конверсию посетителей в покупателей, предоставив им удобный способ оплаты покупок в рассрочку.

Часть 1: Подготовительный этап

Шаг 1: Регистрация в Яндекс Пэй для бизнеса

  1. Перейдите на официальный сайт Яндекс Пэй для бизнеса.

  2. Нажмите кнопку “Подключить” или “Начать подключение”.

  3. Заполните регистрационную форму, указав следующие данные:

    • Название компании
    • ИНН
    • Контактные данные ответственного лица
    • Юридический адрес
    • URL вашего сайта 
  4. Дождитесь одобрения заявки от Яндекса. Обычно это занимает от 1 до 3 рабочих дней.

Шаг 2: Получение API-ключей

  1. После одобрения заявки войдите в личный кабинет Яндекс Пэй.
  2. Перейдите в раздел “Настройки” → “Ключи Яндекс Пэй со Сплитом Merchant API”.
  3. Нажмите кнопку “Выпустить ключ”.
  4. Сохраните полученный ключ в надежном месте — он понадобится для интеграции.
  5. Настройте Callback URL, указав адрес вашего сервера, который будет обрабатывать уведомления от Яндекс Пэй (например, https://site.ru/yandex-pay/callback).

Часть 2: Настройка бэкенд-интеграции с Drupal

Шаг 3: Установка необходимых модулей Drupal

  1. Войдите в административную панель Drupal сайта kolesa812.ru.

  2. Перейдите в раздел “Расширения” (Extend).

  3. Установите следующие модули (если они еще не установлены):

    • Commerce (если используется для магазина)
    • Libraries API
    • Entity API
    • JSON:API (для Drupal 8+)
  4. Создайте новый модуль для интеграции с Яндекс Пэй и Сплит:

    mkdir -p sites/all/modules/custom/yandex_pay_split
    
  5. Создайте основные файлы модуля:

    • yandex_pay_split.info.yml — информация о модуле
    • yandex_pay_split.module — основная функциональность
    • yandex_pay_split.install — скрипты установки/удаления
    • src/Controller/YandexPaySplitController.php — контроллер для обработки API-запросов

Шаг 4: Настройка обработки Callback URL

  1. Создайте маршрут для обработки Callback URL в файле yandex_pay_split.routing.yml:

    yandex_pay_split.callback:
      path: '/yandex-pay/callback'
      defaults:
        _controller: '\Drupal\yandex_pay_split\Controller\YandexPaySplitController::handleCallback'
      requirements:
        _access: 'TRUE'
    
  2. Реализуйте контроллер для обработки вебхуков от Яндекс Пэй:

    namespace Drupal\yandex_pay_split\Controller;
    
    use Drupal\Core\Controller\ControllerBase;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\JsonResponse;
    
    class YandexPaySplitController extends ControllerBase {
      
      public function handleCallback(Request $request) {
        // Получаем JWT токен из запроса
        $jwtToken = $request->getContent();
        
        // Проверка подлинности JWT токена
        $isValid = $this->validateJwtToken($jwtToken);
        
        if (!$isValid) {
          return new JsonResponse(['status' => 'fail', 'reasonCode' => 'FORBIDDEN'], 403);
        }
        
        // Обработка данных запроса...
        // Логика обработки заказа...
        
        return new JsonResponse(['status' => 'success']);
      }
      
      private function validateJwtToken($token) {
        // Код валидации JWT токена с использованием публичных ключей Яндекса
        // ...
      }
    }
    

Шаг 5: Настройка API для интеграции с frontend

  1. Создайте сервис для работы с API Яндекс Пэй в файле src/YandexPayService.php:

    namespace Drupal\yandex_pay_split;
    
    class YandexPayService {
      private $apiKey;
      private $merchantId;
      private $apiUrl;
      
      public function __construct() {
        $this->apiKey = \Drupal::config('yandex_pay_split.settings')->get('api_key');
        $this->merchantId = \Drupal::config('yandex_pay_split.settings')->get('merchant_id');
        $this->apiUrl = 'https://pay.yandex.ru/api/v1/';
      }
      
      public function createOrder($orderData) {
        // Код для создания заказа через API...
      }
      
      public function getOrderStatus($orderId) {
        // Код для проверки статуса заказа...
      }
    }
    
  2. Создайте форму настроек в административной панели:

    namespace Drupal\yandex_pay_split\Form;
    
    use Drupal\Core\Form\ConfigFormBase;
    use Drupal\Core\Form\FormStateInterface;
    
    class YandexPaySplitSettingsForm extends ConfigFormBase {
      // Реализация формы настроек...
    }
    

Часть 3: Интеграция Яндекс Сплит на весь каталог товаров

Шаг 6: Добавление JS SDK на все страницы каталога

  1. Создайте файл JavaScript js/yandex-pay-split.js в вашем модуле:

    (function ($, Drupal) {
      Drupal.behaviors.yandexPaySplit = {
        attach: function (context, settings) {
          // Код инициализации SDK Яндекс Пэй
          const script = document.createElement('script');
          script.src = 'https://pay.yandex.ru/sdk/v1/pay.js';
          script.onload = function() {
            initYandexPay();
          };
          document.head.appendChild(script);
          
          function initYandexPay() {
            if (typeof YaPay !== 'undefined') {
              // Инициализация Яндекс Пэй SDK
              const merchantId = drupalSettings.yandexPaySplit.merchantId;
              // ...
            }
          }
        }
      };
    })(jQuery, Drupal);
    
  2. Добавьте библиотеку в файл yandex_pay_split.libraries.yml:

    yandex_pay_split:
      version: 1.x
      js:
        js/yandex-pay-split.js: {}
      dependencies:
        - core/jquery
        - core/drupalSettings
    
  3. Подключите библиотеку на все страницы каталога в yandex_pay_split.module:

    /**
     * Implements hook_page_attachments().
     */
    function yandex_pay_split_page_attachments(array &$attachments) {
      $current_path = \Drupal::service('path.current')->getPath();
      
      // Проверяем, находимся ли мы на странице каталога
      if (strpos($current_path, '/shiny') === 0 || strpos($current_path, '/litye-diski') === 0 || strpos($current_path, '/shtampovannye-diski') === 0) {
        $attachments['#attached']['library'][] = 'yandex_pay_split/yandex_pay_split';
        $attachments['#attached']['drupalSettings']['yandexPaySplit'] = [
          'merchantId' => \Drupal::config('yandex_pay_split.settings')->get('merchant_id'),
        ];
      }
    }
    

Шаг 7: Добавление бейджей Сплит в шаблон каталога товаров

  1. Создайте файл templates/commerce-product--badge.html.twig (путь может отличаться в зависимости от вашей темы):

    {# Добавляем к существующему шаблону товара бейдж Сплит #}
    <div class="yandex-pay-badge-container" data-product-id="{{ product_id }}" data-product-price="{{ product_price }}">
      <!-- Сюда будет вставлен бейдж через JavaScript -->
    </div>
    
  2. Добавьте код для вставки бейджей в файл js/yandex-pay-split.js:

    // В функции initYandexPay()
    
    // Добавляем бейджи на все товары в каталоге
    $('.yandex-pay-badge-container').each(function() {
      const productPrice = $(this).data('product-price');
      const container = this;
      
      // Добавляем бейдж Сплит для каждого товара
      YaPay.mountBadge(
        container,
        {
          type: 'bnpl',
          amount: productPrice,
          size: 'm',
          variant: 'detailed',
          color: 'primary',
          merchantId: merchantId,
        }
      );
    });
    

Шаг 8: Массовое добавление виджетов Сплит в карточки товаров

  1. Добавьте JavaScript код для создания виджетов на страницах товаров:

    // Проверяем, находимся ли мы на странице товара
    if ($('.product-detail').length > 0) {
      const productPrice = $('.product-price').data('price');
      const widgetContainer = $('.product-payment-options');
      
      // Инициализируем сессию оплаты
      const paymentSession = YaPay.createSession({
        merchantId: merchantId,
        paymentMethods: ['SPLIT'],
        currencyCode: 'RUB',
        cart: {
          items: [
            {
              productId: $('.product-detail').data('product-id'),
              quantity: {
                count: "1"
              }
            }
          ]
        }
      });
      
      // Добавляем виджет Сплит
      paymentSession.mountWidget(
        widgetContainer[0],
        { widgetType: YaPay.WidgetType.BnplPreview }
      );
    }
    
  2. Модифицируйте шаблон карточки товара, чтобы добавить контейнер для виджета:

    {# В шаблоне карточки товара #}
    <div class="product-payment-options">
      <!-- Сюда будет добавлен виджет Сплит -->
    </div>
    

Шаг 9: Модификация процесса оформления заказа для поддержки Сплит

  1. Добавьте опцию оплаты через Сплит в форму оформления заказа:

    /**
     * Implements hook_form_FORM_ID_alter().
     */
    function yandex_pay_split_form_commerce_checkout_flow_multistep_default_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
      if (isset($form['payment_information']['payment_method'])) {
        $form['payment_information']['payment_method']['#options']['yandex_pay_split'] = t('Оплата частями через Яндекс Сплит');
        
        // Добавляем виджет с графиком платежей
        $form['payment_information']['yandex_split_widget'] = [
          '#type' => 'markup',
          '#markup' => '<div id="yandex-split-payment-widget"></div>',
          '#states' => [
            'visible' => [
              ':input[name="payment_information[payment_method]"]' => ['value' => 'yandex_pay_split'],
            ],
          ],
        ];
        
        // Добавляем JavaScript для отображения виджета
        $form['#attached']['library'][] = 'yandex_pay_split/yandex_pay_split';
      }
    }
    
  2. Реализуйте плагин платежного шлюза для Drupal Commerce:

    namespace Drupal\yandex_pay_split\Plugin\Commerce\PaymentGateway;
    
    use Drupal\commerce_payment\Plugin\Commerce\PaymentGateway\OffsitePaymentGatewayBase;
    
    /**
     * @CommercePaymentGateway(
     *   id = "yandex_pay_split",
     *   label = @Translation("Яндекс Сплит"),
     *   display_label = @Translation("Оплата частями через Яндекс Сплит"),
     * )
     */
    class YandexPaySplit extends OffsitePaymentGatewayBase {
      // Реализация платежного шлюза...
    }
    

Шаг 10: Добавление информации о Сплит в каталог

  1. Создайте блок с информацией о Сплит в файле src/Plugin/Block/YandexSplitInfoBlock.php:

    namespace Drupal\yandex_pay_split\Plugin\Block;
    
    use Drupal\Core\Block\BlockBase;
    
    /**
     * @Block(
     *   id = "yandex_split_info_block",
     *   admin_label = @Translation("Информация о Яндекс Сплит"),
     * )
     */
    class YandexSplitInfoBlock extends BlockBase {
      public function build() {
        return [
          '#theme' => 'yandex_split_info_block',
          '#attached' => [
            'library' => [
              'yandex_pay_split/yandex_pay_split',
            ],
          ],
        ];
      }
    }
    
  2. Создайте шаблон для блока в templates/yandex-split-info-block.html.twig:

    <div class="yandex-split-info">
      <h3>Оплата частями с Яндекс Сплит</h3>
      <p>Платите за покупки частями без переплат! Первый платеж сегодня, остальные — каждые две недели.</p>
      <div id="yandex-split-info-widget"></div>
    </div>
    
  3. Разместите этот блок на странице каталога через административный интерфейс Drupal.

Часть 4: Тестирование и запуск

Шаг 11: Тестирование интеграции

  1. Перейдите в режим тестирования Яндекс Пэй в личном кабинете.
  2. Проверьте отображение бейджей Сплит на страницах каталога.
  3. Проверьте работу виджетов на страницах товаров.
  4. Протестируйте оформление заказа с оплатой через Сплит.
  5. Убедитесь, что Callback URL корректно обрабатывает уведомления.

Шаг 12: Переход в боевой режим

  1. После успешного тестирования переведите интеграцию в боевой режим через личный кабинет Яндекс Пэй.
  2. Обновите API-ключи в настройках модуля.
  3. Проверьте, что все компоненты (бейджи, виджеты, форма оплаты) корректно работают в боевом режиме.

Дополнительные рекомендации

  1. Оптимизация производительности: Используйте кэширование запросов к API Яндекс Пэй, чтобы не превышать лимиты запросов.

  2. Мониторинг: Настройте логирование всех запросов и ответов API для оперативного выявления и устранения ошибок.

  3. Адаптация дизайна: Настройте стили бейджей и виджетов Яндекс Сплит, чтобы они гармонично вписывались в дизайн вашего сайта.

  4. Информирование клиентов: Добавьте информационный блок или страницу с подробным описанием условий оплаты через Яндекс Сплит.

  5. Безопасность: Регулярно обновляйте публичные ключи для проверки JWT-токенов от Яндекс Пэй и используйте HTTPS для всех запросов.

Подпишись на наш паблик в ВК

Там мы делимся своим экспертным мнением: публикуем краткие обзоры статей, анализируем UX-решения, делаем разборы продуктов, делимся образовательными курсами и чек-листами.

Explore
Drag