2013-06-20 5 views
0

Я пытаюсь получить ответ на мыло в php. Он продолжает поступать как объект в мой веб-браузер, но не как xml. WSDL показывает как XML, но не полученный ответ. Ниже мой код на стороне сервера. Сервер мыло Zend Мылореакция мыла в массиве

ini_set("soap.wsdl_cache_enabled", 0); 
    if (isset($_GET['wsdl'])){ 
     $wsdl = 'http://localhost/webservice/soap'; 

     $autoDiscover = new AutoDiscover(); 
     $autoDiscover->setOperationBodyStyle(
       array('use' => 'literal', 
         'namespace' => 'http://localhost/webservice/soap') 
     ); 


     $autoDiscover->setBindingStyle(
       array('style' => 'rpc', 
         'transport' => 'http://schemas.xmlsoap.org/soap/http') 
     ); 

     $autoDiscover->setComplexTypeStrategy(new ArrayOfTypeComplex()); 

     // $service is the class that does the handling of functions 
     $autoDiscover->setClass($service); 
     $autoDiscover->setUri($wsdl); 

     $response->getHeaders()->addHeaderLine('Content-Type', 'text/xml'); 

     $response->setContent($autoDiscover->toXml()); 

     } else { 

      $server = new Server('http://localhost/webservice/soap?wsdl' 
      ); 
       // $service is the class that does the handling of functions 
      $server->setObject($service); 
      $response->setContent($server->handle()); 

      } 

      return $response; 
      } 

Класс обслуживания

class service 
    { 
/** 
* 
* @param string $Email 
* @return int $Credit 
*/ 

public function checkCredits($Email) 

{ 
    $validator = new email(); 

    if (!$validator->isValid($Email)) 
    { 

     return new \SoapFault('5', 'Please Provide an Email'); 


    } 
    $rowset = $this->tableGateway->select(array('EMAIL'=>$Email)) 

    $row = $rowset->current(); 
    $credits = $row->CREDITS; 
    return $credits; 
} 

    } 

Прошение:

try{ 
$sClient = new SoapClient('http://localhost/webservice/soap?wsdl'); 
    $params = "email"; 
    $response = $sClient->checkCredits($params); 
var_dump($response); 
} catch(SoapFault $e){ 

var_dump($e); 
} 
+0

где запрос? – DevZer0

+0

$ client = new SoapClient ("wsdl", array ('trace' => 1, 'features' => SOAP_SINGLE_ELEMENT_ARRAYS, 'style' => SOAP_DOCUMENT, 'use' => SOAP_LITERAL)); $ result = $ client-> webservice ('137'); $ rr = $ client-> getLastResponse(); print_r ($ rr); – snab

+0

у вас есть функция, которая обрабатывает этот конкретный вызов? – DevZer0

ответ

0

Это пример того, как я обрабатывать мои функции с SoapClient:

$client = new SoapClient('http://url/Service.svc?wsdl'); 
$var = array('arg' => 10, 
      'VA' => 48); 
$varresponse = $client->Function($var); 
print_r($varresponse->FunctionResult); 

Надеюсь, что это поможет ou вне.

+0

Спасибо, но он не работает. Мой веб-сервис также находится в php, а не в .net. Может ли это быть причиной этого? – snab

+0

Я думаю, что это не имеет значения, если это в PHP или .NET. Какая у вас ошибка? – Matheno

+0

Ошибка. он просто возвращает мне объект, а не xml – snab

0

Ваш SoapServer должен выглядеть как-нибудь так:

<?php 
if(!extension_loaded("soap")){ 
    dl("php_soap.dll"); 
} 

    ini_set("soap.wsdl_cache_enabled","0"); 
    $server = new SoapServer("hello.wsdl"); 

    function doHello($yourName){ 
     return "Hello, ".$yourName; 
    } 

    $server->AddFunction("doHello"); 
    $server->handle(); 

?> 

Как вы настроили ваш? Вы ничего не возвращаете?

Теперь, ваш клиент должен выглядеть следующим образом:

<?php 

try{ 
    $sClient = new SoapClient('http://localhost/test/wsdl/hello.xml'); 
    $params = "Name"; 
    $response = $sClient->doHello($params); 
    var_dump($response); 
} catch(SoapFault $e){ 

    var_dump($e); 
} 
?> 
+0

Спасибо. Но внутри объекта Soap у меня есть класс, называемый сервисом, который обрабатывает функции. Нужно ли добавлять функции отдельно. Я обновил свой вопрос, пожалуйста, посмотрите – snab

Смежные вопросы