【问题标题】:Sending XML Request with SOAP in PHP在 PHP 中使用 SOAP 发送 XML 请求
【发布时间】:2011-11-13 05:03:38
【问题描述】:

我正在尝试使用 PHP 和 SOAP 创建一个 UPS Freight Rating Web 服务。 UPS 为 SOAP 客户端提供了一个 WSDL(我在下面粘贴了它的重要部分)。

我的问题是,如何构造 XML 文档以使用 SOAP 客户端发送?我已经看到关于是否将我的请求格式化为 PHP 数组或巨型字符串的相互矛盾的报告。一旦构建了这个文档,应该如何通过我在 PHP 中创建的 SOAP 客户端发出请求?

WSDL 的一部分:

<wsdl:binding name="FreightRateBinding" type="tns:FreightRatePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="ProcessFreightRate">
            <soap:operation soapAction="http://onlinetools.ups.com/webservices/FreightRateBinding/v1.0" style="document"/>
            <wsdl:input name="RateRequest">
                <soap:body parts="Body" use="literal"/>
                <soap:header message="tns:RateRequestMessage" part="UPSSecurity" use="literal">
                    <soap:headerfault message="tns:RateErrorMessage" part="RateError" use="literal"/>
                </soap:header>
            </wsdl:input>
            <wsdl:output name="RateResponse">
                <soap:body parts="Body" use="literal"/>
            </wsdl:output>
            <wsdl:fault name="RateError">
                <soap:fault name="RateError" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>

到目前为止,我的 XML 文档的一部分:

<?xml version="1.0" ?>
<FreightRateRequest>
    <Request>
        <RequestOption>1</RequestOption>
    </Request>
    <ShipFrom>
        <Address>
            <Name>Test</Name>
            <AddressLine1>17 MacDade Blvd</AddressLine1>
            <City>Collingdale</City>
            <PostalCode>19023</PostalCode>
            <CountryCode>US</CountryCode>
            <Phone>
                <Number>1-800-249-0011</Number>
            </Phone>
        </Address>
    </ShipFrom>
    <ShipperNumber>21W17V</ShipperNumber>
    <ShipTo>
        <Name>Test</Name>
        <AddressLine1>14908 Sandy Lane</AddressLine1>
        <City>San Jose</City>
        <PostalCode>95124</PostalCode>
        <CountryCode>US</CountryCode>
    </ShipTo>

PHP,到目前为止:

$mySOAP = new SoapClient("FreightRate.wsdl", $myOptionsArray);

任何帮助将不胜感激。如果需要,我还将回复任何其他信息。

【问题讨论】:

  • 您可以在您的 wsdl 上运行它并在此处发布有关 ProcessFreightRate 的部分吗? $client = new SoapClient('yourwsdl'); var_dump($client->__getTypes());
  • 这只会返回 XML 模式吗?如果您愿意,我可以发布其中的一部分,因为标记比 var_dump() 吐出的要干净得多。

标签: php xml web-services soap


【解决方案1】:

使用 DOM 操作生成 XML 是一件很痛苦的事情。只需将其视为一根巨大的字符串并直接插入相关值,您就可以节省大量的头发:

$xml = <<<EOL
<?xml blah blah blah
<root>
   <tag>$some_value</tag>
   <othertag>$different_value</othertag>
</root>
EOL;

只要您采取预防措施以确保变量的内容构成有效的 XML,这是迄今为止最简单的方法。这意味着将任何不是 5 个 XML 接受 (&lt;&gt;"'&amp;) 的 HTML 字符实体转换为其原始字符格式,并将这 5 个字符转义为等效实体。

【讨论】:

  • 太棒了。谢谢你。此外,在我看到的使用 SOAP 发送的 XML 文档的示例中,XML 元素的名称前面带有“soap:”,并且有一个标题部分概述了有关文档的一些信息。这些添加也是必要的吗?这是我第一次使用 SOAP,我很迷茫!
  • 实际上不知道。我也没用过肥皂
猜你喜欢
  • 2011-09-25
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
相关资源
最近更新 更多