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