您的位置:首页 > 编程语言 > PHP开发

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

2014-07-17 16:55 239 查看
本文是一个使用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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: