Prestashop cart and order lifecycle,如何"confirm"一个购物车,让它成为来自外部支付方式的订单

Prestashop cart and order lifesycle, how to "confirm" a cart and let it become an order coming from external payment method

大家好。我正在 Prestashop 1.7 上开发支付模块。 支付过程是外部的,在重定向之前我必须在他们的服务器上创建一个 POST 以创建一个令牌,然后重定向到他们并 "wait" 让用户回到商店。

我正在尝试找出解决此问题的最佳方法以及使用购物车和订单完成的正确循环。

1) 用户到达结帐页面(他有购物车,但没有订单)

2) 用户选择支付方式。

3) 单击按钮后,用户将被发送到 "preparation" 控制器(仍然有购物车且没有订单)

4) 名为 "preparation" 的前端控制器将向支付网关执行一个 POST,并根据响应将用户重定向到他们的网关(我将向他们传递一个 "returnUrl" 指向我的 "confirmation" 控制器)。

5) 用户在他们的网关上,他会做一些网关的事情。

6) 用户被送回Prestashop,在我之前给的returnUrl 上,一些数据将附加到此。

7) 这是我关心的问题: 为了确认订单,我必须将用户重定向到:

Tools::redirect('index.php?controller=order-confirmation&id_cart='.$cart->id.'&id_module='.$this->module->id.'&id_order='.$this->module->currentOrder.'&key='.$customer->secure_key);

但实际上我没有 "id_order" 对吧?我还没有确认购物车并将其转化为订单......对吗?

我必须做一个吗:

$this->module->validateOrder($cart->id, Configuration::get('PS_OS_BANKWIRE'), $total, $this->module->displayName, NULL, $mailVars, (int)$currency->id, false, $customer->secure_key);

在将用户重定向到订单确认之前? 这些都是真的吗,还是我对购物车转订单一无所知?

提前致谢。

是的,您必须调用 validateOrder() 方法才能将购物车转换为订单。

在第 4 步,您将 redirectUrl 传递给商店中您自己的控制器,它将验证订单,然后重定向到成功页面。

您必须注意的一件事是当用户在支付网关页面时进行购物车操作。当用户被重定向到支付网关时,购物车仍然处于活动状态,他可以在另一个选项卡中打开商店并操作他的购物车(添加、删除、选择不同的运费等),然后单击网关上的 Pay 按钮页面,所以在将用户重定向到支付网关之前,请确保您将购物车总价值存储在您的自定义 table 中,并且在您验证订单之前,请确保金额相同,否则我认为 Prestashop 会为你在 validateOrder() 通过比较购物车金额和支付金额,如果金额不匹配,则在订单上设置 Payment error 状态(我已经有一段时间没接触过 prestashop 了,所以我不确定)。