【问题标题】:Get simple product sku and qty using salesOrderInfo of SOAP API in magento在 magento 中使用 SOAP API 的 salesOrderInfo 获取简单的产品 sku 和 qty
【发布时间】:2013-11-06 11:46:38
【问题描述】:

我在

中添加了以下代码
/app/code/core/Mage/Sales/Model/Order/Api.php

文件。

       public function info($orderIncrementId)
        {

------
-------
$order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId);
    // get order total value
$orderValue = number_format ($order->getGrandTotal(), 2, '.' , $thousands_sep = '');
    // get order item collection
$orderItems = $order->getItemsCollection();

    $skuQtyArray = array();
    foreach ($orderItems as $item)
    {
        $product_id = $item->product_id;
        $product_sku = $item->sku;
        $product_name = $item->getName();
        $product_qty = $item->getQtyOrdered();
        $_product = Mage::getModel('catalog/product')->load($product_id);
        $cats = $_product->getCategoryIds();
        $category_id = $cats[0]; // just grab the first id
        $category = Mage::getModel('catalog/category')->load($category_id);
        $category_name = $category->getName();

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

        $productType=$product->getTypeID();
        if($productType=='simple')
        {                                                                   
                $skuQtVal = $product_sku."=".$product_qty;                                      
                $skuQtyArray[] = $skuQtVal;                                 
        }

    }

$result['simple_product_skus'] = $skuQtyArray;
    Mage::log($skuQtyArray,null,"logTest.txt",true);

return $result; 
}

但是当我在应用程序根目录中运行以下代码时

<?php
$client = new SoapClient('localhost/magento/index.php/api/v2_soap/index?wsdl=1');
$session = $client->login('testuser', 'testuser');

$result = $client ->salesOrderInfo($session, '100000026'); 

print_r($result);
?>

我没有得到我所做的更改。

请提出一些解决方案。

编辑:

我要覆盖核心代码的目录结构如下。

我的 Overridden Api.php,我是这样使用的。

class Sigma_Sales_Model_Order_Api extends Mage_Sales_Model_Order_Api

知道了: 我需要像这样覆盖

class Sigma_Sales_Model_Order_Api_V2 extends Mage_Sales_Model_Order_Api_V2

因为:- Mage_Sales_Model_Order_Api_V2 扩展了 Mage_Sales_Model_Order_Api

【问题讨论】:

  • 嗨,你写在核心上吗? $result 的价值是多少?有任何警告或例外吗?

标签: api magento soap


【解决方案1】:

Muk,您必须前往 app\code\core\Mage\Sales\etc 并修改 wsdl.xml 和 wsi.xml 并根据需要添加 sku 或任何您想要的元素。

<element name="sku" type="xsd:string" minOccurs="0" /> //in wsdl.xml
<xsd:element name="sku" type="xsd:string" minOccurs="0" /> //wsi.xml

如果您不想修改核心文件,则必须覆盖它。

【讨论】:

  • 我正在传递像 $result['custom'] = $skuQtyArray; 这样的值$skuQtyArray 是一个数组。所以我需要在 wsdl.xml 和 wsi.xml 中给出特定的元素名称。我是这些 api 的新手,请指导。
  • 如果要将元素作为数组而不是字符串而不是将字符串更改为数组。我建议您使用 wsdl.xml 和 wsi.xml。这两个文件都有字符串、数组等。
  • 我在询问元素名称。我可以将元素名称指定为“custom_simple”,即
  • 穆克,我正要离开办公室。请通过此链接stackoverflow.com/questions/9201036/…
【解决方案2】:

第一次修正开启

/app/code/core/Mage/Sales/Model/Order/Api.php

来自

$orderValue = number_format ($order->getGrandTotal(), 2, '.' , $thousands_sep = '');

尝试去掉number_format后面的空格

$orderValue = number_format($order->getGrandTotal(), 2, '.' , $thousands_sep = '');

其次是查看Order Increment ID,是否存在?


第三是检查 var/log/logTest.txt,$skuQtyArray 的值是多少?


如果你只是添加那个函数,那现在一定是正确的。

我的建议是不要覆盖核心,因为Magento经常升级版本,如果你想升级它会感到困惑。

【讨论】:

  • 非常感谢您的帮助,在您和其他cmets的帮助下,我得到了它。如果我覆盖了 Api.php 的 info 函数,我是否需要编写相同的 Api.xml ?请提出建议。
  • 不错!!如果方法相同,则无需编写api.xml,只需覆盖该类即可。在您的自定义模块上。不要忘记清除 var/cache。
  • 感谢您的宝贵意见
  • 如何将 $result['custom'] 返回为 [0] => stdClass Object ?
  • 这意味着在您的数组上,该值是一个类对象。尝试回显 get_class($result['custom'][0]);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多