Не знаю почему у меня сложилась такая ситуация, а в остальном мире проблемы нет.
Commerce 2 последней версии, 8.x-2.20
Сценарий 1: На тестовом сайте (все ясно и работает правильно).
После оплаты пользователь перенаправляется на страницу/checkout/{commerce_order}/{step}/return, в результате чего вызывается метод PaymentCheckoutController->returnPage
В этом методе:
- вызывается метод $payment_gateway_plugin->onReturn($order, $request) (в моем случае Яндекс.Касса)
- и происходит переадресация на следующий шаг $checkout_flow_plugin->redirectToStep($redirect_step_id). В этой переадресации устанавливается все, что нужно для финализации ордера: order_number, locked, placed, cart, checkout_step.
- пользователь попадает на страницу /checkout/{commerce_order}/complete
Сценарий 2: На действующем сайте (после завершения оформления и успешной оплаты в Яндекс.Кассе ордер остается в корзине – работает неправильно).
- После оплаты происходит обращение к странице /payment/notify/{commerce_payment_gateway}, в результате чего вызывается метод PaymentNotificationController->notifyPage. В этом методе, кроме работы с платежом, изменяется статус ордера на «completed».
- Пользователь перенаправляется на ту же страницу (что и в сценарии 1) /checkout/{commerce_order}/{step}/return. Но сразу же в начале метода PaymentCheckoutController->returnPage строка $this->validateStepId($step_id, $order); перенаправляет пользователя на страницу /checkout/{commerce_order}/complete (это происходит, потому что состояние ордера уже не «payment» (как в сценарии 1), a «completed»).
Итого. Не было вызова $checkout_flow_plugin->redirectToStep($redirect_step_id) и финализации ордера в каком-либо другом виде тоже не было.
Как мне представляется проблема не в модуле Яндекс.Кассы, а в чем-то другом, потому что весь код, который я описал, находится в модулях Commerce 2.
Идеи пока закончились. Если кто-то может сообщить, как в его магазине происходит финализация ордера по сценарию 2 или что-то посоветовать, буду очень признателен. Спасибо!
Комментарии
Точно могу утверждать, что модуль от Яндекса, не то что с ошибками, а написан без понимания полной интеграции с commerce 2.
Если выбираете Яндекс.Кассу, то остаетесь один на один со всеми проблемами.
Яндес.Кассу в часности и Яндекс в общем - не рекомендую подходить даже близко!
Альтернативы?
Кастом.
Я вам ранее уже отвечал, что я решил вопрос кастомным модулем. И это даже не по причине глючности модуля, а из-за особенностей процесса чекаута конкретного проекта. Использовал только библиотеку yandex-checkout-sdk-php. Возможно и вам имеет смысл сделать кастомный контроллер, где произвольным образом делать необходимую проверку, ставить нужные флаги заказам и редиректить куда нужно (сам модуль не отключать, только подставить другой адрес/контроллер).
В настоящий момент у меня вопросов и проблем не осталось. Мое сообщение выше - это не крик отчаянья, а заключение по проделанной работе
Спасибо всем, кто близко воспринял мою ситуацию!