天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP調(diào)用Webservice實(shí)例代碼

它是一個(gè)開源軟件,是完全采用php語(yǔ)言編寫的、通過(guò)HTTP收發(fā)SOAP消息的一系列php類,由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )開發(fā)。NuSOAP的一個(gè)優(yōu)勢(shì)是不需要擴(kuò)展庫(kù)的支持,這種特性使得NuSoap可以用于所有的php環(huán)境,不受服務(wù)器安全設(shè)置的影響。 

方法一:直接調(diào)用
復(fù)制代碼 代碼如下:
<?


include(‘NuSoap.php');

// 創(chuàng)建一個(gè)soapclient對(duì)象,參數(shù)是server的WSDL
$client = new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL', ‘wsdl');

// 參數(shù)轉(zhuǎn)為數(shù)組形式傳遞
$aryPara = array(‘strUsername'=>'username', ‘strPassword'=>MD5(‘password'));

// 調(diào)用遠(yuǎn)程函數(shù)
$aryResult = $client->call(‘login',$aryPara);

//echo $client->debug_str;


$document=$client->document;
echo <<<SoapDocument
<?xml version=”1.0″ encoding=”GB2312″?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:si=”http://soapinterop.org/xsd“>
<SOAP-ENV:Body>
$document
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SoapDocument;

?>

方法二:代理方式調(diào)用
復(fù)制代碼 代碼如下:
<?


require(‘NuSoap.php');

//創(chuàng)建一個(gè)soapclient對(duì)象,參數(shù)是server的WSDL
$client=new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL', ‘wsdl');

//生成proxy類
$proxy=$client->getProxy();

//調(diào)用遠(yuǎn)程函數(shù)
$aryResult=$proxy->login(‘username',MD5(‘password'));

//echo $client->debug_str;


$document=$proxy->document;
echo <<<SoapDocument
<?xml version=”1.0″ encoding=”GB2312″?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:si=”http://soapinterop.org/xsd“>
<SOAP-ENV:Body>
$document
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SoapDocument;

?>

許多使用NuSoap 調(diào)用.NET WebService或J2EE WebService的朋友可能都遇到過(guò)中文亂碼問(wèn)題,下面介紹這一問(wèn)題的出現(xiàn)的原因和相應(yīng)的解決方法。

  NuSoap調(diào)用WebService出現(xiàn)亂碼的原因:

  通常我們進(jìn)行WebService開發(fā)時(shí)都是用的UTF-8編碼,這時(shí)我們需要設(shè)置:

$client->soap_defencoding = ‘utf-8′;

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

$client->xml_encoding = ‘utf-8′;

  至此應(yīng)該是一切正常了才對(duì),但是我們?cè)谳敵鼋Y(jié)果的時(shí)候,卻發(fā)現(xiàn)返回的是亂碼。

  NuSoap調(diào)用WebService出現(xiàn)亂碼的解決方法:

  實(shí)際上,開啟了調(diào)試功能的朋友,相信會(huì)發(fā)現(xiàn)$client->response返回的是正確的結(jié)果,為什么$result = $client->call($action, array(‘parameters' => $param)); 卻是亂碼呢?

  研究過(guò)NuSoap代碼后我們會(huì)發(fā)現(xiàn),當(dāng)xml_encoding設(shè)置為UTF-8時(shí),NuSoap會(huì)檢測(cè)decode_utf8的設(shè)置,如果為true,會(huì)執(zhí)行 php 里面的utf8_decode函數(shù),而NuSoap默認(rèn)為true,因此,我們需要設(shè)置:

$client->soap_defencoding = ‘utf-8′;
$client->decode_utf8 = false;
$client->xml_encoding = ‘utf-8′;

補(bǔ)充介紹

NuSOAP 是 php 環(huán)境下的 WEB 服務(wù)編程工具,用于創(chuàng)建或調(diào)用 WEB 服務(wù)。它是一個(gè)開源軟件,當(dāng)前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以與其他支持 SOAP1.1 和 WSDL1.1 的系統(tǒng)互操作。 NuSOAP 完全由php語(yǔ)言編寫,由一系列 php 類組成,不需要擴(kuò)展庫(kù)的支持,這種特性使得 NuSOAP 可以用于所有的 php 環(huán)境,不受服務(wù)器安全設(shè)置的影響。

1. NuSOAP 的獲取和安裝
NuSOAP 項(xiàng)目建立在 SourceForge 上,網(wǎng)絡(luò)地址是: http://sourceforge.NET/projects/nusoap/ ,這里,可以下載到 NuSOAP 的最新的版本。

NuSOAP 的安裝比較簡(jiǎn)單,把下載的 NuSOAP 的文件拷貝到服務(wù)器上,可以放在獨(dú)立的目錄里,也可以與程序代碼放在相同的目錄里,只要你的 php 代碼能夠訪問(wèn)到這些文件就可以了。
本文的測(cè)試環(huán)境基于 php4.3.2 和 NuSOAP 0.7.2 版本, NuSOAP 安裝在 WEB 目錄“ /nusoap ”里,有兩個(gè)子目錄, lib 和 samples 。其中, lib 目錄下存放 NuSOAP 的所有源代碼文件, samples 目錄下是NuSOAP開發(fā)小組提供一些的例子。測(cè)試文件存放在 WEB 目錄“ /nusoap ”里。

2. NuSOAP 的使用
NuSOAP 由一 php 的類組成,其中最常用到的是類soap_server和類soalclient。類soap_server 用于創(chuàng)建 WEB 服務(wù),類soapclient在訪問(wèn)WEB服務(wù)時(shí)會(huì)用到。
2.1 一個(gè)簡(jiǎn)單的例子: Hello World
這個(gè)例子將利用 NuSOAP 創(chuàng)建一個(gè)簡(jiǎn)單的 WEB 服務(wù),并利用 NuSOAP 創(chuàng)建一個(gè)客戶端程序,調(diào)用這個(gè)服務(wù)。這個(gè)服務(wù)唯一的功能就是向客戶端返回一個(gè)字符串“ Hello World ”。首先,創(chuàng)建 WEB 服務(wù)程序代碼文件“ /nusoap/nusoap_server1.php ”:
//把 NuSOAP 的源文件包含到當(dāng)前的代碼文件里
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
//定義服務(wù)程序
function hello() {
return ‘Hello World!';
}
//初始化服務(wù)對(duì)象 , 這個(gè)對(duì)象是類 soap_server 的一個(gè)實(shí)例
$soap = new soap_server; //調(diào)用服務(wù)對(duì)象的 register 方法注冊(cè)需要被客戶端訪問(wèn)的程序。
//只有注冊(cè)過(guò)的程序,才能被遠(yuǎn)程客戶端訪問(wèn)到。
$soap->register(‘hello'); //最后一步,把客戶端通過(guò) post 方式提交的數(shù)據(jù),傳遞給服務(wù)對(duì)象的 service 方法。
//service 方法處理輸入的數(shù)據(jù),調(diào)用相應(yīng)的函數(shù)或方法,并且生成正確的反饋,傳回給客戶端。
$soap->service($HTTP_RAW_POST_DATA);
?>

至此, WEB 服務(wù)程序代碼文件已經(jīng)建好,接下來(lái),創(chuàng)建一個(gè)客戶端程序代碼文件“ /nusoap/nusoap_client1.php ”,調(diào)用 WEB 服務(wù):
復(fù)制代碼 代碼如下:
//把 NuSOAP 的源文件包含到當(dāng)前的代碼文件里
<?php
require_once(“l(fā)ib/nusoap.php”);
//初始化客戶端對(duì)象,這個(gè)對(duì)象是類 soapclient 的一個(gè)實(shí)例,
//把服務(wù)程序的 URL 地址傳遞給soapclient類的構(gòu)造函數(shù)。
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server1.php'); //利用客戶端對(duì)象的 call 方法調(diào)用 WEB 服務(wù)的程序
$str=$client->call(‘hello'); //客戶端對(duì)象的 getError() 方法可以用來(lái)檢查調(diào)用過(guò)程是否出現(xiàn)錯(cuò)誤。
//如果沒(méi)有錯(cuò)誤, getError() 方法返回 false ;如果有錯(cuò)誤, getError()方法返回錯(cuò)誤信息。
if (!$err=$client->getError()) {
echo ” 程序返回 :”,htmlentities($str,ENT_QUOTES);
} else {
echo ” 錯(cuò)誤 :”,htmlentities($err,ENT_QUOTES);
}
?>

至此,客戶端程序也建立好了,打開瀏覽器,訪問(wèn)客戶端程序,看一下結(jié)果。這個(gè)例子,瀏覽器會(huì)顯示字符串:“程序返回 :Hello World! ”
2.2 傳遞參數(shù)和返回錯(cuò)誤信息的方法
再通過(guò)例子說(shuō)明傳遞參數(shù)和返回錯(cuò)誤信息的方法。這個(gè)例子實(shí)現(xiàn)兩個(gè)字符串的連接,參數(shù)是兩個(gè)字符串,返回值是由兩個(gè)參數(shù)連接而成的字符串。首先,創(chuàng)建服務(wù)程序代碼文件“ /nusoap/nusoap_server2.php ”,完整的代碼如下:
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
function concatenate($str1,$str2) {
if (is_string($str1) && is_string($str2))
return $str1 . $str2;
else
return new soap_fault(‘ 客戶端 ‘,”,'concatenate 函數(shù)的參數(shù)應(yīng)該是兩個(gè)字符串 ‘);
}
$soap = new soap_server;
$soap->register(‘concatenate');
$soap->service($HTTP_RAW_POST_DATA);
?>

與 2.1 節(jié) WEB 服務(wù)程序的代碼比較,這里的代碼結(jié)構(gòu)大體是相同的。注意以下兩點(diǎn):
服務(wù)程序的定義不同,帶有兩個(gè)參數(shù)。 NuSOAP 注冊(cè)服務(wù)程序的過(guò)程還是一樣的,都是調(diào)用服務(wù)對(duì)象的 register 方法。
這里使用了 NuSOAP 的一個(gè)新類 soap_fault 。當(dāng)傳入的兩個(gè)參數(shù)有一個(gè)不是字符串時(shí),程序通過(guò)這個(gè)類把錯(cuò)誤信息返回給客戶端。這個(gè)類的構(gòu)造函數(shù)有 4 個(gè)參數(shù):
fault
code
必填參數(shù) , 建議值為“ Client ”或“ Server ”,指明錯(cuò)誤是客戶端的錯(cuò)誤還是服務(wù)端的錯(cuò)誤。

faultactor
預(yù)留項(xiàng),現(xiàn)在還沒(méi)有使用

faultstring
錯(cuò)誤的描述信息

faultdetail
可選項(xiàng), XML 格式的數(shù)據(jù) , 說(shuō)明詳細(xì)的錯(cuò)誤信息

客戶端程序代碼文件“ /nusoap/nusoap_client2.php ”的完整內(nèi)容如下 :
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.php');
$parameters=array(‘ 字符串 1′,' 字符串 2′);
$str=$client->call(‘concatenate',$parameters);
if (!$err=$client->getError()) {
echo ” 程序返回 :”,$str;
} else {
echo ” 錯(cuò)誤 :”,$err;
}
?>

NuSOAP 的客戶端調(diào)用帶參數(shù)的 WEB 服務(wù)時(shí),使用數(shù)組傳遞參數(shù)。 $parameters 是一個(gè)數(shù)組,其中依次是每個(gè)參數(shù)的值。客戶端在調(diào)用遠(yuǎn)程的服務(wù)程序時(shí),使用帶有兩個(gè)參數(shù)的 call 方法,第一個(gè)參數(shù)是服務(wù)程序的名稱,第二個(gè)參數(shù)是服務(wù)程序的參數(shù)數(shù)組,這里是 $parameters 。通過(guò)瀏覽器訪問(wèn)上面的客戶端程序,瀏覽器上會(huì)顯示字符串:“ 程序返回 : 字符串 1 字符串 2 ”
接下來(lái),試著給 WEB 服務(wù)程序傳入錯(cuò)誤參數(shù),修改上面的客戶端程序,把生成參數(shù)數(shù)組的語(yǔ)句改成: $parameters=array(“ 字符串 ”,12) ,再通過(guò)瀏覽器訪問(wèn)客戶端程序,瀏覽器上會(huì)顯示字符串:“錯(cuò)誤 : 客戶端 : concatenate 函數(shù)的參數(shù)應(yīng)該是兩個(gè)字符串”。 WEB 服務(wù)程序判斷傳入的參數(shù)有一個(gè)不是字符串,通過(guò) soap_fault 給客戶端返回錯(cuò)誤信息。
2.3 調(diào)試的方法
NuSOAP中常用的調(diào)試方法有三種:
2.3.1 soapclient 類的 request 和 response 成員變量
最直接的調(diào)試方法就是檢查訪問(wèn) WEB 服務(wù)的過(guò)程中,客戶端發(fā)出的 request 信息和服務(wù)端返回的 response 信息。 soapclient 類的 request 和 response 成員變量包含這些信息,在程序中顯示出這兩個(gè)變量的內(nèi)容,可以幫助分析程序運(yùn)行的情況。看下面的代碼:
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.php');
$parameters=array(‘ 字符串 1′,' 字符串 2′);
$str=$client->call(‘concatenate',$parameters);
if (!$err=$client->getError()) {
echo ” 程序返回 :”,$str;
} else {
echo ” 錯(cuò)誤 :”,$err;
}
//下面顯示request和response 變量的內(nèi)容
echo ‘<p/>';
echo ‘Request:';
echo ‘<pre>',htmlspecialchars($client->request,ENT_QUOTES),'</pre>';
echo ‘Response:';
echo ‘<pre>',htmlspecialchars($client->response,ENT_QUOTES ),'</pre>';
?>

2.3.2 soapclient 類的 debug_str 成員變量
soapclient 類的 debug_str 成員變量提供了更為詳細(xì)的調(diào)試信息,查看這個(gè)變量的內(nèi)容,可以更好地幫助程序調(diào)試。
2.3.3 WEB 服務(wù)程序提供的調(diào)試方法
WEB 服務(wù)程序代碼中,在創(chuàng)建 soap_server 類的實(shí)例前,定義變量 $debug=1 。調(diào)試信息作為備注,放在 SOAP 消息的尾部返回客戶端,客戶端通過(guò)查看 WEB 服務(wù)的 response 信息來(lái)查看調(diào)試信息。
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
function concatenate($str1,$str2) {
if (is_string($str1) && is_string($str2))
return $str1 . $str2;
else
return new soap_fault(‘ 客戶端 ‘,”,'concatenate 函數(shù)的參數(shù)應(yīng)該是兩個(gè)字符串 ‘);
}
$debug=1; //定義調(diào)試
$soap = new soap_server;
$soap->register(‘concatenate');
$soap->service($HTTP_RAW_POST_DATA);
?>

2.4 對(duì) WSDL 的支持
NuSOAP 內(nèi)部通過(guò)類 “WSDL” 實(shí)現(xiàn)對(duì) WSDL 的支持。對(duì)于 NuSOAP 的用戶來(lái)說(shuō),不需要關(guān)心內(nèi)部的WSDL類是如何工作的,正確地使用 soap_server 類和 soapclient 類就可以實(shí)現(xiàn)對(duì) WSDL 的支持。
2.4.1 創(chuàng)建支持 WSDL 的 WEB 服務(wù)
為了實(shí)現(xiàn) WEB 服務(wù)程序?qū)?WSDL 的支持,需要使用 soap_server 的 configureWSDL 方法,并且在調(diào)用 soap_server 的 register 方法注冊(cè) WEB 服務(wù)程序時(shí),需要提供更詳細(xì)的參數(shù)。看下面的代碼,代碼的文件名是 “/nusoap/nusoap_server3.php”。
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
function concatenate($str1,$str2) {
if (is_string($str1) && is_string($str2))
return $str1 . $str2;
else
return new soap_fault(‘ 客戶端 ‘,”,'concatenate 函數(shù)的參數(shù)應(yīng)該是兩個(gè)字符串 ‘);
}
$soap = new soap_server;
$soap->configureWSDL(‘concatenate'); // 初始化對(duì) WSDL 的支持
// 注冊(cè)服務(wù)
$soap->register(‘concatenate',
array(“str1″=>”xsd:string”,”str2″=>”xsd:string”), // 輸入?yún)?shù)的定義
array(“return”=>”xsd:string”) // 返回參數(shù)的定義
);
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”;
$soap->service($HTTP_RAW_POST_DATA);
?>

現(xiàn)在打開瀏覽器,訪問(wèn)剛才建立的文件,http://127.0.0.1/nusoap/nusoap_server3.php,結(jié)果如下:
concatenate
View the WSDL for the service. Click on an operation name to view it's details.
concatenate
點(diǎn)擊函數(shù)名稱concatenate,可以看到對(duì)函數(shù)的描述。點(diǎn)擊”WSDL”,或者訪問(wèn)WEB服務(wù)文件,并在后面加上查詢字符串”?wsdl”(http://127.0.0.1/nusoap/nusoap_server3.php?wsdl),可以得到WEB服務(wù)的WSDL內(nèi)容。
2.4.2 通過(guò) WSDL 調(diào)用 WEB 服務(wù)
通過(guò) WSDL 調(diào)用 WEB 服務(wù),與不通過(guò) WSDL 調(diào)用 WEB 服務(wù),程序的結(jié)構(gòu)大體相同。區(qū)別在于,通過(guò) WSDL 調(diào)用 WEB 服務(wù),初始化 soapclient 類時(shí),傳入兩個(gè)參數(shù)到 soapclient 的構(gòu)造函數(shù),第一個(gè)參數(shù)是 WSDL 文件的地址,第二個(gè)參數(shù)指定是否使用 WSDL ,指定為 true 即可。看下面的代碼,代碼的文件名是 “ /nusoap/nusoap_client3.php
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl',true);
$parameters=array(‘ 字符串 1′,' 字符串 2′);
$str=$client->call(‘concatenate',$parameters);
if (!$err=$client->getError()) {
echo ” 程序返回 :”,$str;
} else {
echo ” 錯(cuò)誤 :”,$err;
}
?>

2.4.3 代理的使用
NuSOAP 提供代理的方法調(diào)用遠(yuǎn)程 WEB 服務(wù)。這種方法,在客戶端程序里面創(chuàng)建一個(gè)遠(yuǎn)程服務(wù)的代理對(duì)象,通過(guò)代理直接調(diào)用遠(yuǎn)程的 WEB 服務(wù),而不需要通過(guò) soalclient 類的 call 方法。看下面的代碼。
復(fù)制代碼 代碼如下:
<?php
require_once(“l(fā)ib/nusoap.php”);
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl',true);
$proxy=$client -> getProxy(); // 創(chuàng)建代理對(duì)象 (soap_proxy 類 )
$str=$proxy->concatenate(” 參數(shù) 1″,” 參數(shù) 2″); // 直接調(diào)用 WEB 服務(wù)
if (!$err=$proxy->getError()) {
echo ” 程序返回 :”,$str;
} else {
echo ” 錯(cuò)誤 :”,$err;
}
?>

php技術(shù)PHP調(diào)用Webservice實(shí)例代碼,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久re这里精品在线视频7 | 99爱在线观看精品视频 | 玛雅成人网 | 91精品国产高清久久久久久 | 中文字幕午夜乱理片 | 精品久久电影网 | 午夜福利理论片高清在线 | 亚洲三级黄色 | 热久久视久久精品18 | 无遮18禁在线永久免费观看挡 | 日韩精品特黄毛片免费看 | 思思久久99热只有频精品66 | OLDMAN老头456 TUBE| 国产亚洲精品精品国产亚洲综合 | 亚洲a视频在线观看 | 免费毛片观看 | 亚洲国产在线精品国自产拍五月 | 亚洲AV国产国产久青草 | 把极品白丝老师啪到腿软 | 印度性hd18| 国产av久久免费观看 | 欧美一区二区高清 | 耻辱の奴隷淑女中文字幕 | 亚洲AV久久婷婷蜜臀无码不卡 | 在线不卡日本v二区到六区 在线不卡日本v二区 | 成人毛片一区二区三区 | 久久久WWW免费人成精品 | 美女网站免费看 | 无码一区二区三区 | 国语自产二区高清国语自产拍 | 9420高清免费观看在线大全 | 国产久爱青草视频在线观看 | 国产精品成人无码久免费 | 久久er国产精品免费观看2 | 亚洲日本一区二区三区在线不卡 | 老女老肥熟国产在线视频 | 亚洲综合中文字幕无线码 | 中国bdsmchinesehd 中俄两军在日本海等上空战略巡航 | 亚洲在线无码免费观看 | 久久久久综合 | 久久久久激情免费观看 |