本文是一个使用php soap访问webservice的例子.
wsdl文件请见http://www.webxml.com.cn/ 这个网站. 里面有很多好用的服务器.
大部分可以免费使用, 有一部分要收费.
以中文简繁转换为例.
简繁转换的wsdl文件地址为: http://webservice.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl
下面是PHP代码, 其中有说明.
<?php
$wsdl = 'http://webservice.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl';
// 以wsdl方式, 实例化类.
$soap = new SoapClient( $wsdl );
var_dump ( $soap->__getFunctions() ); // 这是此接口可以提供哪些服务, 就是函数定义, 有参数, 有返回值
var_dump( $soap->__getTypes() ); // 这是此接口使用的数据类型.
以下为上面例子的返回值:
函数声明
array (size=4) 0 => string 'toSimplifiedChineseResponse toSimplifiedChinese(toSimplifiedChinese $parameters)' (length=80) 1 => string 'toTraditionalChineseResponse toTraditionalChinese(toTraditionalChinese $parameters)' (length=83) 2 => string 'toSimplifiedChineseResponse toSimplifiedChinese(toSimplifiedChinese $parameters)' (length=80) 3 => string 'toTraditionalChineseResponse toTraditionalChinese(toTraditionalChinese $parameters)' (length=83)
类型定义
array (size=4) 0 => string 'struct toSimplifiedChinese { string sText; }' (length=45) 1 => string 'struct toSimplifiedChineseResponse { string toSimplifiedChineseResult; }' (length=73) 2 => string 'struct toTraditionalChinese { string sText; }' (length=46) 3 => string 'struct toTraditionalChineseResponse { string toTraditionalChineseResult; }' (length=75)
从这个输出中, 可以看到,
toTraditionalChineseResponse toTraditionalChinese(toTraditionalChinese $parameters)
这是简体转换为繁体的函数.
参数 toTraditionalChinese
结构为:
struct toTraditionalChinese {
string sText;
}
对应 于PHP, 就是一个数组, 以sText为键, 值为字符串,
例如: array( 'sText' => '要转成繁体的汉字' )
此函数的返回值为:
struct toTraditionalChineseResponse {
string toTraditionalChineseResult;
}
这对于PHP就是, 一个stdClass, 有一个叫做toTraditionalChineseResult的属性
下面是一个有完整返回值的PHP代码, 其中包含发送的xml信息和接收的xml信息.
<?php
// wsdl地址
$wsdl = 'http://webservice.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl';
// 实例化, trace表示要记录发送接收的xml数据
$soap = new SoapClient( $wsdl, array( 'trace' => true) );
// 直接调用这个函数, 因为在此对象中, 所有的函数都是以双下划线开头, 所以不会有冲突.
$rs = $soap->toTraditionalChinese( array( 'sText' => '我要转成繁体哦, 龙' ));
// 显示转换以后的值, stdClass对象.
var_dump( $rs );
// 显示转换的内容, 字符串
echo $rs->toTraditionalChineseResult;
echo '<hr />以下为收发信息';
// 发送HTTP头
var_dump( $soap->__getLastRequestHeaders() );
// 发送的HTTP_BODY
var_dump( $soap->__getLastRequest() );
// 接收的HTTP头
var_dump( $soap->__getLastResponseHeaders() );
// 接收的HTTP_BODY
var_dump( $soap->__getLastResponse() );
以下是上面这个例子的返回值:
object(stdClass)[2]
public 'toTraditionalChineseResult' => string '我要轉成繁體哦, 龍' (length=26)
我要轉成繁體哦, 龍
以下为收发信息
string 'POST /WebServices/TraditionalSimplifiedWebService.asmx HTTP/1.1
Host: webservice.webxml.com.cn
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.13
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://webxml.com.cn/toTraditionalChinese"
Content-Length: 305
' (length=269)
string '<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webxml.com.cn/"><SOAP-ENV:Body><ns1:toTraditionalChinese><ns1:sText>我要转成繁体哦, 龙</ns1:sText></ns1:toTraditionalChinese></SOAP-ENV:Body></SOAP-ENV:Envelope>
' (length=305)
string 'HTTP/1.1 200 OK
Date: Thu, 17 Jul 2014 08:55:43 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: 420
' (length=228)
string '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><toTraditionalChineseResponse xmlns="http://webxml.com.cn/"><toTraditionalChineseResult>我要轉成繁體哦, 龍</toTraditionalChineseResult></toTraditionalChineseResponse></soap:Body></soap:Envelope>' (length=420)