簡體   English   中英

SOAP PHP:如何將請求文件轉換為PHP函數調用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM