我的SOAP请求的标题以奇怪的格式显示。我需要一个看起来像这样的标题:
<soap-env:header>
<wsse:security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:usernametoken wsu:id="UsernameToken-45">
<wsse:username>817221</wsse:username>
<wsse:password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234</wsse:password>
</wsse:usernametoken>
</wsse:security>
</soap-env:header>
现在,标题看起来像这样:
<SOAP-ENV:Header>
<ns8:Security SOAP-ENV:mustUnderstand="1">
<item>
<key>UsernameToken</key>
<value>
<item>
<key>Username</key>
<value>817221</value>
</item>
<item>
<key>Password</key>
<value>
<item>
<key>_</key>
<value>1234</value>
</item>
<item>
<key>Type</key>
<value>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText</value>
</item>
</value>
</item>
</value>
</item>
</ns8:Security>
</SOAP-ENV:Header>
这是错的。它包含和标签。我已经读过应该使用SOAP_ENC_OBJECT以正确的格式显示它,所以我在我的代码中尝试了它但仍然无效。请参阅以下代码:
$header = array(
'UsernameToken' => array(
'Username' => 817221,
'Password' => array(
'_' => 1234,
'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText')));
$headerSoapVar = new SoapVar($header,SOAP_ENC_OBJECT);
$soapheader = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', "Security" , $header, true);
$client->__setSoapHeaders($soapheader);
非常感谢任何帮助。谢谢!
答案 0 :(得分:3)
这是一个很老的问题!
但是,今天我遇到了同样的问题!
我发现“标题”需要是一个对象,而不是一个数组!
但是我仍然遇到名称空间问题......所以我把它分解出了SoapClient类的子类
class MySoapClient extends SoapClient {
public function __doRequest($request, $location, $action, $version, $one_way=0) {
// manipulate $request var using XML parse tools or whatever !!
return parent::__doRequest($request, $location, $action, $version, $one_way);
}
}
我仍在努力解决这个问题,但我希望它可以帮到某个人!
答案 1 :(得分:0)
试试这个你应该把它设置为一个对象。
$header = (object) array(
'UsernameToken' => array(
'Username' => 817221,
'Password' => array(
'_' => 1234,
'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText')));