2013-03-02 3 views
0

WSSoapClient 호출을 wsdl webservice로 만드는 방법에 대한 PHP 예제를 https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl에 제공 할 수 있습니까?PHP에서 PHP WSSoapClient 호출을 만드는 방법 - 예 :

나는 어디에서나 코드 예제를 찾아 보았고이를 호출하는 방법을 찾을 수 없었다. SoapClient 클래스를 확장 할 수 있지만 호출 자체를 구조화하는 방법을 놓쳤다는 것을 알 수 있습니다. 정말 고맙습니다.

예 "첫째

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:ser="http://server.webservices.web.v2.pagosonline.net"> 
<soapenv:Header> 
<wsse:Security soapenv:mustUnderstand="1" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- secext1.0.xsd"> 
<wsse:UsernameToken> 
<wsse:Username>1</wsse:Username> 
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username- token-profile-1.0#PasswordText"> 
123456</wsse:Password> 
</wsse:UsernameToken> 
</wsse:Security> 
</soapenv:Header> 
<soapenv:Body> 
<ser:getVersion soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
</soapenv:Body></soapenv:Envelope> 

답변

2

, 당신은 다음처럼 WSDL 파일에 URL을 전달, 새로운 SoapClient 객체를 초기화해야합니다

$client = new SoapClient("https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl"); 

그런 다음 당신이 어떤 같은 서비스 메소드를 호출 할 수 있습니다 다른 객체 방법 이렇게 :

$verificaCuenta = true; 
$result = $client->setVerificaCuenta($verificaCuenta); 

모든 availabl의 목록을 얻으려면 당신이 당신의 $client 객체를 만든 후에는 전자의 방법,이 같은 __getFunctions()를 호출 할 수

$client = new SoapClient("https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl"); 
$functions = $client->__getFunctions(); 
var_dump($functions); 

참고 : 당신이 php_soapphp_openssl는이 작업을 위해 php.ini 파일에 설정되어 있어야합니다.

: 호출중인 서비스에 wsse 헤더가 필요합니다. 나는 전문가가 아니지만, PHP는 이런 종류의 일을 잘 지원하지 않는다.

PHP로 wsse를 쉽게 만들 수있는 것으로 보이는 Google 코드 프로젝트를 찾았습니다. 여기에 링크 : https://code.google.com/p/wse-php/source/browse/

soap-wsse.phpxmlseclibs.php 파일을 잡을 수 있습니다.

그런 다음 코드로 soap-wsse.php 파일을 포함하고 다음과 같이 비누 클라이언트를 확장 :

require "soap-wsse.php"; 
class mySoap extends SoapClient { 

    function __doRequest($request, $location, $saction, $version) { 
     $doc = new DOMDocument('1.0'); 
     $doc->loadXML($request); 

     $objWSSE = new WSSESoap($doc); 

     $objWSSE->addUserToken("YOUR_USERNAME_HERE", "YOUR_PASSWORD_HERE", TRUE); 

     return parent::__doRequest($objWSSE->saveXML(), $location, $saction, $version); 
    } 
} 

그런 다음이 같은 웹 서비스에 이야기 할 수 있어야한다 :

$wsdl = 'https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl';  
$sClient = new mySoap($wsdl, array('trace'=>1)); 

try { 
    $verificaCuenta = true; 
    $result = $sClient->setVerificaCuenta($verificaCuenta); 
    print_r($result->return); 
} catch (SoapFault $fault) { 
    print("Fault string: " . $fault->faultstring . "\n"); 
    print("Fault code: " . $fault->detail->WebServiceException->code . "\n"); 
} 

echo $sClient->__getLastRequest() . "\n" . $sClient->__getLastResponse(); 

면책 조항

위의 코드 중 하나라도 테스트하지 않았 으면 좋겠지 만 올바른 경로에 넣을 수 있습니다.

행운을 빌어 요.

+0

위의 코드가이 특정 웹 서비스에 필요한 헤더 보안을 처리하는지 확인하고 싶습니다. 필요한 보안 헤더를 전달할 것입니까? 이 질문에 이미지를 첨부했습니다. 적절한 보안 헤더로 통화를 표시하는 방법에 대한 예가 나와 있습니다. 제발 당신이 코멘트 할 수 있습니까? 다시 한 번 감사드립니다 – jacksprater

+0

제 답변을 업데이트했습니다 - 올바른 방향으로 당신을 안내해 줄 수 있기를 바랍니다. 불행히도 내 지식만큼이나. –

+0

WS-Security 헤더가 필요한 경우 다음 질문을 참조하십시오. http://stackoverflow.com/questions/953639/connecting-to-ws-security-protected-web-service-with-php – scotru