2013-03-02 2 views
0

Может ли кто-нибудь предоставить мне пример PHP, как сделать вызов WSSoapClient в wsdl webservice по адресу https://gateway2.pagosonline.net/ws/WebServicesClientesUT?wsdl.Как сделать вызов php WSSoapClient в PHP - пример

Я искал везде примеры кода и не мог найти, как это назвать. я вижу, что вы можете расширить класс 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

Во-первых, вам необходимо инициализировать новый объект SoapClient, передавая URL в файл WSDL следующим образом:

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

Затем вы можете вызывать методы обслуживания, как любой другой метод объекта, такой как:

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

Чтобы получить список всех доступных методы е, как только вы создали свой $client объект, вы можете позвонить __getFunctions() так:

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

Примечание: вы должны иметь php_soap и php_openssl включен в файл php.ini для этой работы.

Редактировать: Похоже, что услуга, которую вы вызываете, требует wsse-заголовков. Я не эксперт, но похоже, что у PHP нет большой поддержки такого рода вещей.

Найденный проект в Google Code, который, как представляется, упрощает работу с PHP. Ссылка здесь: https://code.google.com/p/wse-php/source/browse/

Вы можете просто взять файлы soap-wsse.php и xmlseclibs.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); 
    } 
} 

Тогда вы должны быть в состоянии говорить с WebService, как это:

$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