2012-02-01 1 views
1

보안 웹 서비스에 액세스하기위한 PHP 예제 (아래 참조)가 있습니다. Savon과 함께 webservice에 액세스하려고합니다. 첫째, 시도 :Ruby의 Savon에서이 보안 웹 서비스 WDSL을 호출하는 방법은 무엇입니까?

>> 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) 

Ruby의 아래 PHP 작업 예제에서 웹 서비스에 대한 몇 가지 기본적인 요청을 설정하겠습니까?

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); 
+0

을 사용할 수 있습니다 나는 발견 그 SOAP-ENV의 정의 문제를 일으키고 있었다. 실제로 대소 문자를 구분해야합니다. – poseid

+0

또한 새로운 버전의 Savon은 다른 SOAP 봉투 유형을 처리하는 데있어 더 나은 지원을 제공합니다 – poseid

답변

1

가 SSL 인증을 해제 해보십시오 :

client = Savon::Client.new("http://wsdl") do 
     http.auth.ssl.verify_mode = :none   
    end 
2

Savon 2의 경우는 :ssl_verify_mode => :none

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