PHP SoapClient для вызова метода мыла с аутентификацией - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь получить доступ к веб-сервису (JAX-WS) с помощью wsdl, используя php (5.3.5). Ниже приведен код, который я использую:

class insoapauth 
{ 
    public $Username; 
    public $Password; 

    public function __construct($username, $pass) 
    { 
        $this->Username = $username; 
        $this->Password = $pass; 
    } 
} 
$client = new SoapClient("http://192.168.124.11:8080/cx-subscriberdata/CXSubscriberAdmin?wsdl", array( "login" => "SOAPDW", "password" => "DW@2012"));

   // Create the header 
  $auth         = new insoapauth("SOAPDW", "DW@2012"); 
  $header       = new SoapHeader("http://192.168.124.11:8080/cx-subscriberdata/CXSubscriberAdmin", "APICredentials", $auth, false); 
try {

  $result = $client->__soapCall("getDataWS", array( 
    "CrmSearchInformation" => array( 
        "searchKeyValue"        => "93700801021"        
    ) 
)); 

  echo("<br/>Returning value of __soapCall() call: ".$result);

}catch(SoapFault $exception)
{
    print_r("Got issue:<br/>") ;
  var_dump($exception);
}

В качестве альтернативы я попробовал другой способ, используя SoapHeader и предоставляя его во время вызова метода. Но я всегда получаю исключение SoapFault:

Не удалось подключиться к хосту

Подробнее исключение:

Исключение SoapFault: [HTTP] Не удалось подключиться к хосту в C: \ wamp \ www \ SOAPTest \ client \ insoaptest.php: 103 Трассировка стека: # 0 [внутренняя функция]: SoapClient -> _ doRequest (' _soapCall (' getDataWS ', Array) # 2 {main}

Однако, используя soapUI, я могу подключиться к soapsever и могу вызывать soapmetod с теми же учетными данными. Ниже приведен пример кода для доступа к WS - я полагаю, это на Java - поставляется с руководством:

INBeanService service = new INBeanService();
CXINWS wsPort = service.getCXINWSPort();
String username = "crmtestuser";
String password = "crmpassword";
BindingProvider bp = (BindingProvider) wsPort;
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
try {
CrmSearchInformation crmSearchInfo = new CrmSearchInformation();
crmSearchInfo.setSearchKeyValue(msisdn);
CrmSearchResult result = wsPort.getDataWS(crmSearchInfo);
//handle result
System.out.println("Result state: " + result.getSearchResultState());
} catch (NxWsException e) {
// handle exceptions
}

Кто-нибудь может показать мне немного света, как я могу получить доступ к веб-сервису wsdl из php с аутентификацией?

1 Ответ

0 голосов
/ 13 марта 2012

У меня раньше была эта ошибка из-за кэшированного WSDL ... попробуйте отключить кеш:

ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);

Документы с этими настройками здесь

...