Prestashop购物车和订购商品,如何“确认”购物车并使其成为来自外部付款方式的订单

时间:2018-12-14 15:25:01

标签: php module prestashop payment-gateway prestashop-1.7

大家好。我正在Prestashop 1.7上开发付款模块。 付款过程是外部的,在重定向之前,我必须在其服务器上进行POST以创建令牌,然后重定向到它们并“等待”用户返回商店。

我正在尝试找出最佳方法,并用购物车和订单完成正确的循环。

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

2)用户选择付款方式。

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

4)称为“准备”的前端控制器将执行POST到支付网关,并通过响应将用户重定向到其网关(我将向他们传递一个指向我的“确认”的“ returnUrl”控制器)。

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

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

提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

您必须要注意的一件事是,当用户位于支付网关页面上时,购物车的操纵。当用户重定向到付款网关时,购物车仍处于活动状态,他可以在另一个标签中打开商店并操纵他的购物车(添加,删除,选择其他送货方式等),然后单击网关上的Pay按钮页,因此在将用户重定向到付款网关之前,请确保将购物车总值存储在自定义表格中,并且在验证订单之前,请确保金额相同或我认为Prestashop会在{{ 1}},比较购物车金额和已付款金额,并在金额不匹配时在订单上设置validateOrder()状态(自从我接触prestashop以来已经有一段时间了,所以我不确定)。