我正在使用下面的代码来调用magento webservice。这个代码上个月工作正常。但现在它给出了一个错误 - “缺少必需的参数”
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 :(得分:0)
[编辑]
错误消息的代码invalid_request_param
仅在用户名为空或apiKey为空时才会引发。使用WS-I合规性时,请参阅Mage_Api_Model_Server_Handler_Abstract::login
或某些参数是否错误。见Mage_Api_Model_Server_WSI_Handler::prepareArgs
。
这应该是开始调试的好地方
首先确保登录有效。最有可能的确如此。然后在Mage::log($params)
方法和checj Mage::log($args)
中添加prepareArgs
和var/syste.log
,以查看您的参数如何到达该方法。也许你知道出了什么问题。
[/编辑]
根据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个参数,但第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);
答案 1 :(得分:0)
您可以尝试像这样的complex_filter
$filters = array(
'complex_filter' => array(
array(
'key' => 'sku',
'value' => array('key' => 'like', 'value' => 'zol%')
)
)
);
$products = $proxy->catalogProductList($sessionId, $filters);