Как назвать этот безопасный веб-сервис WDSL от Savon в Ruby?

У меня есть рабочий пример PHP (см. ниже) для доступа к защищенному веб-сервису. Я пытаюсь получить доступ к веб-сервису с Savon. Сначала я попробовал:

>> client = Savon::Client.new("https://secure.service.com/soa/soap/?WSDL")
=> #<Savon::Client:0x114053358 @wsdl=#<Savon::WSDL:0x1140532b8 @request=#<Savon::Request:0x1140532e0 @endpoint=#<URI::HTTPS:0x114053038 URL:https://secure.service.com/soa/soap/?WSDL>, @proxy=#<URI::Generic:0x114052fc0 URL:>>>, @request=#<Savon::Request:0x1140532e0 @endpoint=#<URI::HTTPS:0x114053038 URL:https://secure.service.com/soa/soap/?WSDL>, @proxy=#<URI::Generic:0x114052fc0 URL:>>>

Первая проблема, действия SOAP кажутся пустыми:

>> client.wsdl.soap_actions
warning: peer certificate won't be verified in this SSL session
=> []

И пытаемся получить доступ к веб-сервису с учетными данными wsse следующим образом:

>> client = Savon::Client.new do |wsdl, http|
?>   wsdl.document = "https://secure.service.com/soa/soap/?WSDL"
>>   wsdl.wsse.credentials "user", "encrypted-md5-string"
>> end

приводит к:

ArgumentError: wrong number of arguments (0 for 1)

Что можно взять из приведенного ниже рабочего примера PHP на Ruby, чтобы установить некоторые базовые запросы к веб-сервису?

Пример PHP:

$foo = "+++hashkey+++";

$authUser = "user";
$authPass = "password";

$passphrase = md5($foo.$authPass.".wsdl");

echo "User: ".$authUser."<br>";
echo "Passphrase: ".$foo.$authPass.".wsdl<br>";
echo "Digest Passphrase: ".$passphrase."<br>";

$soapClient = new SoapClient( "https://secure.service.com/soa/soap/?WSDL", 
     array( "exceptions"  => true,
            "cache_wsdl" => WSDL_CACHE_NONE,
            "login" => $authUser,
            "password" => $passphrase));

$param = new stdClass();

$param->bankaccount = "1111111";
$param->bankcountry = "US";

$soaMethod = "SoaBank.getBank"; 
$soaParams = array($param);
$result = $soapClient->__soapCall($soaMethod, $soaParams);

print "<h1>Result</h1>";
print_r($result);

person poseid    schedule 01.02.2012    source источник
comment
Я обнаружил, что определение SOAP-ENV вызывает проблемы. На самом деле он должен быть определен с учетом регистра.   -  person poseid    schedule 20.02.2012
comment
Кроме того, более новые версии Savon, по-видимому, лучше поддерживают работу с различными типами конвертов SOAP.   -  person poseid    schedule 20.02.2012


Ответы (2)


Для Savon 2 вы можете использовать :ssl_verify_mode => :none

Savon.client(:wsdl => 'https://blahService?wsdl', :ssl_verify_mode => :none)
person Lifeweaver    schedule 28.02.2014

Попробуйте отключить проверку SSL:

    client = Savon::Client.new("http://wsdl") do
      http.auth.ssl.verify_mode = :none          
    end
person chuck son    schedule 01.02.2012