Передача многомерного массива в мыльный complexType в PHP - PullRequest
4 голосов
/ 20 сентября 2011

Я получаю несколько писем с моего почтового сервера.Есть функция, которая должна извлекать эти письма и возвращать многомерный массив.Я использую этот массив на клиентском веб-сервере, чтобы сделать работу за меня.Я не знаю, как передать этот массив в мыло complexType.Я написал следующий код:

$server->wsdl->addComplexType(
'MailTicket',
'complexType',
'struct',
'all',
'',
 array(
    'attachment' => array('name' => 'attachment', 'type' => 'xsd:string'),
    'body' => array('name' => 'body', 'type' => 'xsd:string'),
    'accountID' => array('name' => 'accountID', 'type' => 'xsd:string')
 )
);

$server->wsdl->addComplexType(
 'MailTicketReturn',
 'complexType',
 'struct',
 'all',
 '',
 array(
    'Done' => array('name' => 'result', 'type' => 'xsd:string')
 )
);

   // Register the method to expose
   $server->register('createMailTicket',                    // method name
 array('mailTicketData' => 'tns:MailTicket'),          // input parameters
 array('return' => 'tns:MailTicketReturn'),    // output parameters
 'urn:eticketing',                         // namespace
 'urn:eticketing#createMailTicket',                   // soapaction
 'rpc',                                    // style
 'encoded',                                // use
 'create a ticket by mail'        // documentation
);

и на клиенте я написал:

<code>require_once('nusoap.php');
$wsdlURL="http://127.0.0.1/eticket/ETKWS.php?wsdl";
$client = new nusoap_client($wsdlURL,true);
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;


$finalArray=Array
(
  [attachment] => Array
    (
        [0] => Array
            (
                [0] => file1
                [1] => file2
            )

        [1] => Array
            (
                [0] => file1x
            )

    )
[body]=>Array
            (
                [0] => some text
                [1] => some other text
            )

[accountID] => Array
    (
        [0] => 5464654
        [1] => 4654664
    )

)

if(is_array($finalArray)) // creat new tickets
{
 $result=$client->call('createMailTicket',$finalArray);
}

$err = $client->getError();
if ($err) {
    echo '<h2>Constructor error</h2><pre>' . $err . '
';echo '

Debug

' . htmlspecialchars($client->getDebug(), ENT_QUOTES) .       '
';выход();}

Я получил эту ошибку:

Ошибка конструктора

Ошибка XML при анализе полезной нагрузки SOAP в строке 1: неправильно сформирован (недопустимый токен)

1 Ответ

2 голосов
/ 04 ноября 2012

Поддержка NuSOAP возвращает многомерный массив (xsd: Array)

           $server= new nusoap_server();

            $namespace = "http://localhost/webservice/";
           // create a new soap server
           $server = new nusoap_server();
           // configure our WSDL
           $server->configureWSDL("WebServices212");
           // set our namespace
           $server->wsdl->schemaTargetNamespace = $namespace;          

           $server->register(
            // method name:
            'test',          
            // parameter list:
            array('id'=>'xsd:int'), 
            // return value(array()):
            array('return'=>'xsd:Array'),
            // namespace:
            $namespace,
            // soapaction: (use default)
            false,
            // style: rpc or document
            'rpc',
            // use: encoded or literal
            'encoded',
            // description: documentation for the method
            'documentation');

             $POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA']) 
            ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';

            // pass our posted data (or nothing) to the soap   service                    
             $server->service($POST_DATA);  

Клиент

<code>           client=new nusoap_client("http://localhost/webservice /webservices.php?wsdl");
          $client->setCredentials("webadmin","****");

           $err = $client->getError();
          if ($err) {

               echo '<h2>Constructor error</h2><pre>' . $err . '
';} $ result = $ client-> call ('test', array ('id' => '1'));print_r ($ результат);

, если вы используете веб-сервисы из PHP без проблем, но на других языках есть проблемы с совместимостью

...