[英]SOAP PHP : how to translate request file to PHP function call
我從PHP的SOAP庫開始,我不知道如何執行我的請求:
服務器具有用戶友好的API,該API向我發送了傳遞請求,但我不知道應該怎么做。
這是我目前的意思:
$soap = new SoapClient("https://www.dmc.sfr-sh.fr/DmcWS/1.5.6/MessagesUnitairesWS?wsdl");
$soap->getSingleCallCra();
和我應該通過的要求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://servicedata.ws.dmc.sfrbt/">
<soapenv:Header>
<ser:authenticate>
<serviceId>********</serviceId>
<servicePassword>******</servicePassword>
<spaceId>*******</spaceId>
<lang>fr_FR</lang>
</ser:authenticate>
</soapenv:Header>
<soapenv:Body>
<ser:getSingleCallCra>
<beginDate>2017-10-17T00:00:00</beginDate>
</ser:getSingleCallCra>
</soapenv:Body>
</soapenv:Envelope>
SOAP客戶端確實可以為沒有參數的其他功能工作,但是當我調用此功能時,我得到了翻譯的Java NPE異常。
誰能告訴我如何將參數和身份驗證傳遞給函數?
謝謝。
$soap = new SoapClient("https://www.dmc.sfr-sh.fr/DmcWS/1.5.6/MessagesUnitairesWS?wsdl");
要將標頭添加到soapcall中,請使用__setSoapHeaders方法,如下所示:
$soap->__setSoapHeaders(array(
//(namespace, name, data)
new SoapHeader("http://servicedata.ws.dmc.sfrbt/",'authenticate',array(
'serviceId' => '********',
'servicePassword' => '******',
'spaceId' => '*******',
'lang' => 'fr_FR',
))
));
這些參數將進入肥皂主體。 在PHP中,您可以使用對象或關聯數組作為輸入,因為它們都被解釋為xml =鍵對值對。
$soap_body_parameters = array(
'beginDate' => '2017-10-17T00:00:00',
);
$response = $soap->getSingleCallCra($soap_body_parameters);
print_r($response);
soapclient類的返回值始終是一個對象,因此請記住使用箭頭符號“ $ object-> property”來獲取相關數據。
class sfr_soap {
function __construct($serviceId, $servicePassword, $spaceId, $lang = 'fr_FR'){
$url = "https://www.dmc.sfr-sh.fr/DmcWS/1.5.6/MessagesUnitairesWS?wsdl";
$this->client = new SoapClient($url);
$soap->__setSoapHeaders(array(
new SoapHeader("http://servicedata.ws.dmc.sfrbt/",'authenticate',array(
'serviceId' => $serviceId,
'servicePassword' => $servicePassword,
'spaceId' => $spaceId,
'lang' => $lang,
))
));
}
public function __call($name, $args = array()){
$response = $this->client->$name($args);
// do something with the response here, like extract the meaningful parts of the data
return $response;
}
}
像這樣初始化
$sfr = new sfr_soap($serviceId, $servicePassword, $spaceId);
或類似這樣,如果您想指定語言
$sfr = new sfr_soap($serviceId, $servicePassword, $spaceId, $lang);
這樣使用
$data = $sfr->getSingleCallCra(array(
'beginDate' => '2017-10-17T00:00:00'
));
您可以按照文檔中所述的多種方式將參數傳遞給SOAP函數調用: SoapClient :: __ soapCall
要傳遞給函數的參數數組。 這可以是有序數組或關聯數組。 請注意,大多數SOAP服務器都需要提供參數名稱,在這種情況下,它必須是一個關聯數組。
因此,在您的情況下,呼叫應為:
$soap->getSingleCallCra(array(
'beginDate' => '2017-10-17T00:00:00',
));
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.