PHP Webservice简单实例
来源:互联网 发布:淘宝充值未到账怎么办 编辑:程序博客网 时间:2024/05/17 03:04
这是对上一篇《PHP Webservice知识点笔记》的一个简单实例补充。
- 测试网站目录:http://test.com/testWebservice/
- server端代码serverHasWsdl.php(WSDL模式)
<?phpdefine('WSDL_URL','test.wsdl'); //定义WSDL文件路径ini_set('soap.wsdl_cache_enabled', '0'); //关闭WSDL缓存 //WSDL文件不存在时自动创建if(!file_exists(WSDL_URL)){ require_once 'SoapDiscovery.class.php'; $disco = new SoapDiscovery('MyTest', 'test.com'); //SoapDiscovery是网上一个生成wsdl的类 $str = $disco->getWSDL(); file_put_contents(WSDL_URL, $str);}$server = new SoapServer(WSDL_URL); $server->setClass('MyTest');$server->handle(); //测试类class MyTest { public function addition ($a=0, $b=0){ return $a + $b; } }?>
- client端代码clientHasWsdl.php(WSDL模式)
<?php$client = new SoapClient("http://test.com/testWebservice/test.wsdl");try { $result = $client->addition(100,200); //$result = $client->__soapCall('addition',array(600,200)); var_dump($result);}catch (SoapFault $f) { echo "Error Message: {$f->getMessage()}";}?>
- server端代码serverNonWsdl.php(non-WSDL模式)
<?php$server = new SoapServer(null, array('uri'=>'testWebservice','soap_version'=>SOAP_1_2));$server->setClass('MyTest');$server->handle();//测试类class MyTest { public function addition ($a=0, $b=0){ return $a + $b; } }?>
- client端代码clientNonWsdl.php(non-WSDL模式)
<?php$client = new SoapClient(null, array('location'=>'http://test.com/testWebservice/serverNonWsdl.php','uri'=>'testWebservice'));try { $result = $client->addition(200,300); //$result = $client->__soapCall('addition',array(300,300)); var_dump($result);}catch (SoapFault $f) { echo "Error Message: {$f->getMessage()}";}?>
- 通过CURL访问clientCurl.php
<?php$requestxml = '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:test.com"> <soapenv:Header/> <soapenv:Body> <urn:addition soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <a xsi:type="xsd:string">300</a> <b xsi:type="xsd:string">500</b> </urn:addition> </soapenv:Body></soapenv:Envelope>';$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'http://test.com/testWebservice/serverHasWsdl.php');//curl_setopt($ch, CURLOPT_URL, 'http://test.com/testWebservice/serverNonWsdl.php');curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $requestxml);curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/soap+xml; charset=utf-8", "Content-length: ".strlen($requestxml))); $response = curl_exec($ch);curl_close($ch);echo $response;?>
- SoapDiscovery.class.php
<?php /** * Copyright (c) 2005, Braulio Jos?Solano Rojas * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of * conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * Neither the name of the Solsoft de Costa Rica S.A. nor the names of its contributors may * be used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * * @version $Id$ * @copyright 2005 *//** * SoapDiscovery Class that provides Web Service Definition Language (WSDL). * * @package SoapDiscovery * @author Braulio Jos?Solano Rojas * @copyright Copyright (c) 2005 Braulio Jos?Solano Rojas * @version $Id$ * @access public **/class SoapDiscovery {private $class_name = '';private $service_name = '';/** * SoapDiscovery::__construct() SoapDiscovery class Constructor. * * @param string $class_name * @param string $service_name **/public function __construct($class_name = '', $service_name = '') {$this->class_name = $class_name;$this->service_name = $service_name;}/** * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable. * * @return string **/public function getWSDL() {if (empty($this->service_name)) {throw new Exception('No service name.');}$headerWSDL = "<?xml version=\"1.0\" ?>\n";$headerWSDL.= "<definitions name=\"$this->service_name\" targetNamespace=\"urn:$this->service_name\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tns=\"urn:$this->service_name\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns=\"http://schemas.xmlsoap.org/wsdl/\">\n";$headerWSDL.= "<types xmlns=\"http://schemas.xmlsoap.org/wsdl/\" />\n";if (empty($this->class_name)) {throw new Exception('No class name.');}$class = new ReflectionClass($this->class_name);if (!$class->isInstantiable()) {throw new Exception('Class is not instantiable.');}$methods = $class->getMethods();$portTypeWSDL = '<portType name="'.$this->service_name.'Port">';$bindingWSDL = '<binding name="'.$this->service_name.'Binding" type="tns:'.$this->service_name."Port\">\n<soap:binding style=\"rpc\" transport=\"http://schemas.xmlsoap.org/soap/http\" />\n";$serviceWSDL = '<service name="'.$this->service_name."\">\n<documentation />\n<port name=\"".$this->service_name.'Port" binding="tns:'.$this->service_name."Binding\"><soap:address location=\"http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."\" />\n</port>\n</service>\n";$messageWSDL = '';foreach ($methods as $method) {if ($method->isPublic() && !$method->isConstructor()) {$portTypeWSDL.= '<operation name="'.$method->getName()."\">\n".'<input message="tns:'.$method->getName()."Request\" />\n<output message=\"tns:".$method->getName()."Response\" />\n</operation>\n";$bindingWSDL.= '<operation name="'.$method->getName()."\">\n".'<soap:operation soapAction="urn:'.$this->service_name.'#'.$this->class_name.'#'.$method->getName()."\" />\n<input><soap:body use=\"encoded\" namespace=\"urn:$this->service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</input>\n<output>\n<soap:body use=\"encoded\" namespace=\"urn:$this->service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</output>\n</operation>\n"; $messageWSDL.= '<message name="'.$method->getName()."Request\">\n";$parameters = $method->getParameters();foreach ($parameters as $parameter) {$messageWSDL.= '<part name="'.$parameter->getName()."\" type=\"xsd:string\" />\n";}$messageWSDL.= "</message>\n";$messageWSDL.= '<message name="'.$method->getName()."Response\">\n";$messageWSDL.= '<part name="'.$method->getName()."\" type=\"xsd:string\" />\n";$messageWSDL.= "</message>\n";}}$portTypeWSDL.= "</portType>\n";$bindingWSDL.= "</binding>\n";return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');}/** * SoapDiscovery::getDiscovery() Returns discovery of WSDL. * * @return string **/public function getDiscovery() {return "<?xml version=\"1.0\" ?>\n<disco:discovery xmlns:disco=\"http://schemas.xmlsoap.org/disco/\" xmlns:scl=\"http://schemas.xmlsoap.org/disco/scl/\">\n<scl:contractRef ref=\"http://".$_SERVER['SERVER_NAME'].':'.$_SERVER['SERVER_PORT'].$_SERVER['PHP_SELF']."?wsdl\" />\n</disco:discovery>";}}?>
0 0
- PHP Webservice简单实例
- php webservice soap简单实例
- php webservice实例(简单易懂)
- php webservice soap简单实例
- php webservice实例(简单易懂)
- PHP调用JAVA的WebService简单实例
- 采用Soap方式的php的webservice简单实例
- php中四中webservice实现的简单架构及实例
- php webservice中使用soapheader简单验证 实例
- php中四种webservice实现的简单架构方法及实例
- PHP调用Webservice实例
- PHP调用Webservice实例
- php webservice实例
- php webservice实例
- php webservice实例
- php webservice实例
- php webservice实例
- php webservice实例
- Java-获取网络资源大小
- 基于RollPagerView实现图片轮播功能
- Redis 一:Linux下 安装Redis并配置服务
- Java + 对象的聚合例子(计算三角形、圆形的面积)
- 用递归函数实现字符串反向输出
- PHP Webservice简单实例
- core_animation_lesson0
- 网易邮箱的JS插件被AdBlock广告屏蔽插件拦截,导致无法显示邮件图片
- My SQL为列增加约束的几种形式
- (类型*)
- LT 高质量代码
- c日常
- 二维树状状数(专题学习)
- Docker配置2.x私有仓库