PHP Web服务NuSOAP复杂类型

时间:2012-12-22 10:09:41

标签: php soap wsdl nusoap complextype

我使用NuSOAP和客户端脚本编写了php web服务。我使用了数组复杂类型 返回一个复杂类型的数组,但它什么都没打印!!

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返回产品数组

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);
}
?>

client.php打印功能结果

请求帮助我。 谢谢!

1 个答案:

答案 0 :(得分:0)

在这里你的WSDL无法正常工作。转到你的.... / server.php?wsdl。什么都没有显示出来。使用 $ server-&gt;服务(isset($ HTTP_RAW_POST_DATA)?$ HTTP_RAW_POST_DATA:''); 在php结束标记之前(?&gt;)。那就是你做的事情。保存后只需运行您的客户端。它会显示你的数组。