/ / Prestashop 1.6 Odzyskiwanie koszyka po przekierowaniu 3DSecure - php, prestashop

Prestashop 1.6 Odzyskiwanie koszyka po przekierowaniu 3DSecure - php, prestashop

Buduję moduł bramki płatniczej oparty na module Authorize.net (cel). Problem polega na tym, że po walidacji 3DSecure przekierowuje z powrotem do strony internetowej, ale wydaje mi się, że wózek nie jest w kontekście.

Przed przekierowaniem zapisuję identyfikator koszyka do sesji.

Zgłasza następujący błąd:

"Koszyk nie może zostać załadowany lub zamówienie zostało już złożone za pomocą tego wózka"

Wywoływane jest przez:

if (Validate::isLoadedObject($this->context->cart) && $this->context->cart->OrderExists() == false)

w linii 188 klas / PaymentModule.php

Jak mogę załadować / przeładować wózek?

Dzięki

Jacques

Odpowiedzi:

1 dla odpowiedzi № 1

W wielu modułach płatności Prestashop tworzy zamówienie przed przekierowaniem banku z brakującym stanem płatności i czekać na potwierdzenie banku, aby zaktualizować zamówienie.

Jeśli chcesz nadal regenerować koszyk, możesz to zrobić za pomocą funkcji submitReorder w ParentOrderController.

        $oldCart = new Cart(Order::getCartIdStatic($id_order, $this->context->customer->id));
$duplication = $oldCart->duplicate();
if (!$duplication || !Validate::isLoadedObject($duplication["cart"])) {
$this->errors[] = Tools::displayError("Sorry. We cannot renew your order.");
} elseif (!$duplication["success"]) {
$this->errors[] = Tools::displayError("Some items are no longer available, and we are unable to renew your order.");
} else {
$this->context->cookie->id_cart = $duplication["cart"]->id;
$context = $this->context;
$context->cart = $duplication["cart"];
CartRule::autoAddToCart($context);
$this->context->cookie->write();
if (Configuration::get("PS_ORDER_PROCESS_TYPE") == 1) {
Tools::redirect("index.php?controller=order-opc");
}
Tools::redirect("index.php?controller=order");
}