2016-06-01 95 views
1

我想在PHP開發的項目中調用Web服務的功能。這是我的代碼:如何使用SOAP Web服務和它在PHP中的XML

$wsdl="http://x.x.x.x:8090/charge/services/Amount?wsdl"; 

$client = new SoapClient($wsdl) or die("Error"); 

$chargeAmountArray = array('UserIdentifier' => $number , 
          'data' => array(
          'description' => array("Channel=test|".$Origin), 
          'currency' => NULL, 
          'code' => $code), 
          'refrence' => $refcode); 

$header = new SoapHeader('servicekey', $servicekey); 

$client->__setSoapHeaders($header); 

$res = $client->__call('chargeAmount',$chargeAmountArray); 

return $res->return; 

我已經看到我使用tcpdump XML代碼,它是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.csapi.org/schema/parlayx/payment/amount_charging/v4_0/local" xmlns:ns2="servicekey"> 
    <SOAP-ENV:Header> 
     <ns2:e0ce5ed56d7c4d60/> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <ns1:chargeAmount/> 
     <param1> 
      <item> 
       <key>description</key> 
       <value>yChannel=test|30733</value> 
      </item> 
      <item> 
       <key>currency</key> 
       <value/> 
      </item> 
      <item> 
       <key>code</key> 
       <value>MOBDY</value> 
      </item> 
     </param1> 
     <param2>1PN1mROoZop2hAy</param2> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

正如你所看到的UserIdentifier不過去了,refrence參數在XML沒有名字。

回答

0

我在這裏看到一些錯誤。

constructor signature for the SoapHeader class顯示第一個參數是一個名稱空間聲明,它不會出現您正在設置。

另外,SoapClient::__call() is deprecated;而應該直接調用方法:

$res = $client->chargeAmount($chargeAmountArray); 

SoapClient::__call()與鍵「參數」,這您沒有提供一個數組期望參數。

最後,你應該做一些錯誤檢查與try/catch萬一無法連接因爲任何原因。

+0

我不明白你的意思是什麼這個句子:SoapHeader類的構造函數簽名顯示第一個參數是一個名稱空間聲明,它不會出現你正在設置。由於我使用了'nusoap',因此我使用了'SoapClient :: __ call()'。我還用'try/catch'和call函數來調用函數'$ res = $ client - > __ call('chargeAmount',array('parameters'=> $ chargeAmountArray)); '我得到這個錯誤:'致命錯誤:未捕獲SoapFault異常:[soapenv:Server]未知' – hodhod

+0

構造函數是當您使用'新SoapHeader()'時調用的函數。你說錯了。不要使用'SoapClient__call()',它已經被棄用了。 – miken32