2017-02-11 4 views
0

Английский - не мой родной язык, так что будьте терпеливы.Изменить EndPoint на NuSoap Клиент

Мне нужно сообщить о состоянии некоторых почтовых рассылок другой компании через WebService. Я использую PHP + NuSOAP, я новичок в PHP и эта библиотека поможет мне сохранить его простым, мой код выглядит следующим образом:

require_once '../nusoap/lib/nusoap.php'; 

Class Cliente{ 

    var $server; 

    public function __construct(){   
     $this->server = 'https://the-other-company.com/services/PksiryacwebMgrTarjetasSubsi?wsdl'; 
    } 

    function client_process($data){ 

     $cliente = new nusoap_client($this->server,'wsdl','','','',''); 

     $err = $cliente->getError(); 
     if ($err) { echo 'Error en Constructor' . $err ; } 

     $response = $cliente->call('prwebActualizaCorresponden',$data,'','', false,true); //OK 

     return $response; 
    } 
} 

Где $data массив строк и WebService сервер suposed для возврата ответа (всегда), но вместо этого ничего не отвечает.

Когда я позвонил администратору WebService, он сказал мне, что тестируйте его с помощью SoapUI, тогда я нахожу, что проблема связана с WSDL, потому что он указывает на частный IP-адрес (172.20.8.152), доступ к которому можно получить только изнутри другая компания LAN, вместо этого IP мне сказали работать (the-other-company.com).

<wsdl:service name="PksiryacwebMgr_Tarjetas_SubsiService"> 
     <wsdl:port binding="impl:PksiryacwebMgr_Tarjetas_SubsiSoapBinding" name="PksiryacwebMgr_Tarjetas_Subsi"> 
     <wsdlsoap:address location="http://172.20.8.152/services/PksiryacwebMgrTarjetasSubsi"/> 
     </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

В SoapUI эта проблема легко решить установить другой ENDPOINT с правой IP, но как это сделать в NuSOAP?

Редактировать: Обходным путем было бы сделать мой собственный wsdl/xml, но это не идея.

Заранее спасибо.

ответ

0

Используйте функцию setEndpoint, она определяется Arround линии 7873 из nusoap.php:

/** 
* sets the SOAP endpoint, which can override WSDL 
* 
* @param string $endpoint The endpoint URL to use, or empty string or false to prevent override 
* @access public 
*/ 
function setEndpoint($endpoint) 
{ 
    $this->debug("setEndpoint(\"$endpoint\")"); 
    $this->forceEndpoint = $endpoint; 
} 

В тестовом коде может быть использована таким образом:

require_once '../nusoap/lib/nusoap.php'; 

Class Cliente{ 
    var $server; 
    var $endPoint; 

    public function __construct(){   
     $this->server = 'https://the-other-company.com/services/PksiryacwebMgrTarjetasSubsi?wsdl'; 
     $this->endPoint = 'http://172.20.8.152/services/PksiryacwebMgrTarjetasSubsi'; 
    } 

    function client_process($data){ 

     $cliente = new nusoap_client($this->server,'wsdl','','','',''); 
     $cliente->setEndpoint($this->endPoint); 

     $err = $cliente->getError(); 
     if ($err) { echo 'Error en Constructor' . $err ; } 

     $response = $cliente->call('prwebActualizaCorresponden',$data,'','', false,true); //OK 

     return $response; 
    } 
} 
Смежные вопросы