我得到了一個未經授權的故障。原來是因爲我提供了一個不正確的標記。我現在有一個工作令牌,因此不再被授權。不過,我仍然收到錯誤消息。現在它說'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文檔,並將其搜索到了一個突破點。
任何想法?
--- [faultstring] =>未授權 - - ---重複檢查使用的正確標記。如果是這樣,你的肥皂頭看起來正確。因此,如果令牌是正確的,請聯繫該API的技術支持,並告知他們有關即使您提供正確標記也無法登錄的問題。 – hakre
謝謝你的回答,事實證明我被給了不正確的標記。這是排序,但現在我得到一個錯誤,說對象沒有numRows屬性。我怎麼能讓numRows和crs在這個問題上作爲GetDepartureBoard的孩子出現在我的soapenvelope中? – user2583270