PHP Web Service NuSOAP complex type

2019-04-17 12:28发布

I wrote php web service using NuSOAP and client script. I used array complex type to return an array of complex type, but it's print nothing!!

server.php

<?php
        // Pull in the NuSOAP code
        require_once('nusoap-php5-0.9/lib/nusoap.php');
        ini_set ('soap.wsdl_cache_enabled', 0);
        // Create the server instance
        $server = new soap_server();
        // Initialize WSDL support
        $server->configureWSDL('GetCus', 'urn:GetCus');



        $server->wsdl->addComplexType(
    'Product',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'Name' => array('name'=>'name','type'=>'xsd:string'),
        'Code' => array('name'=>'product_number','type'=>'xsd:string'),
    'Price' => array('name'=>'price','type'=>'xsd:int'),
        'Ammount' => array('name'=>'quantity','type'=>'xsd:int')
    )
);

$server->wsdl->addComplexType(
    'ProductArray',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Product[]')
    ),
    'tns:Product'
);



           // Register the method to expose
        $server->register('GetProductsByCode',                    // method name
            array(),          // input parameters
            array('return' => 'tns:ProductArray'),    // output parameters tns:Customer
            'urn:GetCus',                         // namespace
            'urn:GetCus#GetProductsByCode',                   // soapaction
            'rpc',                                    // style
            'encoded',                                // use
            'Get Customer Information'        // documentation
        );

   function GetProductsByCode()
   {
        $productArray=array();
        for($i=0; $i<5 ; $i++)
        {
          $product=array('Name' => 'somthing'.$i,
            'Code' => '23456yui'.$i,
            'Price' => 222*($i+1),
            'Ammount' => 5+$i
            );  
            $productArray[]=$product;
        }
     return $productArray;
   }
?>

server.php return product array

client.php

<?php
require_once('nusoap-php5-0.9/lib/nusoap.php');
ini_set ('soap.wsdl_cache_enabled', 0);
try{
  $sClient = new nusoap_client('http://localhost/DataBaseTest/nusoap_server2.php?wsdl','wsdl','','','','');
  $response = $sClient->call('GetProductsByCode',array(),'','', false,true);
  print_r($response);
} catch(SoapFault $e){
  var_dump($e);
}
?>

the client.php print the function result

pleas help me. thanks!

1条回答
Rolldiameter
2楼-- · 2019-04-17 12:57

IN here your WSDL is not working. Go to your ..../server.php?wsdl. Nothing is displaying. Use $server->service(isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''); before the php end tag(?>). That would do you the thing. After saving just run your client. It will display your array.

查看更多
登录 后发表回答