生活随笔
收集整理的這篇文章主要介紹了
php soap实例讲解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一,什么是soap,什么是wsdl,為什么要用他們
SOAP是基于XML和HTTP通信協(xié)議,xml各種平臺,各種語言都支持的一個種語言。http呢它得到了所有的因特網(wǎng)瀏覽器及服務(wù)器的支持。
WSDL 指網(wǎng)絡(luò)服務(wù)描述語言 (Web Services Description Language),是一種使用 XML 編寫的文檔。這種文檔可描述某個 Web service。它可規(guī)定服務(wù)的位置,以及此服務(wù)提供的操作。
我是做php的,你是java的,他是做.net,如果我們?nèi)齻€之間要進行通信,要進行數(shù)據(jù)交換,怎么辦呢?我們需要一個能和我們都能通信的工具。soap,wsdl被創(chuàng)造出來,使得運行在不同的操作系統(tǒng)并使用不同的技術(shù)和編程語言的應(yīng)用程序可以互相進行通信。
二,實例
如果php要使用soap的話,通常做法是,添加了一下php的soap模塊,在php.ini里面加上soap.so,下面介紹一個不要添加soap.so文件,也可以實現(xiàn)soap的方法
nusoap是php寫的一個功能文件,包涵進來就可以用了,網(wǎng)上很多自己去搜一下吧。
1,不使用wsdl
a,服務(wù)端helloworld2.php
查看復(fù)制打印?
<?php??//包函nusoap.php??require_once('./lib/nusoap.php');????//創(chuàng)建服務(wù)端??$server?=?new?soap_server;????//定義客戶端調(diào)用方法??$server->register('hello');????//調(diào)用方法以及參數(shù)??function?hello($name)?{???return?'Hello,?'?.?$name;??}????$HTTP_RAW_POST_DATA?=?isset($HTTP_RAW_POST_DATA)???$HTTP_RAW_POST_DATA?:?'';??$server->service($HTTP_RAW_POST_DATA);???>??
b,客戶端hello.php
查看復(fù)制打印?
<?php??//包函nusoap.php??require_once('./lib/nusoap.php');??//新建一個soap客戶端,調(diào)用服務(wù)端提供的wsdl??//$client?=?new?soapclient('http://localhost/test/hellowsdl2.php?wsdl',?true);??$client?=?new?soapclient('http://localhost/test/helloworld2.php');??//查看一下是不是報錯??$err?=?$client->getError();??if?($err)?{???//顯示錯誤???echo?'<h2>Constructor?error</h2><pre>'?.?$err?.?'</pre>';??}????//調(diào)用服務(wù)端的方法??$result?=?$client->call('hello',?array('person'?=>?"this?is?a?test"));????echo?'<h2>Result</h2><pre>';??print_r($result);??echo?'</pre>';???>??
2,使用wsld
a,服務(wù)器端
查看復(fù)制打印?
<?php??//包函nusoap.php??require_once('./lib/nusoap.php');??//新建一個soap服務(wù)??$server?=?new?soap_server();??//初始化支持wsdl??$server->configureWSDL('hellowsdl2',?'urn:hellowsdl2');??//定義數(shù)據(jù)結(jié)構(gòu)來接收數(shù)據(jù)??$server->wsdl->addComplexType(???'Person',???'complexType',???'struct',???'all',???'',???array(???'firstname'?=>?array('name'?=>?'firstname',?'type'?=>?'xsd:string'),//后面的type定義數(shù)據(jù)的類型,這個是string???'age'?=>?array('name'?=>?'age',?'type'?=>?'xsd:int'),//后面的type定義數(shù)據(jù)的類型,這個是int???'gender'?=>?array('name'?=>?'gender',?'type'?=>?'xsd:string')//后面的type定義數(shù)據(jù)的類型,這個是string???)??);??$server->wsdl->addComplexType(???'SweepstakesGreeting',???'complexType',???'struct',???'all',???'',???array(???'greeting'?=>?array('name'?=>?'greeting',?'type'?=>?'xsd:string'),???'winner'?=>?array('name'?=>?'winner',?'type'?=>?'xsd:string')???)??);??//服務(wù)器定義的soap調(diào)用方法??$server->register('hello',????????????????????//?方法名字hello,方法就在下面???array('person'?=>?'tns:Person'),??????????//?客戶端傳來的變量???array('return'?=>?'tns:SweepstakesGreeting'),????//返回參數(shù)???'urn:hellowsdl2',?????????????????????????//?soap名???'urn:hellowsdl2#hello',???????????????????//?soap的方法名???'rpc',????????????????????????????????????//?使用的方式???'encoded',????????????????????????????????//?編碼???'test'????????????????????????????????????//?存檔??);??//定義上面注冊過的函數(shù)hello??function?hello($person)?{???$greeting?=?'Hello,?'?.?$person['firstname']?.???'.?It?is?nice?to?meet?a?'?.?$person['age']?.???'?year?old?'?.?$person['gender']?.?'.';?????$winner?=??'Scott';??//要返回的數(shù)據(jù)???return?array(???'greeting'?=>?$greeting,???'winner'?=>?$winner???);??}??//?請求時(試圖)調(diào)用服務(wù)??$HTTP_RAW_POST_DATA?=?isset($HTTP_RAW_POST_DATA)???$HTTP_RAW_POST_DATA?:?'';??$server->service($HTTP_RAW_POST_DATA);???>??
b,客戶端
查看復(fù)制打印?
<?php??//包函nusoap.php??require_once('./lib/nusoap.php');??//新建一個soap客戶端,調(diào)用服務(wù)端提供的wsdl??//$client?=?new?soapclient('http://localhost/test/hellowsdl2.php?wsdl',?true);??$client?=?new?soapclient('http://localhost/test/helloworld2.php');??//查看一下是不是報錯??$err?=?$client->getError();??if?($err)?{???//顯示錯誤???echo?'<h2>Constructor?error</h2><pre>'?.?$err?.?'</pre>';??}??//要向服務(wù)端要傳的參數(shù)??$person?=?array('firstname'?=>?'Willi',?'age'?=>?22,?'gender'?=>?'male');????//調(diào)用服務(wù)端的方法??$result?=?$client->call('hello',?array('person'?=>?$person));??//錯誤審核??if?($client->fault)?{???echo?'<h2>Fault</h2><pre>';???print_r($result);???echo?'</pre>';??}?else?{???$err?=?$client->getError();???if?($err)?{???echo?'<h2>Error</h2><pre>'?.?$err?.?'</pre>';???}?else?{???echo?'<h2>Result</h2><pre>';???print_r($result);???echo?'</pre>';???}??}??//顯示請求信息??echo?'<h2>Request</h2>';??echo?'<pre>'?.?htmlspecialchars($client->request,?ENT_QUOTES)?.?'</pre>';??//顯示返回信息??echo?'<h2>Response</h2>';??echo?'<pre>'?.?htmlspecialchars($client->response,?ENT_QUOTES)?.?'</pre>';??//顯示調(diào)試信息??echo?'<h2>Debug</h2>';??echo?'<pre>'?.?htmlspecialchars($client->debug_str,?ENT_QUOTES)?.?'</pre>';???>??
上面二個例子不管是客戶端,還是服務(wù)器端,都是用php寫的,你可以試著用多種語言來寫,來測試一下。不管你是用php的模塊,還是用nusoap,里面具體方法就不在這多說了,手冊里面都有。
來源:https://www.cnblogs.com/caicaizi/p/6734130.html
總結(jié)
以上是生活随笔為你收集整理的php soap实例讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。