您好我需要通过php soap请求创建发送这些数据的请求。做这个的正确格式是什么?
<?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>
<GetVouTrans xmlns="http://tempuri.org/">
<VoucherRequest>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="kritiria">
<xs:complexType>
<xs:sequence>
<xs:element name="type" type="xs:short" minOccurs="0" />
<xs:element name="voucher" type="xs:string" minOccurs="0" />
<xs:element name="customer" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<kritiria diffgr:id="kritiria1" msdata:rowOrder="0">
<type>0</type>
<voucher>012345678</voucher>
<customer>pexpor213</customer>
</kritiria>
</NewDataSet>
</diffgr:diffgram>
</VoucherRequest>
</GetVouTrans>
</soap:Body>
</soap:Envelope>
如何使用php通过soap发送数据集?
我发送请求但它回应我的错。它认为我没有以正确的方式发送数据集值:
$faulty = 'Fault method';
$wsdl = "http://www.speedex.gr/getvoutrans/GetVouTrans.asmx?WSDL";
$soapClient = new SoapClient($wsdl,
array(
'trace' => true,
'use' => SOAP_LITERAL,
'style' => SOAP_DOCUMENT,
)
);
$parm = array();
$parm[] = new SoapVar('0', XSD_SHORT, null, null, 'type' );
$parm[] = new SoapVar('010658696378', XSD_STRING, null, null, 'voucher' );
$parm[] = new SoapVar('ΠΕ145031', XSD_STRING, null, null, 'customer' );
try {
$resp = $soapClient->GetVouTrans( new SoapVar($parm, SOAP_ENC_OBJECT) );
print_r ("REQUEST:\n" . htmlentities($soapClient->__getLastRequest()) . "\n");
print_r ("RESPONSE:\n" . htmlentities($soapClient->__getLastResponse()) . "\n");
} catch (SoapFault $e) {
echo $faulty;
return false;
}
答案 0 :(得分:1)
正确的方法是使用库。一切都写在这里http://php.net/manual/en/book.soap.php
修改强>
我挖了一点(我不是SOAP中的特殊主义者,因为我不经常使用它或喜欢它)。但是,您正在使用的wsdl文件未指定您使用的任何参数。您应该可以使用以下呼叫:
$soapClient->GetVouTrans(0, '010658696378', 'ΠΕ145031' );
// order is important, as WSDL states it. But it doesn't so this call for this web service is not valid.
接下来,从未见过文档并在此处找到一些文档:http://www.speedex.gr/getvoutrans/getvoutrans.asmx?op=GetVouTrans
首先,奇怪的是,这个文档没有说明你传递的参数。
非常,对我来说奇怪的是示例请求。
<soap12:calledMethodName>
// I only seen
<ns1:calledMethodName>
我没有找到任何方法来改变它(也许你需要自己的SOAP客户端*)。
关于这个api的下一个奇怪的事情是:它永远不会返回(无论参数)不同的响应。没有错误/例外。
* - 非常,可能是的情况。是他们写了自己的类似肥皂的实现。这与标准SOAP库不兼容。
您是否看到有人成功实施了与其API集成的人员?
此外,在此处发现了类似从未回答的问题:PHP Soap And .Net Dataset
可能会发现,这个API不起作用或需要一些特定的实现。