本文介绍了PHP Soap 身份验证标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
样品请求:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="https://ws.intermedia.net/Account/Management">
<soapenv:Header>
<AuthentificationInfo>
<login>[PLRAdminUserName]</login>
<password>[PLRAdminPassword]</password>
<accountID>[accountID]</accountID>
</AuthentificationInfo>
</soapenv:Header>
<soapenv:Body>
<GetAccount>
<accountID>[accountID]</accountID>
</GetAccount>
</soapenv:Body>
</soapenv:Envelope>
WSDL:https://controlpanel.msoutlookonline.net/WebServices/Account/AccountService.asmx?WSDL
PHP:
ini_set("soap.wsdl_cache_enabled", "0");
$wsdl = "https://controlpanel.msoutlookonline.net/WebServices/Account/AccountService.asmx?WSDL";
$ns = 'https://ws.intermedia.net/Account/Management';
$client = new SoapClient($wsdl, array(
"trace" => 1,
"exceptions" => 0
));
$login = 'xxxx';
$password = 'xxxx';
$partnerID = 1234;
$accountID = 12345678;
$headerBody = array('AuthentificationInfo'=>array(
'login' => $login,
'password' => $password,
'accountID' => $partnerID
));
$header = new SoapHeader($ns, 'AuthentificationInfo', $headerBody);
$client->__setSoapHeaders($header);
$client->__soapCall("echoVoid", array(null));
$value = $client->GetAccount($accountID);
我收到以下错误消息:
soap:ServerServer was unable to process request. ---> Access denied; Code: 0x0008
有人能看出代码有什么问题吗?
Can anyone see anything wrong with the code?
推荐答案
我的命名空间不正确.
此外,Mikaël DELSOL 的回答也有所帮助,因为我不需要 array('AuthentificationInfo'=>
部分.也不需要:$client->__soapCall("echoVoid", array(null));
Also Mikaël DELSOL's answer helped as I didn't need the array('AuthentificationInfo'=>
part.Also didn't need: $client->__soapCall("echoVoid", array(null));
谢谢!
这篇关于PHP Soap 身份验证标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!