我是SOAP的新手,我有点不确定如何做到这一点。提供商提供的文档非常有限,因此他们不提供支持是一个小小的试验和错误。该文档指出XML应该从以下开始 - 然后我假设它们意味着标题。
POST /Economy/InvoiceOrder/V001/InvoiceService.asmx HTTP/1.1
Host: api.url.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://url.com/webservices/GetDeliveryMethods"
我尝试按以下方式设置标头:
$header = new SoapHeader(
"POST /Economy/InvoiceOrder/V001/InvoiceService.asmx HTTP/1.1",
"Host: api.url.com",
"Content-type: text/xml;charset='utf-8'",
"Content-length: ".strlen($xmlfinal),
"SOAPAction: http://url.com/webservices/GetDeliveryMethods"
);
$invoiceService->__setSoapHeaders($header);
然而,请求返回为"错误请求"。根据提供者的例子,我的XML看起来很好。
XML既作为服务器上的文件创建,也存储在$ xmlfinal中。
有没有人对我可能做错了什么有任何暗示?我感谢您提供的任何帮助。
答案 0 :(得分:0)
&#34; SoapHeader&#34;出现在<header>
元素的XML中。这可能不是你想要的。
您可以在流上下文中设置标头并将其传递给soap客户端
$opts = array(
'http' => array(
'header' => 'YourHeader: value'
),
);
$ctx = stream_context_create($opts);
$client = new SoapClient('the.wsdl', array('stream_context' => $ctx));