我有这个标题结构:
<soapenv:Header>
<wsse:Security xmlns:wsse=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd” soapenv:mustUnderstand=”0”>
<wsse:UsernameToken>
<wsse:Username Type=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken”>votre_login</wsse:Username>
<wsse:Password Type=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText”>votre_password</wsse:Password>
</wsse:UsernameToken>
</wsse :Security>
</soapenv :Header>
我如何使用__setSoapHeaders()
方法将其放入php中?
我试过了:
$auth = array(
'UsernameToken' => array(
'Username' => '*****',
'Password' => '*****'
)
);
$header = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd','Security',$auth, 0);
$client->__setSoapHeaders($header);
我有这个错误:
com.ibm.wsspi.wssecurity.SoapSecurityException:WSEC5509E:Un jeton de sécuritédontle type est [http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken] est requis。
答案 0 :(得分:4)
来自:http://php.net/manual/en/soapclient.setsoapheaders.php#93460
要创建复杂的SOAP标头,您可以执行以下操作:
必需的SOAP标头:
<soap:Header> <RequestorCredentials xmlns="http://namespace.example.com/"> <Token>string</Token> <Version>string</Version> <MerchantID>string</MerchantID> <UserCredentials> <UserID>string</UserID> <Password>string</Password> </UserCredentials> </RequestorCredentials> </soap:Header>
对应的PHP代码:
$ns = 'http://namespace.example.com/'; //Namespace of the WS. //Body of the Soap Header. $headerbody = array('Token' => $someToken, 'Version' => $someVersion, 'MerchantID'=>$someMerchantId, 'UserCredentials'=>array('UserID'=>$UserID, 'Password'=>$Pwd)); //Create Soap Header. $header = new SOAPHeader($ns, 'RequestorCredentials', $headerbody); //set the Headers of Soap Client. $soap_client->__setSoapHeaders($header);