Drupal 8. Commerce 2. Модуль Яндекс.Касса

Главные вкладки

Аватар пользователя mg.bsv mg.bsv 5 августа 2020 в 10:56

Добрый день!

Буду очень признателен, если кто-то поделится информацией (личным опытом).

Для интеграции Яндекс.Кассы в Drupal 8 Яндекс предлагает свой модуль https://kassa.yandex.ru/integration/drupal8-yandexkassa/

Я уже давно наблюдаю за этим решением и убежден, что модуль, предлагаемый Яндексом, не работал и не работает, а техническая поддержка Яндекса игнорирует все проблемы модуля и даже может не ответить на обращение.

Вопросы
1) У кого-нибудь получилось запустить модуль в том виде, в котором его поставляет Яндекс?
2) Модуль нужно расценивать как заготовку (без корректировок не работает) для примера использования их библиотеки https://github.com/yandex-money/yandex-checkout-sdk-php

Буду рад любой информации. Спасибо!

Комментарии

Аватар пользователя OldWarrior OldWarrior 5 августа 2020 в 12:03

1. Модуль вроде вполне себе работал, но оказался бесполезен на одном из проектов - в силу специфической структуры чекаута. Решили вопрос кастомным модулем, но с использованием упомянутой библиотеки yandex-checkout-sdk-php - так было быстрее, поскольку эта библиотека таки обрабатывает ошибки и даёт мало-мальские врэпперы для основных функций API.

2. Не могу как-то однозначно ответить на этот вопрос, поскольку, как писал выше, на проекте модуль оказался бесполезен. Не думаю, что нужны какие-либо корректировки кода (в нашем случае всё заработало), но должен отметить крайне слабое и устаревшее документирование установки, настройки и работы с модулем. До многих вещей приходилось доходить самому.

Аватар пользователя mg.bsv mg.bsv 5 августа 2020 в 12:30

Спасибо за скорый ответ!

а) А эта проблема у вас не возникала? https://drupal.ru/node/141230 (Работа с яндекс кассой в Drupal 8. Кому-нибудь удалось это настроить?)
Нужно отметить, что год назад этой ошибки еще не было, а вот теперь она есть и судя по всему Яндекс не торопиться ее править.

б) Также у меня не решена проблема, когда в тестовом режиме все работает хорошо, а в боевом режиме оплата проходит, но заказ не финализируется, так и остается в корзине, со всеми вытекающими из этого последствиями (Яндекс свою причастность отрицает).

К чему я задаю эти вопросы?
Я пришел к выводу, что полагаться на модуль Яндекс не следует (поддержка по факту отсутствует, модуль не реагирует на обновления самого commerce2). Не хотелось с этим разбираться, но ситуация не меняется уже очень давно. В связи с этим хочу убедиться, что модуль не пригоден, а не я что-то делаю не так.

Аватар пользователя OldWarrior OldWarrior 5 августа 2020 в 13:03

mg.bsv wrote: а) А эта проблема у вас не возникала? https://drupal.ru/node/141230

Возникала (при попытке добавить шлюз), но точно не помню, как решил. Помню, что после копания форумов и документации таки как-то "допёр".

mg.bsv wrote: б) ... Также у меня не решена проблема, когда в тестовом режиме все работает хорошо, а в боевом режиме оплата проходит, но заказ не финализируется, так и остается в корзине ...

Вообще - это странно.

Но не будем забывать, что Я.Касса работает через механизм HTTP-уведомлений. То есть - после осуществления платежа Я.Касса отправляет запрос на специальный роут Друпала. Так вот, настройки этого роута (т.е. просто адрес) для HTTP-уведомлений в ЛК Я.Кассы нужно вбивать раздельно для тестового и боевого режимов (даже если адрес совпадает). Может, здесь это забыли сделать?

Аватар пользователя mg.bsv mg.bsv 5 августа 2020 в 13:16

Я даже боюсь озвучить время, которое было потрачено на переговоры с Яндексом по этому вопросу, но вопрос не решился...
Как я понимаю, подтверждения, что модуль Яндекса не работает я у вас не найду :).
Буду разбираться в коде (пока в сторону "Url для нотификаций" и смотрю). Если кто-то, проходящий мимо, что-то может сообщить по этому вопросу, буду очень рад.
Еще раз спасибо, OldWarrior, за участие!

Аватар пользователя OldWarrior OldWarrior 5 августа 2020 в 13:38

mg.bsv wrote: Как я понимаю, подтверждения, что модуль Яндекса не работает я у вас не найду :).

Я могу только сказать, что модуль, пожалуй, слишком сырой для комфортной и надёжной работы. Либо - наоборот, устарел. В любом случае заставить его работать с первого тычка обычно не получается.

Аватар пользователя davps davps 5 августа 2020 в 13:39

@mgbsv, я уже отвечал в чате друпала, продублирую здесь:

ситуация следующая:
Есть официальная версия модуля от яндекса - https://github.com/yandex-money/yandex-money-cms-v2-drupal8
У этой версии есть проблемы. Она полурабочая.

====
Есть ещё мой форк официального модуля - https://github.com/davpsh/commerce_yandex_checkout. В нём, в свободное время, я дорабатываю логику, исправляю баги и пишу тесты.
Мой форк вроде тоже рабочий, правда я не проверял всех кейсов.

====
Есть такой модуль (появился относительно недавно) - https://www.drupal.org/project/commerce_yandex_kassa
Я общался с человеком который его запостил. Он просто взял код из репа яндекса, переименовал модуль и плагины и что-то там выпилил.
Я не смотрел что он там сделал, но вроде как это рабочий вариант модуля

Аватар пользователя mmitekk mmitekk 5 августа 2020 в 16:55

Как-то однажды писал в Яндекс по этой проблеме. С тех пор настройкой модуля не занимался. Использую PayMaster и Сбербанк в своих проектах.

Аватар пользователя mg.bsv mg.bsv 6 августа 2020 в 18:40

Всем огромное спасибо за комментарии, информации я получил больше, чем ожидал. Еще раз спасибо!

Проблема, видимо, в сборке магазина. Еще не понял, как устранять, но ситуация прояснилась.
Отладка показала, что в методе onNotify (в файле YandexCheckout.php) выполняется блок (как и ожидается):

case PaymentStatus::SUCCEEDED:
          $payment->setRemoteState($paymentInfo->status);
          $order->state = 'completed';
          $order->setCompletedTime(\Drupal::time()->getRequestTime());
          $order->save();
          $payment->save();
          $this->log('Payment complete');

          return new Response('Payment complete', 200);

Согласно коду в onNotify, ордер переводится в состояние 'completed', но при этом (если загрузить ордер после всего процесса), можно видеть:

order_number = NULL
locked = 1
placed = NULL
cart = 1
checkout_step = payment

Это проясняет, почему ордер остается в корзине. Будем искать.

Аватар пользователя mg.bsv mg.bsv 16 августа 2020 в 14:31

Точно могу утверждать, что модуль от Яндекса, не то что с ошибками, а написан без понимания полной интеграции с commerce 2.
Если выбираете Яндекс.Кассу, то остаетесь один на один со всеми проблемами.
 
Яндес.Кассу в часности и Яндекс в общем - не рекомендую подходить даже близко!