2011-01-23 41 views
2

我写如下server.php:nusoap如何返回数组?

require_once("lib/nusoap.php"); 
require_once("connect.php"); 

$server = new soap_server; 

$server->configureWSDL('server', 'urn:RM'); 

$server->wsdl->addComplexType(
    'game', 
    'complexType', 
    'struct', 
    'all', 
    '', 
    array(
    'eventId'=>array('name'=>'eventId','type'=>'xsd:int'), 
    'eventName'=>array('name'=>'eventName','type'=>'xsd:string')) 
    ); 

$server->register('gamelist', 
    array('id'=>'xsd:int'), 
    array('return'=>'tns:game'), 
    'urn:RM', 
    'urn:RM#gamelist', 
    'rpc', 
    'encoded', 
    'Get Games Info'); 

function gamelist($id){ 
$query="select eventId, eventName from jos_games where parentId='$id'"; 
$rs=mysql_query($query); 

$game=array(); 
while($row=mysql_fetch_assoc($rs)){ 
    $game[]= $row; 
} 
//print_r($game); 
return $game; 
} 


$HTTPRAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA:""; 
$server->service($HTTP_RAW_POST_DATA); 

client.php如下:

require_once("lib/nusoap.php"); 

$client = new nusoap_client('http://sonia.ecisoft.com/soap/server.php'); 


if($err=$client->getError()){ 
echo 'Error:'.$err; 
} 

$id=1; 
$return = $client->call('gamelist', array('id'=>$id)); 

print_r($return); 

我无法从client.php回报。我想列出eventId,eventName的行。 请帮助我,谢谢。

+0

你检查服务器是否会返回一个有效的响应,如果你简单地查询在浏览器的URL(甚至像SOAPUI的工具)?这会告诉你它的客户端或服务器是否有问题。 – Spudley

+0

我在server.php中尝试了print_r($ game),它是正确的。我试着 echo“

”。$ client-> request。“”; echo“”。$ client-> response。“”; 肥皂响应print_r数组。 – Sonia

回答

5

我认为PHP类型应该是“数组”。更改以下内容应该可以工作。

$server->wsdl->addComplexType(
'game', 
'complexType', 
'array', 
'all', 
'', 
array(
'eventId'=>array('name'=>'eventId','type'=>'xsd:int'), 
'eventName'=>array('name'=>'eventName','type'=>'xsd:string')) 
); 

功能游戏列表的返回值应该是这样的:

return array("game" => $game); 
4

添加复杂类型列表数组的

$soap->wsdl->addComplexType(
'ListArray', 
'complexType', 
'array', 
'', 
'SOAP-ENC:Array', 
    array(), 
    array(
    array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]') 
), 
    'xsd:string' 

);

注册功能

 $soap->register(
"YourAPIName", 
array(), 
array('return' => 'tns:ListArray'), 
API_NAMESPACE, 
false, false, false,