2011-01-23 75 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,