簡體   English   中英

Magento Web服務調用錯誤-缺少必需的參數

[英]Magento webservice call error - Required parameter is missing

我正在使用下面的代碼來調用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>';
}

[編輯]

該錯誤消息具有代碼invalid_request_param ,僅當用戶名為空或apiKey為空時才會拋出該代碼。 請參閱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合規性時,您仍有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);

您可以像這樣嘗試complex_filter

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM