Просмотров: 4803

Интеграция PayPal с MODX в 2021 году

Информации в рунете по поводу интеграции PayPal на самом деле очень много. Но она настолько не собрана и разбросана по разным источникам, что при последней реализации мы потратили лишних 4-5 часов просто на поиск необходимых обсуждений и комментариев. Для того, чтобы вы так бездарно не тратили своё время, мы сделали данную инструкцию.

Содержание статьи:

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

Регистрация аккаунта

В целом, в регистрации нет ничего сложного, поэтому рассмотрим очень поверхностно.

  1. Идём по адресу: https://www.paypal.com/ru/home выбираем тип «Корпоративный»;
  2. Вводим наш почтовый адрес;
  3. Вводим желаемый пароль;
  4. Далее сведения о юр.лице:
    1. Имя;
    2. Фамилия;
    3. Наименование юридического лица (полное, без сокращений);
    4. Юридический адрес (у ИП нет юр.адреса, но можно указать по прописке).
    5. Ещё сведения о компании:
      1. Правовая форма;
      2. Категория товаров и услуг;
      3. Веб-сайт (необаятельно);
      4. Ещё больше сведений о компании:
        1. Дата рождения;
        2. Гражданство;
        3. Домашний адрес.

Далее, для снятия ограничений необходимо:

  1. Подтвердить электронный адрес;
  2. Добавить и подтвердить мою дебетовую или кредитную карту;

Ну и дождать окончания проверки данных со стороны PayPal. Далее уже опирать на их требования.

Важно: PayPal в отличии от многих других систем оплаты не даст вам просто так добавить сторонний технический доступ для интеграции. Если вы попросите клиента добавить вам доступ, PayPal не даст вам полных прав, пока вы не прогрузите кучу персональных данных в его систему (вплоть до скана паспорта). Поэтому, мы рекомендуем сразу запрашивать доступ к основному аккаунту, который используется в аккаунте, и не плодить «технические аккаунты» — это ускорит процесс интеграции.

Получение ключей

  1. Переходим по адресу: https://www.paypal.com/businessmanage/credentials/apiAccess;
  2. Авторизовываемся;
  3. Выбираем пункт «Интеграция API-интерфейсов NVP/SOAP (Classic) - Управление учетными данными API»;
  4. На странице настройки выберите пункт «Запросить подпись API»;
  5. После этого открывается страница с тремя параметрами, которые вам понадобятся на следующем шаге:
    1. Логин продавца;
    2. Пароль продавца;
    3. Подпись продавца;

Интеграция сайта

Для интеграции модно использовать стандартный метод оплаты PayPal в minishop2. После небольших правок он до сих пор работает и актуален.

В системных переменных указываем (полученные на предыдущем шаге данные):

  • Логин продавца;
  • Пароль продавца;
  • Подпись продавца;
  • Валюту.

Пример заполнения:

Интеграция PayPal с MODX в 2021 году

Возможные проблемы при интеграции

Тестирование оплаты в России и СНГ: To comply with international regulations, this transaction has been declined

Если вы попробуете протестировать оплату через PayPal в СНГ, то он вас просто выбросит с ошибкой: «To comply with international regulations, this transaction has been declined». Если пробовать заходить через Tor или иные способы обхода этого ограничения, то вас просто не пустит бесконечная капча.

Единственный простой способ – либо попросить протестировать весь сценарий оплаты знакомого, который реально находится в стране, где данного ограничения нет, либо заказать подобное тестирование на любой бирже фриланса. 

Проблема с SSL: Peer's Certificate issuer is not recognized

Суть проблемы в том, что SSL нет доверия.

  1. Идём по пути: /core/components/minishop2/custom/payment/lib/paypal/cacert.pem
  2. Меняем содержимое на вот это: https://github.com/paypal/TLS-update/blob/master/php/cacert.pem

Проблемы работы с языковыми версиями

Суть проблемы сводиться к тому, что если вы используете языковые версии, которые меняют ваш URL, добавляя к нему /en, /es, /it и т.д., то оплата PayPal ломается, т.к. неверно генерирует ссылку. 

Решение для языковых версий через разные контексты (прим. Babel):

Отсюда: https://modx.pro/help/7214

  1. Ищем переменную $paymentUrl в paypal.class.php по пути: /core/components/minishop2/custom/payment
  2. В /assets/components/minishop2/payment/paypal.php добавить перед переменной $success жёстко прописанные id страниц отмены: 

    if ($context == 'web') {

        $makeId = '277';

    } elseif ($context == 'ru') {

        $makeId = '278';

    }

  3. Заменить на

if ($id = $modx->getOption('ms2_payment_paypal_cancel_id', null, 0)) {

         $cancel = $modx->makeUrl($makeId, $context, $params, 'full');

}

Решение для языковых версий без разных контекстов (прим. Localizator):

  1. Идём по пути: /core/components/minishop2/custom/payment/paypal.class.php
  2. Комментируем 21 строку кода:
    $paymentUrl = $siteUrl . substr($assetsUrl, 1) . 'payment/paypal.php';
  3. Пишем жёсткий вариант:

$paymentUrl = 'https://vashsite.ru/assets/components/minishop2/payment/paypal.php';

Проблема с конвертацией валют

Данная проблема может всплыть, если у вас есть возможность смены языка и соответственно пересчёта валют по языке.

Пример сценария:

  • Пользователь прыгает в любой язык «еврозоны», берёт товары по цене в валюте – евро, и условно, набирает товара на 100 евро.
  • После чего, в момент перехода в корзину, он меняет контекст на рубли;
  • Если по какой-то либо причине у вас на сайте поломана конвертация валют, то интеграция PayPal передаёт только значение – 100, а валюту берёт из системных настроек.
  • Таким образом, в случае ошибки конвертации валют, пользователь может пропихнуть системе покупку не за 100 евро, а за 100 рублей, т.к. со стороны PayPal дополнительной проверки пары «валюта – контекст» - нет.

 


Написать сообщение

Пожалуйста, оцените по 5 бальной шкале