天天看點

PHP調用Webservice執行個體

方法一:直接調用

<?

/******************************************************************************/

/*  檔案名 : soapclient.php

/*  說  明 : WebService接口用戶端例程

include('NuSoap.php');

// 建立一個soapclient對象,參數是server的WSDL 

$client = new soapclient('http://localhost/Webservices/Service.asmx?WSDL', 'wsdl');

// 參數轉為數組形式傳遞

$aryPara = array('strUsername'=>'username', 'strPassword'=>MD5('password'));

// 調用遠端函數

$aryResult = $client->call('login',$aryPara);

//echo $client->debug_str;

/*

if (!$err=$client->getError()) {

  print_r($aryResult); 

} else { 

  print "ERROR: $err"; 

}

*/

$document=$client->document;

echo <<<SoapDocument

<?xml version="1.0" encoding="GB2312"?>

   <SOAP-ENV:Body>

   $document

   </SOAP-ENV:Body>

 </SOAP-ENV:Envelope>

SoapDocument;

?>

方法二:代理方式調用

require('NuSoap.php');

//建立一個soapclient對象,參數是server的WSDL 

$client=new soapclient('http://localhost/Webservices/Service.asmx?WSDL', 'wsdl');

//生成proxy類 

$proxy=$client->getProxy();

//調用遠端函數 

$aryResult=$proxy->login('username',MD5('password'));

if (!$err=$proxy->getError()) {

$document=$proxy->document;

  許多使用NuSoap 調用.NET WebService或J2EE  WebService的朋友可能都遇到過中文亂碼問題,下面介紹這一問題的出現的原因和相應的解決方法。

  NuSoap調用WebService出現亂碼的原因:

  通常我們進行WebService開發時都是用的UTF-8編碼,這時我們需要設定:

$client->soap_defencoding = 'utf-8';

  同時,需要讓xml以同樣的編碼方式傳遞:

$client->xml_encoding = 'utf-8';

   至此應該是一切正常了才對,但是我們在輸出結果的時候,卻發現傳回的是亂碼。

  NuSoap調用WebService出現亂碼的解決方法:

  實際上,開啟了調試功能的朋友,相信會發現$client->response傳回的是正确的結果,為什麼$result = $client->call($action, array('parameters' => $param)); 卻是亂碼呢?

  研究過NuSoap代碼後我們會發現,當xml_encoding設定為UTF-8時,NuSoap會檢測decode_utf8的設定,如果為true,會執行 PHP 裡面的utf8_decode函數,而NuSoap預設為true,是以,我們需要設定:

$client->decode_utf8 = false;