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