2013-08-30 32 views
0

編輯:PHP SOAP國家鐵路查詢

我得到了一個未經授權的故障。原來是因爲我提供了一個不正確的標記。我現在有一個工作令牌,因此不再被授權。不過,我仍然收到錯誤消息。現在它說'SOAP錯誤:編碼:對象沒有'numRows'屬性'

如何使numRows和crs子節點GetDepartureBoardRequest?

感謝


我想從國家鐵路查詢訪問即時出發...

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

我有一個訪問令牌。

我遇到了生成客戶端xml和驗證的問題。

按照(非常有限)的文檔,我的SOAP信封看起來應該是這樣......

<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故障對象:

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文檔,並將其搜索到了一個突破點。

任何想法?

+0

--- [faultstring] =>未授權 - - ---重複檢查使用的正確標記。如果是這樣,你的肥皂頭看起來正確。因此,如果令牌是正確的,請聯繫該API的技術支持,並告知他們有關即使您提供正確標記也無法登錄的問題。 – hakre

+0

謝謝你的回答,事實證明我被給了不正確的標記。這是排序,但現在我得到一個錯誤,說對象沒有numRows屬性。我怎麼能讓numRows和crs在這個問題上作爲GetDepartureBoard的孩子出現在我的soapenvelope中? – user2583270

回答

0

是的!非常感謝您指出不正確的標記。

原來的另一個問題是由於我是如何設置參數並致電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); 

作品現在請客:)

+0

嘿,你在哪裏要求令牌? – digitalWestie