使用PHP设置SOAPHeader

时间:2017-01-24 11:10:54

标签: php soap

我是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中。

有没有人对我可能做错了什么有任何暗示?我感谢您提供的任何帮助。

1 个答案:

答案 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));