Magento - 通过查询字符串将产品添加到购物车,不带form_key参数

raf*_*fis 10 magento

我刚刚安装了Magento Community Edition ver 1.8.0.0(默认设置).

系统 - >配置 - >销售 - >结账 - >结账选项
启用单页结账:是
允许访客结账:是

我正在尝试使用查询字符串方法将产品添加到购物车.
根据我发现的所有资源,这些都是正确的方法:

[store]/checkout/cart/add/product/1/
[store]/checkout/cart/add?product=1&qty=1
Run Code Online (Sandbox Code Playgroud)

但他们没有工作......车仍然是空的.

经过一段时间,我找到了可行的解决方案:

[store]/checkout/cart/add/product/1/form_key/yu6b5VEzwSU2V7YE/
Run Code Online (Sandbox Code Playgroud)

不过,我想form_key参数中的URL.
在我的案例中不需要此安全功能.

例如,没有form_key,产品比较工作正常:

[store]/catalog/product_compare/add/product/1/
Run Code Online (Sandbox Code Playgroud)

我们的想法是在其他一些网站上放置一个静态链接(因此动态生成的form_key是未知的),因此如果客户点击它,他会立即被重定向到带有填充购物车的商店.

是否有可能摆脱form_key参数,仍然能够将产品添加到购物车?如果是这样,那怎么样?

小智 21

这对Magento C 1.8最适合我

<?php
 
$formKey = Mage::getSingleton('core/session')->getFormKey();?>

<form action="/checkout/cart/add/product/<?php echo $productid; ?>" method="post">
    <input type="hidden" name="form_key" value="<?php echo $formKey; ?>" />

    <input type="text" name="qty"> QTY

    <input type="submit" value="Add to basket" />
</form>
Run Code Online (Sandbox Code Playgroud)


and*_*max 9

我所做的是CartController用自定义模块覆盖Magento .我在里面创建了一个文件: \ app\code\local\Namespace\AddProductFromUrl\controllers\Checkout\CartController.php

<?php
    require_once 'Mage/Checkout/controllers/CartController.php';
    class Namespace_AddProductFromUrl_Checkout_CartController extends Mage_Checkout_CartController {
        # overloaded addAction
        public function addAction() {        
            // generate form_key if missing or invalid
            if (!($formKey = $this->getRequest()->getParam('form_key', null)) || $formKey != Mage::getSingleton('core/session')->getFormKey()) {
                $this->getRequest()->setParams(array('form_key' =>Mage::getSingleton('core/session')->getFormKey()));
            }        

            // do parent actions
            parent::addAction();
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

(该模块需要具有config.xml并在etc/modules/每个magento自定义模块下启用.Namespace使用您使用的模块进行更改.)

这与magento 1.7一样完美,影响极小; 的form_key,如果缺少产生,就是这样.