各位大神,我现在遇到一个项目,设备提供有北向接口的wsdl文件和一个chm的说明文档,想通过php写代码根据wsdl文件对设备进行访问,刚接触webservice,学习了各种,弄了快2周了,不太了解到底需要怎么操作才能访问到设备。在chm里有soap协议的具体说明,感觉就是说明书,现在尝试的用php可以做天气预报和手机查询功能,照猫画虎的在项目中使用,程序中没有反应,因为像天气预报之类的都是在网页中输入http://xx.?wsdl的网页会打开xml文件,而在php程序中直接
$client = new SoapClient('http://xx?wsdl')
print_r($client->__getFunctions())
会有返回可调用的函数
现在遇到的问题是把网址按照chm文件要求的https://xx.xx.xx.xx:8080/spg?wsdl的方式进行改动后没有可以返回的函数,如果把这个网址直接在页面中输入不通过Php调用会返回一个soap报文,写的faultcode 和faultstring" 接收到的消息类型非post,该消息类型为get”,而如果我这里把这个改成wsdl文件的路径可以看到有返回的函数值
我现在就希望能实现和设备的通信,soap协议里面写的每台设备操作使用soap协议时会有header,里面写有账号密码,难道我直接用本地的wsdl文件就可以直接传输数据?不需要再header中写入账号密码,或者也不需要指定https://xx.xx.xx.xx:8080/spg这个路径?这些东西都是在wsdl文件中么?或者说如何通过php给设备发送soap报文呢?
我现在如何能够通过Php来进行对设备的操作呢,请各位大神指点一二。
$client = new SoapClient('http://xx?wsdl')
print_r($client->__getFunctions())
会有返回可调用的函数
现在遇到的问题是把网址按照chm文件要求的https://xx.xx.xx.xx:8080/spg?wsdl的方式进行改动后没有可以返回的函数,如果把这个网址直接在页面中输入不通过Php调用会返回一个soap报文,写的faultcode 和faultstring" 接收到的消息类型非post,该消息类型为get”,而如果我这里把这个改成wsdl文件的路径可以看到有返回的函数值
我现在就希望能实现和设备的通信,soap协议里面写的每台设备操作使用soap协议时会有header,里面写有账号密码,难道我直接用本地的wsdl文件就可以直接传输数据?不需要再header中写入账号密码,或者也不需要指定https://xx.xx.xx.xx:8080/spg这个路径?这些东西都是在wsdl文件中么?或者说如何通过php给设备发送soap报文呢?
我现在如何能够通过Php来进行对设备的操作呢,请各位大神指点一二。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:m="http://www.xxxx.com/SPG">
<SOAP-ENV:Header>
<m:Authentication>
<m:Username>xxxxx</m:Username>
<m:Password>xxxxxxxxx</m:Password>
</m:Authentication>
<m:MessageID>1</m:MessageID>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<m:LST_SBR>
<m:IMPU>tel:+xxxxxxx</m:IMPU>
<m:DSPMODE>1</m:DSPMODE>
<m:DSPOPTIMIZE>1</m:DSPOPTIMIZE>
</m:LST_SBR>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
技术文件中写道SOAP消息请求的URL格式为:https://[IP]:[Port]/spg,需要注意的是,URI必须是/spg。通信端口默认是8xxx。
需要wsdl文件么?
其中我先截取片段
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://www.1234.com/SPG" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:spg="http://www.huawei.com/SPG">
<wsdl:import namespace="http://www.1234.com/SPG" location="spg_schema.xsd"/>
<wsdl:types>
<xs:schema targetNamespace="http://new.webservice.namespace" elementFormDefault="qualified"/>
</wsdl:types><wsdl:binding name="SPG2800Binding" type="spg:SPG2800Port">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="LST_SBR">
<soap:operation soapAction="urn#LST_SBR"/>
<wsdl:input>
<soap:body use="literal"/>
<soap:header message="spg:MessageIDHeader" part="header" use="literal"/>
<soap:header message="spg:GenericHeader" part="header" use="literal"/>
<soap:header message="spg:ResendFlagHeader" part="header" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
<soap:header message="spg:MessageIDHeader" part="header" use="literal"/>
</wsdl:output>
<wsdl:fault name="OperationFault">
<soap:fault name="OperationFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:service name="SPG2800Service">
<wsdl:port name="SPG2800Port" binding="spg:SPG2800Binding">
<soap:address location="http://www.1234.com/spg"/>
</wsdl:port>
</wsdl:service>