0

編集:

不正な障害が発生していました。それは、間違ったトークンが提供されたためであることがわかりました。これでトークンが機能するようになったので、無許可になることはもうありません。しかし、私はまだエラーが発生しています。現在、「SOAP-ERROR: Encoding: object has not 'numRows' property」と表示されています

GetDepartureBoardRequest の numRows と crs の子ノードを作成するにはどうすればよいですか??

ありがとう


National Rail Enquiries からのライブ出発情報にアクセスしようとしています...

https://staging.livedepartureboards.co.uk/ldbws/

アクセストークンを持っています。

クライアント xml の生成と認証に問題があります。

(非常に限られた) ドキュメントによると、私の石鹸の封筒は次のようになります...

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://thalesgroup.com/RTTI/2010-11-01/ldb/commontypes" xmlns:typ="http://thalesgroup.com/RTTI/[put your version here]/ldb/types">
   <soapenv:Header>
      <com:AccessToken>
         <com:TokenValue>XXXXXXXXXXXXXXXXXXXXXXXXXX</com:TokenValue>
      </com:AccessToken>
   </soapenv:Header>
   <soapenv:Body>
      <typ:GetDepartureBoardRequest>
         <typ:numRows>10</typ:numRows>
         <typ:crs>MAN</typ:crs>
      </typ:GetDepartureBoardRequest>
   </soapenv:Body>
</soapenv:Envelope>

現在、私のものは次のようになっています。

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://thalesgroup.com/RTTI/2012-01-13/ldb/types" xmlns:ns2="http://thalesgroup.com/RTTI/2010-11-01/ldb/commontypes">
    <SOAP-ENV:Header>
        <ns2:AccessToken>
            <ns2:TokenValue>XXXXXXXXXXXXXXXXX</ns2:TokenValue>
        </ns2:AccessToken>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns1:GetDepartureBoardRequest/>
        <ns1:crs>MAN</ns1:crs>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

そして、これは私がそれを生成するために使用しているPHPです:

<?php
$token = 'XXXXXXXXXXXXXXXXXXXXXXXXX';

$client = new SoapClient("https://staging.livedepartureboards.co.uk/ldbws/wsdl.aspx",
                   array('trace' => TRUE));

$headerParams = array('ns2:TokenValue'    => $token);

$soapStruct = new SoapVar($headerParams, SOAP_ENC_OBJECT);
$header = new SoapHeader('http://thalesgroup.com/RTTI/2010-11-01/ldb/commontypes', 'AccessToken', $soapStruct, false);
$client->__setSoapHeaders($header);

try {

    $args =  array(
               new SoapParam('10','ns1:numRows'),
               new SoapParam('WIL','ns1:crs')
        );


  $response = $client->__call('GetDepartureBoard',$args);

}
  catch(Exception $e){
      print_r($e);
      }
      echo "REQUEST:\n" . $client->__getLastRequest() . "\n";
?>

最後に、これが返される SOAP Fault オブジェクトです。

SoapFault Object
(
    [message:protected] => SOAP-ERROR: Encoding: object hasn't 'numRows' property
    [string:Exception:private] => 
    [code:protected] => 0
    [file:protected] => /var/www/vhosts/MYSITE.co.uk/httpdocs/live-departures/index.php
    [line:protected] => 22
    [trace:Exception:private] => Array
        (
            [0] => Array
                (
                    [function] => __call
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => GetDepartureBoard
                            [1] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => SoapParam Object
                                                (
                                                    [param_name] => ns1:numRows
                                                    [param_data] => 10
                                                )

                                            [1] => SoapParam Object
                                                (
                                                    [param_name] => ns1:crs
                                                    [param_data] => MAN
                                                )

                                        )

                                )

                        )

                )

            [1] => Array
                (
                    [file] => /var/www/vhosts/MYSITE.co.uk/httpdocs/live-departures/index.php
                    [line] => 22
                    [function] => GetDepartureBoard
                    [class] => SoapClient
                    [type] => ->
                    [args] => Array
                        (
                            [0] => Array
                                (
                                    [0] => SoapParam Object
                                        (
                                            [param_name] => ns1:numRows
                                            [param_data] => 10
                                        )

                                    [1] => SoapParam Object
                                        (
                                            [param_name] => ns1:crs
                                            [param_data] => MAN
                                        )

                                )

                        )

                )

        )

    [previous:Exception:private] => 
    [faultstring] => SOAP-ERROR: Encoding: object hasn't 'numRows' property
    [faultcode] => Client
    [faultcodens] => http://schemas.xmlsoap.org/soap/envelope/
)

これは私を夢中にさせています。何が起こっているのか理解できないようです。私はすべての PHP SOAP ドキュメントを読み、ググって限界点まで調べました。

何か案は?

4

1 に答える 1

0

はい!間違ったトークンを指摘してくれた hakre に感謝します。

他の問題は、引数の設定方法と GetDepartureBoard への呼び出し方法が原因であることが判明しました。

これを行う代わりに:

    $args =  array(
               new SoapParam('10','ns1:numRows'),
               new SoapParam('WIL','ns1:crs')
        );


  $response = $client->__call('GetDepartureBoard',$args);

私はこれをしていたはずです:

    $args =  array(
              'numRows'=>'10',
               'crs'=>'MAN'
        );

  $response = $client->GetDepartureBoard($args);

今すぐ治療します:)

于 2013-08-30T13:22:40.090 に答える