以编程方式将产品添加到magento购物车仅在第一次工作时不工作

时间:2016-01-01 00:13:52

标签: magento

我正在创建自定义功能以进行注册并将产品添加到客户购物车。

如果用户使用我的功能首次注册,他/她添加的产品将不会添加到购物车,除非他添加了其他产品,之后一切正常,第一个产品也出现在购物车中。

如果用户使用magento注册表单注册,则使用我的功能将产品添加到购物车中。一切正常。

注册代码

public function signupAction() {
    $email = $this->getRequest()->getPost('email');
    $password = $this->getRequest()->getPost('password');
    $firstName = $this->getRequest()->getPost('firstName');
    $LastName = $this->getRequest()->getPost('LastName');

    $session = Mage::getSingleton('customer/session');
    $session->setEscapeMessages(true);
    $websiteId = Mage::app()->getWebsite()->getId();
    $store = Mage::app()->getStore();
    $customer = Mage::getModel("customer/customer");
    $customer->setWebsiteId($websiteId)
            ->setStore($store)
            ->setFirstname($firstName)
            ->setLastname($LastName)
            ->setEmail($email)
            ->setPassword($password);
    try {
        $customer->cleanPasswordsValidationData();
        $customer->save();
        $this->_dispatchRegisterSuccess($customer);
        $this->_successProcessRegistration($customer);
    } catch (Mage_Core_Exception $e) {

    } catch (Exception $e) {

    }
}

添加到购物车代码

public function addAction() {
    $form_key = Mage::getSingleton('core/session')->getFormKey();
    $json = $this->getRequest()->getPost('json');
    $jsonObj = json_decode($json);
    $cart = $this->_getCart();
    $cart->init();
    $response = array();
    try {
        foreach ($jsonObj as $data) {
            $param = ['form_key' => $form_key,
 'qty' => $data->qty, 'product' => $data->productId];
            $product = $this->_initProduct($param['product']);
            if ($data->type == 'simple') {
                $cart->addProduct($product, $param);
            }
        }
        $cart->save();
        $this->_getSession()->setCartWasUpdated(true)

        /**
         * @todo remove wishlist observer processAddToCart
         */
        Mage::dispatchEvent('checkout_cart_add_product_complete', 
array('product' => $product,
 'request' => $this->getRequest(), 
'response' => $this->getResponse()));

        if (!$cart->getQuote()->getHasError()) {
            $response['status'] = 'SUCCESS';
        } else {
            $response['status'] = 'Error';
        }
    } catch (Mage_Core_Exception $e) {
        $msg = "";
        if ($this->_getSession()->getUseNotice(true)) {
            $msg = $e->getMessage();
        } else {
            $messages = array_unique(explode("\n", $e->getMessage()));
            foreach ($messages as $message) {
                $msg .= $message . '<br/>';
            }
        }

        $response['status'] = 'ERROR';
        $response['message'] = $msg;
    } catch (Exception $e) {
        $response['status'] = 'ERROR';
        $response['message'] = $this->__('Cannot add items.');
        Mage::logException($e);
    }
    $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response));
    return;
}

1 个答案:

答案 0 :(得分:0)

刷新页面是解决方案,因为magento使用表单键来验证数据

因此,当登录客户时,会话会根据该会话进行更改并且正常运行

如果您有更多问题,请与我们联系。