API Magento Cart не показывает цены - PullRequest
7 голосов
/ 27 мая 2011

Я пытаюсь использовать XML-RPC API Magento Enterprise 1.10 для обработки функций корзины / каталога вне установки Magento.Проблема, с которой я сталкиваюсь - это когда я добавляю в корзину.Я могу очень хорошо подключиться к конечной точке API, войти в систему и получить данные.Ниже приведен код, который я использую, чтобы узнать, как работает Magento API.

<?php    
   require $_SERVER['DOCUMENT_ROOT'].'/Zend/XmlRpc/Client.php';

   $url = 'http://mymagento.com/api/xmlrpc';
   $user = 'apiuser';
   $pass = 'apipass';

   $proxy = new Zend_XmlRpc_Client( $url );
   $sess = $proxy->call( 'login', array( $user, $pass ) );
   $cartId = $proxy->call( 'call', array( $sess, 'cart.create', array( 1 ) ) );

   $pList = $proxy->call( 'call', array( $sess, 'product.list', array() ) );
   $cList = $proxy->call( 'call', array( $sess, 'customer.list', array() ) );

   $cList[0]['mode'] = 'customer';

   $setCart = $proxy->call( 'call', array( $sess,
      'cart_customer.set',
      array( $cartId, $cList[0] ) ) );

   foreach( $pList as $prod)
   {
      if( $prod['product_id'] == 5 )
      {
          $prod['qty'] = 5;
          $addCart = $proxy->call( 'call', array( $sess, 
              'cart_product.add',
              array( $cartId, $pAdd ) ) );
      }
   }

   $cList = $proxy->call( 'call', array( $sess, 'cart.info', array( $cartId ) ) );
   print_r( $cList );

Выходы:

[store_id] => 1
[created_at] => 2011-05-27 13:30:57
[updated_at] => 2011-05-27 13:31:00
[converted_at] => 0000-00-00 00:00:00
[is_active] => 0
[is_virtual] => 0
[is_multi_shipping] => 0
[items_count] => 1
[items_qty] => 5.0000
[orig_order_id] => 0
[store_to_base_rate] => 1.0000
[store_to_quote_rate] => 1.0000
[base_currency_code] => USD
[store_currency_code] => USD
[quote_currency_code] => USD
[grand_total] => 0.0000
[base_grand_total] => 0.0000
[checkout_method] => customer
...
[items] => Array
(
    [0] => Array
        (
            [item_id] => 93
            [quote_id] => 119
            [created_at] => 2011-05-27 13:31:00
            [updated_at] => 2011-05-27 13:31:00
            [product_id] => 5
            [store_id] => 1
            [parent_item_id] => 
            [is_virtual] => 1
            [sku] => product1
            [name] => product
            [description] => 
            [applied_rule_ids] => 
            [additional_data] => 
            [free_shipping] => 0
            [is_qty_decimal] => 0
            [no_discount] => 0
            [weight] => 
            [qty] => 5
            [price] => 0.0000
            [base_price] => 0.0000
            [custom_price] => 
            [discount_percent] => 0.0000
            [discount_amount] => 0.0000
            [base_discount_amount] => 0.0000

Однако я должен просто вызвать следующее, используя тот жеВыше сеанса

<?php
    $pInfo = $proxy->call( 'call', array( $sess, 'catalog_product.info', '5' ) );
    print_r( $pInfo );

Я получаю следующую информацию о продукте:

[product_id] => 5
[sku] => product1
[set] => 9
[type] => virtual
[categories] => Array
    (
    )

[websites] => Array
    (
        [0] => 1
    )

[type_id] => virtual
[name] => product
[description] => Test
[short_description] => Test
[news_from_date] => 
[old_id] => 
[news_to_date] => 
[status] => 1
[visibility] => 4
...
[created_at] => 2011-05-25 15:11:34
[updated_at] => 2011-05-25 15:11:34
...
[price] => 10.0000

В конце концов, API видит, что цена товара на самом деле составляет 10 долларов, но при добавлениив корзину через API цены не отображаются должным образом.

Ответы [ 3 ]

6 голосов
/ 01 июня 2011

Точно так же это может быть официально ответ на вопрос, вот найденное решение, http://magentocommerce.com/boards/viewthread/227044 Я потратил два дня на поиск этого, и сегодня придумала неясный поисковый термин, чтобы попытаться найти решение

1 голос
/ 31 июля 2013

Я смотрю на эту проблему уже пару дней.Для меня это не имело смысла, если вы добавляете товар в корзину через обычный веб-интерфейс [т.е. Mage_Checkout_CartController::addAction()].Он знает цену без указания адреса.Я наконец нашел разницу между ними.В addAction() они создают экземпляр Mage_Checkout_Model_Cart, добавляют к нему продукт и сохраняют его.В API они используют Mage_Sales_Model_Quote вместо.Если вы посмотрите на Mage_Checkout_Model_Cart::save(), вы увидите эти две строки:

$this->getQuote()->getBillingAddress();
$this->getQuote()->getShippingAddress();

Эти две строки фактически создают пустые Mage_Sales_Model_Quote_Address объекты, которые сохраняются в БД.

Если вы готовы/ В состоянии изменить код magento, вы можете изменить Mage_Checkout_Model_Cart_Api::create() и добавить вызов к этим двум методам до $quote->save(), и API и веб-интерфейс будут работать одинаково.

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

0 голосов
/ 04 декабря 2015

Интерфейс Magento и API оба разные. Во внешнем интерфейсе после регистрации клиента создается предложение для клиента, а также устанавливается адрес с идентификатором созданной цены Но в API он создает только цитату, используя сервис shoppingCartCreate. Для правильности нам нужно настроить сервис создания. Я сделал, и это сработало для меня.

Здесь я предоставляю решение:

Редактировать функцию в файле - Mage/Checkout/Model/Cart/Api.php

public function create($store = null)
{
    $storeId = $this->_getStoreId($store);

    try {
        /*@var $quote Mage_Sales_Model_Quote*/
        $quote = Mage::getModel('sales/quote');
        $quote->setStoreId($storeId)
                ->setIsActive(false)
                ->setIsMultiShipping(false)
                ->save();

/* Customized this for saving default address for quote and it will show price in cart info*/
 $quote->getBillingAddress();
    $quote->getShippingAddress()->setCollectShippingRates(true);
    $quote->collectTotals();
    $quote->save();

/* End cart here */

    } catch (Mage_Core_Exception $e) {
        $this->_fault('create_quote_fault', $e->getMessage());
    }
    return (int) $quote->getId();
}
...