Как сделать заголовок PHP SOAP похожим на этот фрагмент xml?

Я пытаюсь сделать заголовок мыла, который будет выглядеть так:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <a-user xmlns="a">testName</a-user>
    <a-pass xmlns="a">testPassword</a-pass>
  </s:Header>
  <s:Body>
    ...
  </s:Body>
</s:Envelope>

Я новичок в мыле, поэтому я почти уверен, что просто не понимаю, что я должен вводить для параметров конструктора SoapHeader, это то, что я сейчас пытаюсь, и он продолжает не аутентифицироваться:

        $authHeader = new SoapHeader("http://schemas.xmlsoap.org/soap/envelope/", "Envelope", array("Header" => array("a-user" => "testName", "a-pass" => "testPassword")));

Может кто-нибудь объяснить, как я должен перевести этот заголовок из xml в php soapheader, пожалуйста?

Редактировать: Да, agunn, я использую настоящее имя пользователя и пароль, я получаю исключения SoapFault, говорящие: «Поставщик не авторизован!» когда я делаю свой soapCall.

Вот часть мыльного вызова:

$this->client->__setSoapHeaders($authHeader);
$response = $this->client->__soapCall("Foo", $params);

person uRockNinja    schedule 07.12.2016    source источник
comment
Итак, @uRockNinja, когда вы говорите, что конструктор Envelope в вашем фрагменте кода — это то, что вы «в настоящее время пытаетесь», вы не имеете в виду буквально, не так ли? То есть вы в своем реальном коде используете настоящее имя пользователя и пароль, верно? Если да, то можете ли вы уточнить сообщение или коды ошибок? Ваш фрагмент кода выглядит разумной попыткой, поэтому помощникам, вероятно, потребуется больше информации, чтобы помочь.   -  person Anne Gunn    schedule 07.12.2016
comment
Можете ли вы добавить всю часть мыльного вызова?   -  person mim.    schedule 07.12.2016


Ответы (1)


$authHeader = new SoapHeader("http://schemas.xmlsoap.org/soap/envelope/", "Envelope", array("Header" => array("a-user" => "testName", "a-pass" => "testPassword")));

По спецификации SoapClient вы должны попробовать так

$this->client->__setSoapHeaders(array($authHeader));
$response = $this->client->__soapCall("Foo", $params);
person Coke    schedule 07.12.2016
comment
Я забыл сказать, что вы можете распечатать/vardump свой запрос, чтобы увидеть, как он выглядит. Используйте команду echo $this-›client-›__getLastRequest(); - person Coke; 07.12.2016