0

以下のコードを使用して、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>';
}
4

2 に答える 2

0

[編集]

エラー メッセージにはinvalid_request_param、ユーザー名が空の場合、または apiKey が空の場合にのみスローされるコードが含まれています。Mage_Api_Model_Server_Handler_Abstract::loginWS-I 準拠を使用しているときに、いくつかのパラメーターが間違っている場合は、またはを参照してください。を参照してくださいMage_Api_Model_Server_WSI_Handler::prepareArgs
これは、デバッグを開始するのに適した場所です。
まず、ログインが機能することを確認します。おそらくそうです。次に、メソッドに and をMage::log($params)追加し、checkjを追加して、パラメーターがそのメソッドにどのように到着するかを確認します。たぶん、何が間違っているのかがわかります。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>

パラメータを 1 つだけ送信しています。2 つの要素を持つ配列。これを次のように試すことをお勧めします(私が正しいかどうかはわかりません):

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

または多分

$products = $proxy->catalogProductList($sessionId, $filters, 0);
于 2013-10-30T08:34:52.320 に答える