php |通过肥皂发送数据集

时间:2015-07-29 12:29:23

标签: php xml soap dataset

您好我需要通过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;
            }

1 个答案:

答案 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不起作用或需要一些特定的实现。