我的问题如下.我为prestashop 1.7创建了一个支付模块.验证订单//在启动付款时创建.这通过使用validateOrder方法在payment.php控制器中发生:
$this->module->validateOrder(
(int) $cartId,
$this->module->statuses[$orderStatus],
$prestaTotal,
'paymentmodule',
null,
array(),
null,
false,
$customer->secure_key
);
Run Code Online (Sandbox Code Playgroud)
因此,创建了新订单,现在购物车与订单相关.并且客户被重定向到支付提供商.他们可以付钱,或按"取消"按钮.
webhook.php从支付提供商处收到订单状态,并在prestashop中更新订单状态.如果订单已付款,则会将其重定向到订单确认页面.但如果它被取消,那么购物车就不见了.
发生这种情况,因为prestashop检查订单是否存在.如果是这样,购物车将被删除.FronController.php中的init()方法负责:
/* Cart already exists */
if ((int) $this->context->cookie->id_cart) {
if (!isset($cart)) {
$cart = new Cart($this->context->cookie->id_cart);
}
if (Validate::isLoadedObject($cart) && $cart->OrderExists()) {
PrestaShopLogger::addLog('Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart', 1, null, 'Cart', (int) $this->context->cookie->id_cart, true);
unset($this->context->cookie->id_cart, $cart, $this->context->cookie->checkedTOS);
$this->context->cookie->check_cgv = false;
}
Run Code Online (Sandbox Code Playgroud)
所以我在return.php控制器中创建了一个Method来制作属于现有订单的购物车的副本,所以你有一个新的购物车:
class PaymentModuleFrontController extends ModuleFrontController
{
public function initContent()
{
parent::initContent();
$cartId …Run Code Online (Sandbox Code Playgroud)