首頁 >php教程 >php手册 >使用PHP的soap扩展, 进行wdsl操作

使用PHP的soap扩展, 进行wdsl操作

WBOY
WBOY原創
2016-06-06 19:58:271022瀏覽

本文是一个使用php soap访问webservice的例子. wsdl文件请见http://www.webxml.com.cn/这个网站. 里面有很多好用的服务器. 大部分可以免费使用, 有一部分要收费. 以中文简繁转换为例. 简繁转换的wsdl文件地址为:http://webservice.webxml.com.cn/WebServices


本文是一个使用php soap访问webservice的例子.

wsdl文件请见http://www.webxml.com.cn/ 这个网站. 里面有很多好用的服务器.

大部分可以免费使用, 有一部分要收费.


以中文简繁转换为例.


简繁转换的wsdl文件地址为: http://webservice.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl

下面是PHP代码, 其中有说明.


<?php $wsdl = &#39;http://webservice.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl&#39;;
// 以wsdl方式, 实例化类. 
$soap = new SoapClient( $wsdl );

var_dump ( $soap->__getFunctions() ); // 这是此接口可以提供哪些服务, 就是函数定义, 有参数, 有返回值

var_dump( $soap->__getTypes() ); // 这是此接口使用的数据类型.


以下为上面例子的返回值:

函数声明

<strong>array</strong> <em>(size=4)</em>
  0 <span>=></span> <small>string</small> <span>'toSimplifiedChineseResponse toSimplifiedChinese(toSimplifiedChinese $parameters)'</span> <em>(length=80)</em>
  1 <span>=></span> <small>string</small> <span>'toTraditionalChineseResponse toTraditionalChinese(toTraditionalChinese $parameters)'</span> <em>(length=83)</em>
  2 <span>=></span> <small>string</small> <span>'toSimplifiedChineseResponse toSimplifiedChinese(toSimplifiedChinese $parameters)'</span> <em>(length=80)</em>
  3 <span>=></span> <small>string</small> <span>'toTraditionalChineseResponse toTraditionalChinese(toTraditionalChinese $parameters)'</span> <em>(length=83)</em>

类型定义

<strong>array</strong> <em>(size=4)</em>
  0 <span>=></span> <small>string</small> <span>'struct toSimplifiedChinese {
 string sText;
}'</span> <em>(length=45)</em>
  1 <span>=></span> <small>string</small> <span>'struct toSimplifiedChineseResponse {
 string toSimplifiedChineseResult;
}'</span> <em>(length=73)</em>
  2 <span>=></span> <small>string</small> <span>'struct toTraditionalChinese {
 string sText;
}'</span> <em>(length=46)</em>
  3 <span>=></span> <small>string</small> <span>'struct toTraditionalChineseResponse {
 string toTraditionalChineseResult;
}'</span> <em>(length=75)</em>

从这个输出中, 可以看到, 

<span>toTraditionalChineseResponse toTraditionalChinese(toTraditionalChinese $parameters)</span>

这是简体转换为繁体的函数.

参数 toTraditionalChinese 

结构为:

<span>struct toTraditionalChinese {
 string sText;
}</span>

对应 于PHP, 就是一个数组, 以sText为键, 值为字符串,

例如: array( 'sText' => '要转成繁体的汉字' )

此函数的返回值为:

<span>struct toTraditionalChineseResponse {
 string toTraditionalChineseResult;
}</span>

这对于PHP就是, 一个stdClass, 有一个叫做toTraditionalChineseResult的属性

下面是一个有完整返回值的PHP代码, 其中包含发送的xml信息和接收的xml信息.

<?php // wsdl地址
$wsdl = &#39;http://webservice.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl&#39;;
// 实例化, trace表示要记录发送接收的xml数据
$soap = new SoapClient( $wsdl, array( &#39;trace&#39; => 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 '
我要转成繁体哦, 龙
' (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 '我要轉成繁體哦, 龍' (length=420)


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn