0

次のような SOAP リクエストを作成する必要があります。

<s:element name="GetOrders">
 <s:complexType>
  <s:sequence>
   <s:element minOccurs="0" maxOccurs="1" name="Token" type="s:string"/>
   <s:element minOccurs="0" maxOccurs="1" name="Context" type="s:string"/>
   <s:element minOccurs="1" maxOccurs="1" name="StartDate" type="s:dateTime"/>
   <s:element minOccurs="1" maxOccurs="1" name="EndDate" type="s:dateTime"/>
   <s:element minOccurs="1" maxOccurs="1" name="IncludeFulfilledOrders" type="s:boolean"/>
   <s:element minOccurs="0" maxOccurs="1" name="ProductNumber" type="s:string"/>
  </s:sequence>
 </s:complexType>
</s:element>

変数のクラスを作成しました:

class GetOrders {
    public $Token = "THE_TOKEN"; // string
    public $Context='THE_CONTEXT'; // string
    public $StartDate=""; // dateTime
    public $EndDate=""; // dateTime
    public $IncludeFulfilledOrders=true; // boolean
    public $ProductNumber=""; // string
}

soap 呼び出しを実行する関数は次のようになります。

public function GetOrders(GetOrders $parameters) {
return $this->__soapCall('GetOrders',array('parameters'=>array($parameters)),       array(
        'uri' => 'http://www.domain.net/',
        'soapaction' => ''
       )
  );
}

エラーが発生しています: SoapFault 例外: [Client] SOAP-ERROR: Encoding: object has no 'StartDate' property in...

これは、私が渡している $parameters の var_dump です。

object(GetOrders)#1 (6) {
  ["Token"]=>
  string(17) "THE_TOKEN"
  ["Context"]=>
  string(7) "THE_CONTEXT"
  ["StartDate"]=>
  string(25) "2012-09-01T00:00:00-05:00"
  ["EndDate"]=>
  string(25) "2012-09-30T00:00:00-05:00"
  ["IncludeFulfilledOrders"]=>
  bool(true)
  ["ProductNumber"]=>
  string(10) "P-PRODUCT"
}

StartDate の問題が何であるかを理解できないようです。フォーマットは正しいと思います。SOAPについてはよく知らないので、初心者の質問でしたら申し訳ありません。

ありがとう!

4

2 に答える 2

0

私の関数には、これをスローしていたエラーがありました。

これは、関数がどのように読み取られるべきかです。

public function GetOrders(GetOrders $parameters) {
return $this->__soapCall('GetOrders',array('parameters'=>$parameters),        array(
        'uri' => 'http://www.domain.com/',
        'soapaction' => ''
       )
  );
}

array('parameters'=>$parameters) が上記とは異なることに注意してください。

いつもちょっとしたことで…

于 2012-10-30T19:13:54.923 に答える
0

フォーマットが間違っている可能性があります。正しい形式でデータを送信しているかどうかを確認してください。また、生成されたスタブが WSDL 定義に従って生成されているかどうかを確認します。

を使用してリクエストをログに記録できます

    public function __doRequest($request, $location, $action, $version, $one_way = 0)
    {
      // Add code to inspect/dissect/debug/adjust the XML given in $request here

      // Uncomment the following line, if you actually want to do the request
      // return parent::__doRequest($request, $location, $action, $version);
         $dom = new DomDocument('1.0', 'UTF-8');
    $dom->preserveWhiteSpace = false;
    try {
        $dom->loadXML($request);

    } catch (DOMException $de) {
        die ('Parse error with code ' . $de->code);
    }
    $request = $dom->saveXml();
    return parent::__doRequest($request, $location, $action, $version);

    }
于 2012-10-23T19:54:07.483 に答える