Magento добавить цену уровня программно, но с настраиваемыми полями

У меня проблема с добавлением цены уровня продукта по коду. Я провел некоторое исследование, что есть magento API, который можно использовать, чтобы добавить цену уровня. Однако, так как я настроил наше magento и добавил новое поле к цене уровня, которая называется "временем производства", я больше не знаю, как добавить цену уровня через API.

Вот пример кода

$proxy = new SoapClient(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB).'/api/soap/?wsdl');
$sessionId = $proxy->login('API user','API Key');
$tierPrices[] = array(
    'website'           => 'all',
    'customer_group_id' => 'all',
    'production_time    => $data[2],
    'qty'               => $data[3],
    'price'             => $data[4]
);
 try {
        $proxy->call($sessionId, 'product_tier_price.update', array($sku, $tierPrices));
    } catch (Exception $e) {
        $e->getMessage() . "\n";
}

Я получу сообщение об ошибке "Недопустимая цена уровня".

Есть идеи, почему это происходит? или есть другие способы добавить цены уровня?

Спасибо.

3 ответа

Я обнаружил, что проще всего загрузить модель, которую API использует для многоуровневых цен, чтобы она могла помочь вам, проверяя ваши данные для вас.

$tierPrices = array();

$tierPrices[] = array(
    'customer_group_id' => 1,       // or 'all' or whatever your customer group ID is
    'qty'               => 1,       // Must be greater than 0
    'price'             => 5.99,    // Use an int here, don't currency format
    'website_id'        => 0        // or whatever website ID you need to set this to
);

// Set more tiered prices here if you'd like...

$tierPriceModel = Mage::getModel('catalog/product_attribute_tierprice_api');

// Assume 12345 is your product ID
$tierPriceModel->update(12345, $tierPrices);

Для таких, как я, которым было интересно, почему цены уровня не были обновлены с учетом website_id, это потому, что в коде @Tyler V. произошла ошибка, или код API изменился.

Это правильный способ форматирования цен нового уровня:

$tierPrices[] = array(
    'customer_group_id' => 'all',     
    'qty'               => 1,       
    'price'             => 5.99,    
    'website'        => 0         
);

Это уже не website_id, а веб-сайт, когда вы указываете веб-сайт в ценовом массиве уровня!

Лучше, чем API, где не все функции, которые вы можете использовать стандартным скриптом Magento, вам нужно всего лишь поместить в папку magento:

require("../../app/Mage.php");
Mage::init();

// Set an Admin Session
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
$userModel = Mage::getModel('admin/user');
$userModel->setUserId(1);
$session = Mage::getSingleton('admin/session');
$session->setUser($userModel);
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());


foreach ($youritemlist as $item) {  


   $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$item);  

    if(is_object($product)) {              


                $product->setTierPrice($yourprice);  
                echo "..(set)..";


                      $product->save();                          

                       echo "..saved\n";                                      

      }; // end testing of product exist              


}; // enf foreach
Другие вопросы по тегам