0

我正在使用下面的代码来调用 magento 网络服务。这段代码上个月运行良好。但现在它给出了一个错误 - “缺少必需的参数”

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>';
}
4

2 回答 2

0

[编辑]

错误消息包含invalid_request_param仅当用户名为空或 apiKey 为空时才抛出的代码。在使用 WS-I 合规性时查看Mage_Api_Model_Server_Handler_Abstract::login或某些参数是否错误。见Mage_Api_Model_Server_WSI_Handler::prepareArgs
这应该是开始调试的好地方。
首先确保登录有效。很可能确实如此。然后在方法和 checj中添加Mage::log($params)and以查看您的参数如何到达该方法。也许你知道出了什么问题。Mage::log($args)prepareArgsvar/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 兼容时,您仍然有 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);
于 2013-10-30T08:34:52.320 回答
0

您可以像这样尝试 complex_filter

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

$products = $proxy->catalogProductList($sessionId, $filters);
于 2013-10-30T11:23:34.933 回答