Intereting Posts
Формат твитов в twitter api 1.1 поведение пользовательских исключений в symfony2 Получение содержимого DIV с помощью регулярного выражения Переопределение констант в PHP Подключение с сервера PHP к серверу MySQL на Amazon AWS Как отобразить выбранный элемент в раскрывающемся списке? Установка расширения mcrypt для PHP на OSX Mountain Lion Привет, У меня есть запрос с базой данных Игнорирование предупреждений PHP в PHPUnit (PHP5) Извлечение тега заголовка и адреса RSS-канала из HTML с помощью PHP DOM или Regex Как перенаправить пользователя в мобильное приложение или веб-сайт при нажатии гиперссылки, отправленной по электронной почте? Должно ли это быть обработано на стороне сервера с помощью PHP? PHP / MySQL: как получить несколько значений из метода базы данных PHP Как SELECT * с несколькими WHERE с использованием fetch_assoc в подготовленных операциях в PHP-MYSQL? Как получить флаги imap? Проверка триггера Yii на другом поле

Аутентификация с использованием PHP для использования wsdl

У меня возникли проблемы с подключением к службе wsdl через PHP. Проблема, похоже, связана с аутентификацией. Вот мой код:

$soapURL = "http://myurl?wsdl"; $soapLogin = Array( 'User ID'=>'myusername', 'Password'=>"mypassword" ); $soapClient = new SoapClient($soapURL, $soapLogin); $soapResult = $soapClient->mySoapFunction(); 

У меня есть имя пользователя и пароль, как определено клиентом, и я могу увидеть XML-файл, который генерирует wsdl, но нет, я не могу распознать, правильно ли ссылаюсь на имя пользователя и пароль. При попытке подключения я получаю следующую ошибку:

 Fatal error: Uncaught SoapFault exception: [a:InvalidSecurity] An error occurred when verifying security for the message. in E:\xampp\htdocs\TRMSosf\index.php:15 Stack trace: #0 E:\xampp\htdocs\TRMSosf\index.php(15): SoapClient->__call('GetWeekEvents', Array) #1 E:\xampp\htdocs\TRMSosf\index.php(15): SoapClient->GetWeekEvents('10', '20130527') #2 {main} thrown in E:\xampp\htdocs\TRMSosf\index.php on line 15 

Я новичок в использовании SOAP и довольно новичок в PHP, любая помощь приветствуется.

Я нашел ответ в другой статье здесь: могу ли я получить образцы кода, работающие с php и wsse

он включал класс, который обрабатывал аутентификацию WSSE

 class WSSESoapClient extends SoapClient { protected $wsseUser; protected $wssePassword; public function setWSSECredentials($user, $password) { $this->wsseUser = $user; $this->wssePassword = $password; } public function __doRequest($request, $location, $action, $version, $one_way = 0) { if (!$this->wsseUser or !$this->wssePassword) { return parent::__doRequest($request, $location, $action, $version, $one_way = 0); } // get SOAP message into DOM $dom = new DOMDocument(); $dom->loadXML($request); $xp = new DOMXPath($dom); $xp->registerNamespace('SOAP-ENV', 'http://schemas.xmlsoap.org/soap/envelope/'); // search for SOAP header, create one if not found $header = $xp->query('/SOAP-ENV:Envelope/SOAP-ENV:Header')->item(0); if (!$header) { $header = $dom->createElementNS('http://schemas.xmlsoap.org/soap/envelope/', 'SOAP-ENV:Header'); $envelope = $xp->query('/SOAP-ENV:Envelope')->item(0); $envelope->insertBefore($header, $xp->query('/SOAP-ENV:Envelope/SOAP-ENV:Body')->item(0)); } // add WSSE header $usernameToken = $dom->createElementNS('http://schemas.xmlsoap.org/ws/2002/07/secext', 'wsse:UsernameToken'); $username = $dom->createElementNS('http://schemas.xmlsoap.org/ws/2002/07/secext', 'wsse:Username', $this->wsseUser); $password = $dom->createElementNS('http://schemas.xmlsoap.org/ws/2002/07/secext', 'wsse:Password', $this->wssePassword); $usernameToken->appendChild($username); $usernameToken->appendChild($password); $header->appendChild($usernameToken); // perform SOAP call $request = $dom->saveXML(); return parent::__doRequest($request, $location, $action, $version, $one_way = 0); 

}