簡體   English   中英

使用PHP在非Wsdl Soap客戶端中設置xml rquest標頭

[英]Set xml rquest header in non-wsdl soap client using php

我正在嘗試使用php進行非wsdl SOAP客戶端調用。 我的代碼是這樣的:

try {
$URL = 'http://example.com/webservices/security/accesscontrol.asmx';

$sc = new SoapClient(null, array(
  'location' => $URL,
  'uri' => 'http://example.com/webservices/security/',
  'trace' => 1
  ));

$usertoken = array('UserNameToken' =>
array(
  'UserName' => 'test',
  'Password' => 'test123'
));

$header = new SoapHeader('http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $usertoken);

$sc->__setSoapHeaders($header);

$test = $sc->__soapCall("AuthenticateClient",
  array(),
  array('soapaction' => 'http://example.com/webservices/security/AuthenticateClient')
);

如果我調試並看到xml的Last request標頭部分,它看起來像這樣:

<SOAP-ENV:Header>
    <ns2:Security>
        <item><key>UserNameToken</key><value><item><key>UserName</key><value>test</value></item><item><key>Password</key><value>test123</value></item></value></item>
    </ns2:Security>
</SOAP-ENV:Header>

但是,如果我使用wsdl文件,則xml標頭如下所示:

<SOAP-ENV:Header>
    <ns2:Security>
        <ns2:UserNameToken>
            <ns2:UserName>test</ns2:UserName>
            <ns2:Password>test123</ns2:Password>
        </ns2:UserNameToken>
    </ns2:Security>
</SOAP-ENV:Header>

如何使用非wsdl SOAP客戶端調用使標題部分像上面一樣? 因為它不起作用,並給出了由“如果在AuthenticateClient Soap標頭請求中未提供UserName令牌或UserName引起的錯誤”

在此先感謝您的幫助。

請注意,我故意更改了URL和密碼,因為我無法透露它們。

您可以手動創建標題的一部分並將其插入SoapHeader中,嘗試執行以下操作:

    $URL = 'http://example.com/webservices/security/accesscontrol.asmx';

    $soapClient = new SoapClient(null, array(
        'location' => $URL,
        'uri' => 'http://example.com/webservices/security/',
        'trace' => 1
    ));

    $headerPart = '
            <SOAP-ENV:Header>
                <ns2:Security>
                    <ns2:UserNameToken>
                        <ns2:UserName>DASKO</ns2:UserName>
                        <ns2:Password>welcome1</ns2:Password>
                    </ns2:UserNameToken>
                </ns2:Security>
            </SOAP-ENV:Header>
    ';

    $soapVarHeader = new SoapVar($headerPart, XSD_ANYXML, null, null, null);

    $header = new SoapHeader(
        'http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', // Namespace - namespace of the WebService
        'Security',
        $soapVarHeader,
        false // mustunderstand
    );

    $soapClient->__setSoapHeaders($header);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM