小编Aur*_*ora的帖子

覆盖frontcontroller或modulefrontcontroller init()方法以进行检出

我的问题如下.我为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)

php prestashop prestashop-1.6 prestashop-1.7

8
推荐指数
1
解决办法
885
查看次数

标签 统计

php ×1

prestashop ×1

prestashop-1.6 ×1

prestashop-1.7 ×1