网站地图    收藏   

主页 > 后端 > php资料库 >

PHP中的SOAP请求Webserver_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 1 预定义类 SoapClient SoapFault SoapHeader (low level) SoapParam (low level) SoapServer SoapVar (low level) 2 SOAP 服务在 PHP 中的工作方式 2.1 首先,创建一个Soap Server。 $server = new SoapServer($wsdl [, $options]); 其中...

1 预定义类
SoapClient
SoapFault
SoapHeader (low level)
SoapParam (low level)
SoapServer
SoapVar (low level)

2 SOAP 服务在 PHP 中的工作方式
2.1 首先,创建一个Soap Server。

$server = new SoapServer($wsdl [, $options]);
其中,$wsdl 是描述托管服务的 Web 服务描述语言 (WSDL) 文档的位置;$options 是一组键/值对,其中包含了在创建服务时需要考虑的所有设置选项。这些选项包括:
encoding:用于该 SOAP 服务的字符编码(即字符串 ISO-8859-1)。
actor:该 SOAP 服务的角色 URI。
classmap:将 WSDL 数据类型映射到 PHP 中的类名的一组键/值对本身。如果使用该选项,PHP 将根据 WSDL 中定义的类型将这些类呈现给连接客户端。

例:使用名为 bookman.wsdl 的 WSDL 文档创建一个使用 SOAP v1.2 协议的 SOAP 服务。

$server = new SoapServer(“bookman.wsdl”, array(‘soap_version’ => SOAP_1_2));

2.2 下一步,创建服务方法。

function f1($a, $b) { ... }
function f2($a, $b) { ... }
...

注册可以写成:
$server->addFunction(‘f1’);
$server->addFunction(‘f2’);
或者,
$server->addFunction(array(‘f1’, ‘f2’));
或者,
$server->addFunction(SOAP_FUNCTIONS_ALL);

也可以以面向对象的方法:(推荐这种方法!)
class functions {
public function f1($a, $b) { ... }
public function f2($a, $b) { ... }
}
$server->setClass("functions");

要完成SOAP服务器,还必须使用handle()函数开始处理从连接的 SOAP 客户端传入的请求。完整示例:
class functions {
public function f1($a, $b) { ... }
public function f2($a, $b) { ... }
}
$server = new SoapServer(“bookman.wsdl”, array(‘soap_version’ => SOAP_1_2));
$server->setClass("functions");
$server->handle();

2.3 错误报告:

public function div($a, $b) {
if($b == 0) {
throw new SoapFault(-1, “Cannot divide by zero!”); // 不然要SoapFault这个类干啥
}
return $a / $b;
}

2.4 上面还有一个WSDL的问题没解决,如何生成一个WSDL文档呢?使用Zend Studio的做法如下:
要正确使用元数据注释。比如:
/**
* Add two integers together
*
* @param integer $a The first integer of the addition
* @param integer $b The second integer of the addition
* @return integer The sum of the provided integers
*/
public function add($a, $b) {
return $a + $b;
}
然后使用Tools菜单下的WSDL生成器就可以了。当然必须将WSDL文档放在服务器能够访问的位置。(那还用说,呵呵)

2.5 用PHP创建SOAP客户端,以使用SOAP服务

$client = new SoapClient($wsdl [, $options]);

$wsdl 参数是要访问服务的 WSDL 文档的位置,可选参数 $options 是配置客户端连接的一组键/值对。包括以下一些可用选项:

soap_version:要使用的 SOAP 协议版本,其值为常量 SOAP_1_1 或 SOAP_1_2
login:如果在 SOAP 服务器上使用 HTTP 身份验证,这是要使用的登录名
password:如果在 SOAP 服务器上使用 HTTP 身份验证,这是要使用的密码
proxy_host:如果通过代理服务器连接,这是服务器的地址
proxy_port:如果通过代理服务器连接,这是代理监听的端口
proxy_login:如果通过代理服务器连接,这是登录时使用的用户名
proxy_password:如果通过代理服务器连接,这是登录时使用的密码
local_cert:如果连接到一个通过安全 HTTP (https) 通信的 SOAP 服务器,这是本地认证文件的位置
passphrase:与 local_cert 结合使用,以提供认证文件的密码短语(如果有)
compression:如果设置为 true,PHP 将尝试使用压缩的 HTTP 请求与 SOAP 服务器通信
classmap:将 WSDL 数据类型映射到 PHP 类以便在客户端使用的一组键/值对

如果PHP中的SOAP客户端通过指定的WSDL文档实例化,就可以使用返回的客户端对象调用在 SOAP 服务器上公开的方法,就好像它们是自带 PHP 调用,并处理任何可能作为原生 PHP 异常发生的 SOAP 错误。
示例:

$client = new SoapClient(“http://www.example.com/math.wsdl”);
try {
$result = $client->div(10,rand(0,5); // will cause a Soap Fault if divide by zero
print “The answer is: $result”;
} catch(SoapFault $e) {
print “Sorry an error was caught executing your request: {$e->getMessage()}”;
}

2.6 一些说明
如果在创建SOAP服务器端和客户端的时候,传入的WSDL文档URI为NULL,则工作在non-Wsdl方式下。
工作在non-Wsdl方式下的时候,server端构造函数中的option参数需指定uri(只作xml名字空间用,和真实uri无关)client的option参数需指定uri(解释同前)和location(server端真实url)参数。
PHP手册中,对于SoapClient类的第二个参数options的说明如下:
array options:
An array of options. If working in WSDL mode, this parameter is optional. If working in non-WSDL mode, you must set the location and uri options, where location is the URL to request and uri is the target namespace of the SOAP service.
The style and use options only work in non-WSDL mode. In WSDL mode, they come from the WSDL file.
The soap_version option specifies whether to use SOAP 1.1, or SOAP 1.2 client.
For HTTP authentication, you may use the login and password options. For making an HTTP connection through a proxy server, use the options proxy_host, proxy_port, proxy_login and proxy_password. For HTTPS client certificate authentication use local_cert and passphrase options.
The compression option allows to use compression of HTTP SOAP requests and responses.
The encoding option defines internal character encoding. This option does not change the encofing of SOAP requests (it is always utf-8), but converts strings into it.
The classmap option can be used to map some WSDL types to PHP classes. This option must be an array with WSDL types as keys and names of PHP classes as values.
The trace and exceptions options are useful for debuging purpos

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论