PHP SOAP HTTP 请求
尽管有一段时间是 PHP 开发人员,但我现在才第一次体验 Web 服务.我希望能得到一点帮助,因为我正在使用的这本书帮助不大.与我们有业务往来的其中一家公司给了我一个 XML 文档,其格式为 in需要(我将发布其中的一部分).由于我在这个特定主题上缺乏经验,我不确定该怎么做.我需要知道如何将此消息发送到他们的实时 POST 页面,如何接收响应,我是否需要创建任何类型的 WSDL 页面?任何帮助或指导将不胜感激,请不要只发送指向 php 手册的链接.我显然去过那里,因为它通常是寻求帮助的首选场所.
Despite being a PHP developer for a while, I'm just now getting my first taste of web services. I was hoping to get a little help, as the book I am using is not much help. One of the companies we are doing business with gave me an XML document in the format in needs to be in (I'll post a chunk of it). Due to my inexperience in this particular subject, I'm not really sure what to do. I need to know how to send this message to their live POST page, how to receive the response, and do I need to create any sort of WSDL page? Any help or direction would be so greatly appreciated, and please, don't just send a link to the php manual. I've obviously been there, as it is typically the go-to place for help.
POST /sample/order.asmx HTTP/1.1
Host: orders.sample.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Header>
<AuthenticationHeader xmlns="http://sample/">
<Username>string</Username>
<Password>string</Password>
</AuthenticationHeader>
<DebugHeader xmlns="http://sample/">
<Debug>boolean</Debug>
<Request>string</Request>
</DebugHeader>
</soap12:Header>
<soap12:Body>
<AddOrder xmlns="http://sample/">
<order>
<Header>
<ID>string</ID>
<EntryDate>dateTime</EntryDate>
<OrderEntryView>
<SeqID>int</SeqID>
<Description>string</Description>
</OrderEntryView>
<ReferenceNumber>string</ReferenceNumber>
<PONumber>string</PONumber>
<Comments>string</Comments>
<IpAddress>string</IpAddress>
</Header>
</order>
</AddOrder>
</soap12:Body>
</soap12:Envelope>
上面是我得到的 AddOrder XML 文档(我删除了大部分正文).请让我知道是否需要更多细节,因为我想尽可能具体,以便我能够弄清楚如何发送此
Above is the AddOrder XML document I was given (I removed most of the body). Please let me know if anymore detail is needed, as I want to be specific as possible so I'm able to figure out how send this
推荐答案
您有几个选择!您可以使用soap 对象来创建基于WSDL 的请求,该请求将知道与远程服务器通信的正确方式.您可以在 PHP 手册中了解如何执行此操作.
You have a couple of options! You could use soap objects to create the request which, based upon a WSDL will know the correct way to talk to the remote server. You can see how to do this at the PHP manual.
或者,您可以使用 CURL 来完成这项工作.您需要知道将数据发布到哪里(它看起来像上面的示例),然后您可以执行以下操作:
Alternatively, you can use CURL to do the work. You'll need to know where to post the data to (which it looks like is in the example above), then you can just do something like this:
$curlData = "<?xml version="1.0" encoding="utf-8"?>... etc";
$url='http://wherever.com/service/';
$curl = curl_init();
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl,CURLOPT_TIMEOUT,120);
curl_setopt($curl,CURLOPT_ENCODING,'gzip');
curl_setopt($curl,CURLOPT_HTTPHEADER,array (
'SOAPAction:""',
'Content-Type: text/xml; charset=utf-8',
));
curl_setopt ($curl, CURLOPT_POST, 1);
curl_setopt ($curl, CURLOPT_POSTFIELDS, $curlData);
$result = curl_exec($curl);
curl_close ($curl);
然后您应该在 $result 变量中得到结果.然后您可以尝试将其转换为 XML 文档,尽管有时我发现由于编码而无法正常工作:
You then should have the result in the $result var. You can then try to convert it to an XML doc, although sometimes I've found due to encoding this doesn't work:
$xml = new SimpleXMLElement($result);
print_r($xml);
相关文章