Мне нужно подключиться к веб-службе, для которой требуются учетные данные для аутентификации в виде имени пользователя и пароля для обычного текста.
У меня есть базовое понимание SOAP и удалось подключиться к другим открытым веб-службам, которые не требуют имени пользователя или пароля с помощью NuSOAP.
Мне было отправлено следующее:
<?php // Set up security options $security_options = array("useUsernameToken" => TRUE); $policy = new WSPolicy(array("security" => $security_options)); $security_token = new WSSecurityToken(array( "user" => "xxx", "password" => "xxx", "passwordType" => "basic")); // Create client with options $client = new WSClient(array("wsdl" => "https://xxx.asmx?wsdl", "action" => "http://xxx", "to" => "https://xxx", "useWSA" => 'submission', "CACert" => "cert.pem", "useSOAP" => 1.1, "policy" => $policy, "securityToken" => $security_token)); // Send request and capture response $proxy = $client->getProxy(); $input_array = array("From" => "2010-01-01 00:00:00", "To" => "2010-01-31 00:00:00"); $resMessage = $proxy->xxx($input_array); ?>
После некоторых исследований я понимаю, что в приведенной выше реализации используется wso2. Мне нужно сделать это без использования wso2.
Я изо всех сил старался искать ресурсы (Google, форумы и т. Д.) Об этом, но ничего не смог найти. Я прочитал несколько руководств по SOAP и смог настроить SOAP-клиент с помощью PHP, но не могу обойти все аутентификации и «политики».
Объяснение того, как достичь этого, а может быть, некоторые ссылки на дальнейшее чтение об этом, будет очень оценено, поскольку я разорву свои волосы! В идеале мне хотелось бы, чтобы некоторые ссылки на ресурсы были для абсолютного новичка для аутентификации SOAP.
Благодарю. PS Некоторые из ссылок / учетных данных в вышеупомянутом случае могли быть xxx'd для конфиденциальности.
Если у вас есть расширение SOAP включено в php (версия php> = 5.0.1), вы можете использовать класс SoapClient для обработки вашего запроса. Для аутентификации вы можете передать имя пользователя и пароль классу с целевым URL:
$soapURL = "https://www.example.com/soapapi.asmx?wsdl" ; $soapParameters = Array('login' => "myusername", 'password' => "mypassword") ; $soapFunction = "someFunction" ; $soapFunctionParameters = Array('param1' => 42, 'param2' => "Search") ; $soapClient = new SoapClient($soapURL, $soapParameters); $soapResult = $soapClient->__soapCall($soapFunction, $soapFunctionParameters) ; if(is_array($soapResult) && isset($soapResult['someFunctionResult'])) { // Process result. } else { // Unexpected result if(function_exists("debug_message")) { debug_message("Unexpected soapResult for {$soapFunction}: ".print_r($soapResult, TRUE)) ; } }
Если вы не уверены в функциях, которые вы можете вызвать, вы можете просмотреть целевой URL (например, заканчивая на «.asmx? Wsdl») в своем браузере. Вы должны получить ответ XML, который сообщает вам о доступных функциях SOAP, которые вы можете вызвать, и ожидаемых параметрах этих функций.
Посмотрите библиотеку soap_wsse