2013-10-30 43 views
0

我使用下面的代码来调用一个magento web服务。这段代码上个月工作正常。但现在它给了一个错误 - “缺少必需的参数”Magento的web服务调用错误 - 缺少必要的参数

try { 
    error_reporting(E_ALL | E_STRICT); 
    ini_set('display_errors', 1); 
    $proxy = new SoapClient('http://domain.com/api/v2_soap/?wsdl=1', array('trace' => 1, 'connection_timeout' => 120)); 

    $session = $proxy->login(array(
     'username' => "username", 
     'apiKey' => "apikey" 
    )); 
    $sessionId = $session->result; 

    $filters = array(
     'sku' => array('like'=>'zol%') 
    ); 

    $products = $proxy->catalogProductList(array("sessionId" => $sessionId, "filters" => $filters)); 

    echo '<h1>Result</h1>'; 
    echo '<pre>'; 
    var_dump($products); 
    echo '</pre>'; 

} catch (Exception $e) { 
    echo '<h1>Error</h1>'; 
    echo '<p>' . $e->getMessage() . '</p>'; 
} 

回答

0

[编辑]

在错误信息时引发只有当用户名为空,或者如果apiKey是空的代码invalid_request_param。请参阅Mage_Api_Model_Server_Handler_Abstract::login或者在使用WS-I合规性时某些参数错误。请参阅Mage_Api_Model_Server_WSI_Handler::prepareArgs
这应该是一个开始调试的好地方。
首先确保登录工作。最有可能的是它。然后在prepareArgs方法和checj var/syste.log中添加Mage::log($params)Mage::log($args)以查看您的参数如何以该方法到达。也许你会明白什么是错的。

[/编辑]

根据WSDL中的catalogProductList方法采用3个参数:

<message name="catalogProductListRequest"> 
    <part name="sessionId" type="xsd:string"/> 
    <part name="filters" type="typens:filters"/> 
    <part name="storeView" type="xsd:string"/> 
</message> 

和当使用WS-I complience你还有3个参数,但第三不是强制性的:

<xsd:element name="catalogProductListRequestParam"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element minOccurs="1" maxOccurs="1" name="sessionId" type="xsd:string" /> 
      <xsd:element minOccurs="1" maxOccurs="1" name="filters" type="typens:filters" /> 
      <xsd:element minOccurs="0" maxOccurs="1" name="store" type="xsd:string" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

您只发送一个参数。包含2个元素的数组。 我建议尝试这个像这样(不知道如果我是正确的):

$products = $proxy->catalogProductList($sessionId, $filters); 

也许

$products = $proxy->catalogProductList($sessionId, $filters, 0); 
+0

感谢等。我已经尝试过但仍然是同样的问题。 –

+0

@HelloPython。检查我的编辑。也许它有帮助。 – Marius

0

你可以试试这个complex_filter

$filters = array(
    'complex_filter' => array(
    array(
     'key' => 'sku', 
     'value' => array('key' => 'like', 'value' => 'zol%') 
    ) 
) 
); 

$products = $proxy->catalogProductList($sessionId, $filters); 
相关问题