SOAP-аутентификация с помощью PHP - PullRequest
6 голосов
/ 14 октября 2010

Мне нужно подключиться к веб-службе, для которой требуются учетные данные в виде простого имени пользователя и пароля.

У меня есть общее представление о 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.

Спасибо. P.S. Некоторые из ссылок / учетных данных в приведенном выше, возможно, были xxx'd для конфиденциальности.

Ответы [ 2 ]

10 голосов
/ 14 октября 2010

Если у вас включено расширение 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, которые вы можете вызвать, и об ожидаемых параметрах этих функций.

0 голосов
/ 27 июля 2011

Посмотрите библиотеку soap_wsse

...