/ / Prestashop 1.6 3DSecureリダイレクト後のカートの復旧 - php、prestashop

Prestashop 1.6 3DSecureリダイレクト後のカートの回復 - php、prestashop

Authorize.net(aim)モジュールをベースにした支払いゲートウェイモジュールを構築しています。問題は、3DSecureの検証後、Webサイトにリダイレクトされることです。ただし、カートはコンテキストには含まれていません。

リダイレクトする前に、カートIDをセッションに保存しています。

次のエラーがスローされます。

"カートを読み込めないか、このカートを使用して注文が既に行われています。"

これは以下によって引き起こされます。

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

クラスの188行目/ PaymentModule.php

カートをロード/リロードするにはどうすればいいですか?

ありがとう

ジャック

回答:

回答№1は1

多くの支払いモジュールでは、Prestashopは、銀行がリダイレクトされる前に支払いステータスが欠落した状態で注文を作成し、注文が更新されるまで銀行の確認を待ちます。

それでもカートを再生成する場合は、ParentOrderControllerのsubmitReorder関数を使用してそれを実行できます。

        $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");
}