在PHP中使用SOAP发送XML请求
我正在尝试使用PHP和SOAP创建UPS运费评估Web服务。 UPS为SOAP客户端提供了一个WSDL(我在下面粘贴的重要部分)。在PHP中使用SOAP发送XML请求
我的问题是,我该如何构建使用SOAP客户端发送的XML文档?我看到有关是否将我的请求格式化为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);
任何帮助将不胜感激。如果需要,我还会回复任何其他信息。
XML是使用DOM操作产生的严重痛苦。你可以节省自己的只是把它当作一个巨大的字符串,并直接插入相关的值拉一吨的头发:只要你采取预防措施,以确保这两个变量的内容作出有效的XML
$xml = <<<EOL
<?xml blah blah blah
<root>
<tag>$some_value</tag>
<othertag>$different_value</othertag>
</root>
EOL;
,这是迄今为止最简单的方法。这意味着将任何非XML接受的HTML字符实体(<>"'&
)转换为其原始字符格式,并将这5个字符转换为实体等效形式。
太好了。谢谢。另外,在我看到的使用SOAP发送的XML文档的示例中,XML元素的名称前面加上了“soap:”,并且有一个Header Section列出了关于该文档的一些信息。这些添加是否也是必要的?这是我使用SOAP的第一次体验,我很迷茫! –
其实不知道。我从来没有用过肥皂 –
你可以在你的wsdl上运行这个,并在这里发布关于ProcessFreightRate的部分? $ client = new SoapClient('http:// yourwsdl'); var_dump($ client - > __ getTypes()); – Charlie
这只是返回XML模式?如果您愿意,我可以发布一部分内容,因为标记比var_dump()吐出的内容更清洁。 –