@Petan

Как происходит подтверждение платежа в версии 1.2.7 модуля Яндекс.Касса для OpenCart?

На версии модуля 1.0.5 никаких нареканий не было. Клиент создавал заказ, оплачивал его, в админке изменялся статус, заказ становился видимым в Заказах и т.д.
Обновили модуль до версии 1.2.7. Стали замечать, что клиент оплачивает картой, деньги поступают (это видно в Личном Кабинете Я.Кассы), а заказ продолжает висеть со статусом = 0 в Потеряных заказах.
Судя по логу, статус succeeded приходит, но статус не меняется.

Полез в код. В экшене confirm() вижу такое:
if ($payment === null) {
            $this->failure(sprintf($this->language->get('log_text_order_not_found'), $paymentId, $orderId));
        } elseif (!$payment->getPaid()) {
            $this->failure($this->language->get('log_text_error_payment_capture'));
        } elseif ($payment->getStatus() === PaymentStatus::CANCELED) {
            $this->failure(sprintf($this->language->get('log_text_status_canceled'), $paymentId, $orderId));
        }

        $this->response->redirect($this->url->link('checkout/success', '', true));

странно, про succeeded ни слова... И никакого confirmOrderPayment() и в помине нет. Странно.
Озадачился.
Однако потом додумался посмотреть в код версии 1.0.5 и вот что там:
if ($payment === null) {
            $this->failure('Не найден платёж ' . $paymentId . ' для заказа №' . $orderId);
        } elseif (!$payment->getPaid()) {
            $this->failure('Платёж не был проведён');
        } elseif ($payment->getStatus() === \YaMoney\Model\PaymentStatus::CANCELED) {
            $this->failure('Статус платежа ' . $paymentId . ' заказа №' . $orderId . ' - canceled');
        } elseif ($payment->getStatus() !== \YaMoney\Model\PaymentStatus::SUCCEEDED) {
            $this->getModel()->log('info', 'Confirm order#' . $orderId . ' with payment ' . $payment->getId());
            $this->getModel()->confirmOrder($orderId, $payment);
            if ($payment->getStatus() === \YaMoney\Model\PaymentStatus::WAITING_FOR_CAPTURE) {
                $res = $this->getModel()->capturePayment($payment, false);
                if ($res->getStatus() === \YaMoney\Model\PaymentStatus::SUCCEEDED) {
                    $this->getModel()->confirmOrderPayment(
                        $orderId, $res, $this->getModel()->getKassaModel()->getSuccessOrderStatusId()
                    );
                }
            }
        }
        $this->response->redirect($this->url->link('checkout/success', '', true));

Ну вот! Все на месте! И проверка на succeeded, и confirmOrderPayment().
Но не может же быть, что все так просто.
Кто знает, как в версии 1.2.7 происходит обновление статуса заказа при удаче в оплате?

UPD Рано я радовался. В версии 1.0.5 к confirmOrderPayment() в эвенте confirm() мы попадем только если платеж со статусом waiting_for_capture.
А в версии 1.2.7 в логе я этого статуса уже вообще не вижу...
  • Вопрос задан
  • 250 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы