我正在尝试扩展Magento API - 我已经按照大多数教程中的步骤进行了操作,并完成了以下操作。 当我尝试调用任何扩展的api方法时,我不断从洋红色获得无效的资源路径错误。
在app / etc / modules中创建一个名为Woe_Services.xml的模块XML描述符
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Woe_Services>
<active>true</active>
<codePool>local</codePool>
</Woe_Services>
</modules>
</config>
我创建了一个相应的目录结构:
-app
--code
---local
----Woe
-----Services
------etc
-------|api.xml
-------|config.xml
------Model
------- Catalog
-------- Product
--------- Attribute
---------- Api.php
我的config.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Woe_Services>
<version>1.0</version>
</Woe_Services>
</modules>
<global>
<models>
<catalog>
<rewrite>
<product_attribute_api>Woe_Services_Model_Catalog_Product_Attribute_Api</product_attribute_api>
</rewrite>
</catalog>
</models>
</global>
</config>
我的api.xml文件如下:
<?xml version="1.0"?>
<config>
<api>
<resources>
<catalog_product_attribute translate="title"
module="catalog">
<title>Product attributes API</title>
<model>catalog/product_attribute_api</model>
<acl>catalog/product</acl>
<methods>
<create translate="title" module="catalog">
<title>Create new product attribute</title>
<acl>catalog/product/attribute/create</acl>
</create>
<delete translate="title" module="catalog">
<title>Delete product attribute</title>
<acl>catalog/product/attribute/delete</acl>
</delete>
<addoptions translate="title" module="catalog">
<title>Add attribute options</title>
<acl>catalog/product/attribute/addoptions</acl>
</addoptions>
</methods>
</catalog_product_attribute>
</resources>
<acl>
<resources>
</resources>
</acl>
</api>
</config>
最后,Api.php文件如下:
<?php
/**
* @category Ajzele
* @package Ajzele_Mapy
* @copyright Copyright (c) Branko Ajzele (http://activecodeline.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Catalog product attribute api
*
* @category Ajzele
* @package Ajzele_Mapy
* @author Branko Ajzele <ajzele@gmail.com>
*/
class Woe_Services_Model_Catalog_Product_Attribute_Api extends Mage_Catalog_Model_Product_Attribute_Api
{
/**
* Create new product attribute.
*
* @param string $attributeName
* @param array $attributeData
* @param string|int $store
* @return int
*/
public function create($attributeName, $attributeData, $store = null)
{
// create product attribute
$installer = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup('core_setup');
$installer->addAttribute('catalog_product', $attributeName, $attributeData);
// get product attribute id
$storeId = $this->_getStoreId($store);
$attribute = Mage::getModel('catalog/product')
->setStoreId($storeId)
->getResource()
->getAttribute($attributeName);
return $attribute->getId();
}
/**
* Create attribute options
*
* @param string $attributeId
* @param array $attributeOptions
* @return int
*/
public function addoptions($attributeId, $attributeOptions)
{
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
for($i = 0; $i < sizeof($attributeOptions); $i++) {
$option = array();
$option['attribute_id'] = $attributeId;
$option['value'][$value][0] = $attributeOptions[$i];
$setup->addAttributeOption($option);
}
return true;
}
/**
* Delete product attribute.
*
* @param string $attributeName
* @param string|int $store
* @return int
*/
public function delete($attributeName, $store = null)
{
$storeId = $this->_getStoreId($store);
$attribute = Mage::getModel('catalog/product')
->setStoreId($storeId)
->getResource()
->getAttribute($attributeName);
if (!$attribute) {
$this->_fault('not_exists');
}
try {
$attribute->delete();
} catch (Mage_Core_Exception $e) {
$this->_fault('not_deleted', $e->getMessage());
return false;
}
return true;
}
}
答案 0 :(得分:1)
确保在服务器配置中打开重写。
Evan Klein 5月31日17:55
答案 1 :(得分:0)
如果您正在使用soap,那么您缺少一个名为wsdl.xml的关键文件,您需要在模块etc /文件夹中定义该模块;该文件应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:typens="urn:{{var wsdl.name}}" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"
name="{{var wsdl.name}}" targetNamespace="urn:{{var wsdl.name}}">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/" />
<complexType name="TestSvcEntity">
<all>
<element name="testArg" type="xsd:string" minOccurs="1" />
</all>
</complexType>
<complexType name="testArrayOfString">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
</types>
<message name="testRequest">
<part name="sessionId" type="xsd:string" />
<part name="param1" type="xsd:string" />
</message>
<message name="testResponse">
<part name="test_out" type="xsd:string" />
</message>
<portType name="{{var wsdl.handler}}PortType">
<operation name="test">
<documentation>Test</documentation>
<input message="typens:testRequest" />
<output message="typens:testResponse" />
</operation>
</portType>
<binding name="{{var wsdl.handler}}Binding" type="typens:{{var wsdl.handler}}PortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="test">
<soap:operation soapAction="urn:{{var wsdl.handler}}Action" />
<input>
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body namespace="urn:{{var wsdl.name}}" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
</binding>
<service name="{{var wsdl.name}}Service">
<port name="{{var wsdl.handler}}Port" binding="typens:{{var wsdl.handler}}Binding">
<soap:address location="{{var wsdl.url}}" />
</port>
</service>
</definitions>
您可以随时查看将显示所有可用IP方法的API http://www.yoursite.com/api/v2_soap?wsdl=1。
同时检查:
让我知道它是怎么回事,如果能解决这个问题。
干杯!