用PHP访问WebService,如何看懂WSDL中的数据格式呢?

dodott 2013-06-11 05:12:21
<wsdl:definitions targetNamespace="http://ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns:intf="http://ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns:tns1="http://req.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns:tns2="http://rsp.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://req.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com"/>
<import namespace="http://rsp.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com"/>
<element name="queryPoint">
<complexType>
<sequence>
<element name="req" type="tns1:PointQueryReq"/>
</sequence>
</complexType>
</element>
<element name="queryPointResponse">
<complexType>
<sequence>
<element name="queryPointReturn" type="tns2:PointQueryRsp"/>
</sequence>
</complexType>
</element>
</schema>
<schema elementFormDefault="qualified" targetNamespace="http://req.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://rsp.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com"/>
<complexType name="PointQueryReq">
<sequence>
<element name="SPID" nillable="true" type="xsd:string"/>
<element name="transactionID" nillable="true" type="xsd:string"/>
<element name="userID" nillable="true" type="xsd:string"/>
<element name="userToken" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</schema>
<schema elementFormDefault="qualified" targetNamespace="http://rsp.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://req.ui.server.pointquery.vas.soap.interfaces.lcsmp.linkage.com"/>
<complexType name="PointQueryRsp">
<sequence>
<element name="description" nillable="true" type="xsd:string"/>
<element name="point" nillable="true" type="xsd:string"/>
<element name="pointRate" type="xsd:int"/>
<element name="result" nillable="true" type="xsd:string"/>
<element name="transactionID" nillable="true" type="xsd:string"/>
<element name="userID" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</schema>
</wsdl:types>

<wsdl:message name="queryPointResponse">

<wsdl:part element="impl:queryPointResponse" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:message name="queryPointRequest">

<wsdl:part element="impl:queryPoint" name="parameters">

</wsdl:part>

</wsdl:message>

<wsdl:portType name="PointQueryService">

<wsdl:operation name="queryPoint">

<wsdl:input message="impl:queryPointRequest" name="queryPointRequest">

</wsdl:input>

<wsdl:output message="impl:queryPointResponse" name="queryPointResponse">

</wsdl:output>

</wsdl:operation>

</wsdl:portType>

<wsdl:binding name="PointQueryServiceSoapBinding" type="impl:PointQueryService">

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="queryPoint">

<wsdlsoap:operation soapAction=""/>

<wsdl:input name="queryPointRequest">

<wsdlsoap:body use="literal"/>

</wsdl:input>

<wsdl:output name="queryPointResponse">

<wsdlsoap:body use="literal"/>

</wsdl:output>

</wsdl:operation>

</wsdl:binding>

<wsdl:service name="PointQueryServiceService">

<wsdl:port binding="impl:PointQueryServiceSoapBinding" name="PointQueryService">

<wsdlsoap:address location="http://tempuri.org/SoapPro/services/PointQueryService"/>

</wsdl:port>

</wsdl:service>

</wsdl:definitions>

以上是我要去访问的WebService的WSDL文档。我要用PHP语言去访问queryPoint这个功能接口。
于是我编写的代码核心部分如下:
	@require_once(_SysDir_ . '/inc/lib/soap/nusoap.php');

$pclient = new soapclient('http://192.168.11.4:12000/payApi/do/purchase/PointQueryService.wsdl');
$pclient->soap_defencoding = 'utf-8';
$pclient->xml_encoding = 'utf-8';

$now_time = time();
$randStr = getRandomString(18);

class PointQueryReq
{
public $SPID;
public $transactionID;
public $userID;
public $userToken;
}

class requestZ
{
public $req;
}

$InputZ=new PointQueryReq();
$InputZ->SPID=$jsdx_api_spid;
$InputZ->userID=$_POST['VAccount'];
$InputZ->transactionID=''.$jsdx_api_spid.date('YmdHis', $now_time).$randStr;
$InputZ->userToken=$_POST['userToken'];

$requstZ=new requestZ();
$requstZ->req=$InputZ;

$param = new SoapParam($requstZ, 'tns1:PointQueryReq');

$try_times = 0 ;
$queryResutl='';
while (true)
{
$queryResutl = @$pclient->__soapCall('queryPoint',array('queryPointRequest'=>$param));

if ($queryResutl != "")
{
break;
}

if ($try_times > 3)
{
break;
}
$try_times++;
}

结果在网页上提示如下错误:
Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in D:\WWW\payApi\do\purchase\jsdx.inc.php:88 Stack trace。

这是我第一次去学着看懂WSDL,并且尝试用PHP去访问,数据格式是我参考了很多例子写的,
不知道是否正确,麻烦高人指点。可以留QQ交流,大家交个朋友。
...全文
112 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2013-06-11
  • 打赏
  • 举报
回复
可用的方法 print_r($pclient->__getFunctions()); 可用的数据结构 print_r($pclient->__getTypes()); 对于你的 WSDL 是 Array ( [0] => queryPointResponse queryPoint(queryPoint $parameters) ) Array ( [0] => struct queryPoint { PointQueryReq req; } [1] => struct queryPointResponse { PointQueryRsp queryPointReturn; } [2] => struct PointQueryReq { string SPID; string transactionID; string userID; string userToken; } [3] => struct PointQueryRsp { string description; string point; int pointRate; string result; string transactionID; string userID; } )

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧