Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Magento以编程方式添加产品并重定向到签出_Php_Magento_Magento 1.7 - Fatal编程技术网

Php Magento以编程方式添加产品并重定向到签出

Php Magento以编程方式添加产品并重定向到签出,php,magento,magento-1.7,Php,Magento,Magento 1.7,我有一个外部网站,你可以直接从那里添加产品 所以我尝试创建一个php文件,它可以接收一些HTTP POST,但它不起作用 首先,我尝试了一些非常基本的方法 <?php namespace Addtocart; use Mage; require __DIR__ . '/app/Mage.php'; /* if (! isset($_POST, $_POST['data'])) { exit; } */ $data = array( //array('id' =>

我有一个外部网站,你可以直接从那里添加产品

所以我尝试创建一个php文件,它可以接收一些HTTP POST,但它不起作用

首先,我尝试了一些非常基本的方法

<?php
namespace Addtocart;

use Mage;

require __DIR__ . '/app/Mage.php';

/*
if (! isset($_POST, $_POST['data'])) {
    exit;
}
*/

$data = array(
    //array('id' => 2532, 'qty' => 1, 'attribute' => 92, 'value' => 11), // 002
    //array('id' => 1854, 'qty' => 1),
    array('id' => '5711914018542', 'qty' => 1)
);

Mage::app();

$product_model = Mage::getModel('catalog/product');

/** @var \Mage_Checkout_Model_Cart $cart */
$cart = Mage::getSingleton('checkout/cart');
$cart->init();

$errors = array();
foreach($data as $product) {
    try {
        $productid = (int)$product_model->getIdBySku($product['id']);

        $params = array(
            'product' => $productid,
            'qty' => $product['qty']
        );

        if (array_key_exists('attribute', $product)) {
            $params['super_attribute'] = array($product['attribute'] => $product['value']);
        }

        $p = $product_model->load($productid);
        $cart->addProduct($p, $params);
    } catch (\Exception $e) {
        $errors[$product['id']] = $e->getMessage();
        continue;
    }
}

$cart->save();
$cart->getItems()->setQuote($cart->getQuote());
$cart->save();
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);

if ($errors) {
    var_dump($errors);
    exit;
}

header('Location: /checkout/cart/');

尝试使用Magento的内置URL系统,作为外部站点的get请求来执行此操作

对于简单产品:
http://www.magentosite.com/checkout/cart/add?product=1001&qty=1


您还可以执行自定义选项:
http://www.magentosite.com/checkout/cart/add?product=1001&qty=1&options[12] =57&options[15]=32

可以使用此代码,它将添加多个产品

<?php
namespace Addtocart;

require __DIR__ . '/app/Mage.php';
use Mage;

if (! isset($_GET, $_GET['p'])) {
    var_dump($_GET);
    exit;
}

Mage::app();

/** @var \Mage_Core_Model_Session */
$coresession = Mage::getSingleton('core/session', array('name'=>'frontend'));

/** @var \Mage_Checkout_Model_Session $session */
$session = Mage::getSingleton('checkout/session');
$session->start();
$session->clear();

/** @var \Mage_Catalog_Model_Product $product_model */
$product_model = Mage::getModel('catalog/product');

/** @var \Mage_Checkout_Model_Cart $cart */
$cart = Mage::getSingleton('checkout/cart');
$cart->init();
$cart->truncate();

$errors = array();
foreach($_GET['p'] as $product) {
    $product = json_decode($product, true);
    try {
        $productid = (int)$product_model->getIdBySku(urldecode($product['id']));

        $params = array(
            'product' => $productid,
            'qty' => $product['qty']
        );

        if (array_key_exists('attribute', $product)) {
            $params['super_attribute'] = array($product['attribute'] => $product['value']);
        }

        $cart->addProduct($productid, $params);
    } catch (\Exception $e) {
        $errors[$product['id']] = $e->getMessage() . ' (Product: ' . print_r($product, true) . ')';
        continue;
    }
}

$cart->save();
$session->setCartWasUpdated(true);

if ($errors) {
    var_dump($errors);
    exit;
}

if ($cart->getQuote()->getHasError()) {
    var_dump($cart->getQuote()->getHasError());
    exit;
}


header('Location: /checkout/cart/');

在以后重定向的购物车页面上,您可以尝试转储附加到会话的报价id,并对您的post脚本(如上)执行相同的操作,并比较两者以确保报价id相同。我猜您是在重定向到checkout/cart时收到一个新会话id。虽然magento有一个cart对象,但quote对象是产品最终驻留的地方。
$cart->getQuote()->getId()
-在
标题('location…')前后是相同的。
会话id()
在我添加
$session=Mage::getSingleton('checkout/session')前后也是相同的到脚本顶部,就在重定向之前,我添加了
$session->addSuccess('success')
和成功消息在购物车页面上显示良好-但篮子中仍然没有项目问题是您只能添加1个产品,而该产品不可用:)
p[]={"id":"<config-sku>","attribute":<attr>,"value":<value>,"qty":<qty>}&p[]={"id":"<simple-sku>","qty":<qty>}