使用MagentoAPI从php访问产品/类别/属性信息

使用MagentoAPI从php访问产品/类别/属性信息,magento,soap,soap-client,php,Magento,Soap,Soap Client,Php,需要能够将Magento产品拉入外部模板。需要能够获得所有产品数据(描述、标题、属性、类别、图像等) 并且需要能够按类别、属性进行过滤,还可以搜索名称 这些调用将从Magento安装所在的服务器上进行。最好的方法是什么 将在linux和windows上使用php(两个单独的站点) 已经尝试使用MagentoAPI和Soap从php进行访问,但还没有成功。每次我都会遇到这个错误 致命错误:未捕获的SoapFault异常:[WSDL]SOAP-error:分析WSDL:无法从“”加载:文档结尾处的

需要能够将Magento产品拉入外部模板。需要能够获得所有产品数据(描述、标题、属性、类别、图像等)

并且需要能够按类别、属性进行过滤,还可以搜索名称

这些调用将从Magento安装所在的服务器上进行。最好的方法是什么

将在linux和windows上使用php(两个单独的站点)


已经尝试使用MagentoAPI和Soap从php进行访问,但还没有成功。每次我都会遇到这个错误

致命错误:未捕获的SoapFault异常:[WSDL]SOAP-error:分析WSDL:无法从“”加载:文档结尾处的额外内容在


例如,您可以使用Mage_CatalogInventory_Model_Stock_Item_Api类。

最简单的方法是在PHP脚本中加载Magento环境,并使用本机Magento调用

可以使用以下代码加载环境:

require_once("path_to_magento/app/Mage.php");
Mage::app();
之后,您可以使用所有本机方法,就像在Magento.php或.phtml文件中一样。例如,要获取产品集合并将其筛选为仅活动的产品,请执行以下操作:

$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('status', 1); 

Magento代码库的参考位于:

以下是我们用来获取产品的基本代码。将莱泽答案中的代码与我们在留言板上找到的一些示例相结合。这对我们很有效

注意:在下面的示例中,我们按类别ID 11进行过滤

require_once("app/Mage.php");
Mage::app();


$category = new Mage_Catalog_Model_Category();
$category->getAllChildren(11);

$products = Mage::getModel('catalog/product')->getCollection();
        $products->addAttributeToFilter('status', 1);//enabled
        $products->addCategoryFilter($category);
        $products->addAttributeToSelect('*');
        $prodIds=$products->getAllIds();


        $product = Mage::getModel('catalog/product');
        $count=1;
        foreach($prodIds as $productId)
        {


            echo "$count <br>";
            $product->load($productId);

            $product_data = array();
            $product_data['sku']=$product->getSku();
            $product_data['title']=$product->getName();
            $product_data['description']=$product->getDescription();
            $product_data['link']=$product->getProductUrl();
            $product_data['image_link']=Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
            $product_data['price']=$product->getPrice();
            $product_data['brand']=$product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($product);
            $product_data['product_type']='';

            //get the product categories
                    foreach($product->getCategoryIds() as $_categoryId){
            $category = Mage::getModel('catalog/category')->load($_categoryId);
            $product_data['product_type'].=$category->getName().', ';
            }
            $product_data['product_type']=rtrim($product_data['product_type'],', ');





echo "<pre>";
            var_dump($product_data);

            //echo 'Loop end: '.memory_get_usage(false).'<br>';
            //flush();
            $count++;
        }
require_once(“app/Mage.php”);
Mage::app();
$category=新的Mage_Catalog_Model_category();
$category->getAllChildren(11);
$products=Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('status',1)//启用
$products->addCategoryFilter($category);
$products->addAttributeToSelect('*');
$prodIds=$products->GetAllID();
$product=Mage::getModel('catalog/product');
$count=1;
foreach($prodIds作为$productId)
{
回显“$count
”; $product->load($productId); $product_data=array(); $product_data['sku']=$product->getSku(); $product_data['title']=$product->getName(); $product_data['description']=$product->getDescription(); $product_数据['link']=$product->getProductUrl(); $product\u data['image\u link']=Mage::getBaseUrl(Mage\u Core\u Model\u Store::URL\u TYPE\u MEDIA)。'catalog/product'.$product->getImage(); $product_数据['price']=$product->getPrice(); $product_data['brand']=$product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($product); $product\U data['product\U type']=''; //获取产品类别 foreach($product->getCategoryId()作为$\u categoryId){ $category=Mage::getModel('catalog/category')->load($\u categoryId); $product_data['product_type'].=$category->getName().,'; } $product_data['product_type']=rtrim($product_data['product_type'],','); 回声“; 变量转储(产品数据); //回显“循环结束:”。内存获取用法(false)。“
”; //冲洗(); $count++; }
谢谢。我现在正在尝试,通过将这一行添加到SetHeader()下的Soap.php,我最终成功地通过了SoapClient()的初始声明setHeader('Content-Length',strlen($wsdlContent)),但现在我正在超时。尝试创建具有所有访问权限的两个用户,但两个用户都不起作用$代理->登录('USER','XXX');有什么想法吗?你的SOAP URI不好。对WSDL的请求应转到