好的,所以这对我来说很奇怪,我已经向 Magento Core API 添加了一个自定义方法,它工作正常,除了我尝试以编程方式设置结果时:
public function infoByOmsId($omsId){
$customer_model = Mage::getModel('customer/customer');
$customer_model->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer_model->loadByOmsId($omsId);
$result = array();
$result['customer_id'] = $customer_model->getId();//51;
return $result;
如果我对该值进行硬编码,它会在 SOAP 响应中返回,但是,当我以编程方式设置它时,响应值的节点会返回为空。我已经检查了代码——通过将它放在它自己的 php 文件中并 var_dump'ing 客户模型——以确保它得到结果,并且数据元素在那里。我尝试将响应从数组更改为单个字符串元素,并且得到相同的结果。
我最初认为这可能是数据类型问题,因为我使用的是符合 WSI 的 V2 API。但是我将响应类型从 int 更改为字符串(当我在独立代码中 var_dump 数组时得到一个字符串),但这似乎也不起作用。我肯定会在 API 中收到“oms_id”——一个自定义属性,因为我可以直接将它传回,然后在响应中取回它。我尝试通过几种不同的方式从模型中获取我想要的值,没有一种方法可以从 API 返回 XML 中的值,但都可以在我的独立 php 文件中使用。:
$customer_model->getData('entity_id');
$customer_model['entity_id'];
$customer_model->getId();
这是我的 wsdl.xml 文件:
<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="customerId">
<all>
<element name="customer_id" type="xsd:string" minOccurs="0" />
</all>
</complexType>
</schema>
</types>
<message name="mycompanyInfoByOmsIdRequest">
<part name="sessionId" type="xsd:string" />
<part name="omsId" type="xsd:int" />
</message>
<message name="mycompanyInfoByOmsIdResponse">
<part name="customer_oms_id" type="xsd:customerId" />
</message>
和 wsi.xml:
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:{{var wsdl.name}}">
<xsd:complexType name="mycompanyInfoByOmsId">
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="customer_id" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="mycompanyInfoByOmsIdRequestParam">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="sessionId" type="xsd:string" />
<xsd:element minOccurs="1" maxOccurs="1" name="omsId" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="mycompanyInfoByOmsIdResponseParam">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="result" type="typens:mycompanyInfoByOmsId" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
这些动态值没有返回,我做错了什么?有人有这方面的经验吗?