大家好。我正在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);
在将用户重定向到订单确认之前? 所有这些都是真的,还是我对将购物车转换为订单一无所知?
提前谢谢。
答案 0 :(得分:1)
是的,您必须调用validateOrder()
方法才能将购物车转换为订单。
在第4步中,您将redirectUrl
传递给您自己的车间控制器,该控制器将验证订单,然后重定向到成功页面。
您必须要注意的一件事是,当用户位于支付网关页面上时,购物车的操纵。当用户重定向到付款网关时,购物车仍处于活动状态,他可以在另一个标签中打开商店并操纵他的购物车(添加,删除,选择其他送货方式等),然后单击网关上的Pay
按钮页,因此在将用户重定向到付款网关之前,请确保将购物车总值存储在自定义表格中,并且在验证订单之前,请确保金额相同或我认为Prestashop会在{{ 1}},比较购物车金额和已付款金额,并在金额不匹配时在订单上设置validateOrder()
状态(自从我接触prestashop以来已经有一段时间了,所以我不确定)。