我搜索了许多例子。
但我找不到如何定义嵌套数组结构,这不是key =>值类型。
客户端使用数组调用'hello'函数,该函数不是key =>值类型。
我无法触及客户端的输入参数。
客户端。
$client = new soapclient('http://localhost/Ex.php?wsdl', 'wsdl');
$ddd = array($id, $pw);
$parameter = array($aaa, $bbb, $ccc, $ddd);
// Call the SOAP method
$result = $client->call('hello',$parameter);
服务器端。
$server->wsdl->addComplexType(
'noKey',
'complexType',
'struct',
'all',
'',
array(
'0'=>array( 'name'=> '0', 'type' => 'xsd:string'),
'1'=>array( 'name'=> '1', 'type' => 'xsd:string')
//this definition occurred error.
)
);
$server->register('hello', // method name
array(
'aaa' =>'xsd:string',
'bbb' =>'xsd:string',
'ccc' =>'xsd:string',
'ddd' =>'tns:noKey'
), // input parameters
array('return' => 'xsd:string'), // output parameters
'urn:Exwsdl', // namespace
false, // soapaction
'rpc', // style
'encoded', // use
'Greet a person entering the sweepstakes' // documentation
);
function hello($aaa, $bbb, $ccc, $ddd) {
return $aaa.", ".$bbb.", ".$ccc.", ".$ddd[0].", ".$ddd[1];
}
错误
Array
(
[faultcode] => SOAP-ENV:Client
[faultactor] =>
[faultstring] => error in msg parsing:
XML error parsing SOAP payload on line 1: XML_ERR_NAME_REQUIRED
[detail] =>
)
帮助我T.T
答案 0 :(得分:0)
尝试不要在复杂类型的定义中使用数字作为数组元素的名称。
以下版本的代码对我来说很好:
$server->register('hello', // method name
array(
'aaa' =>'xsd:string',
'bbb' =>'xsd:string',
'ccc' =>'xsd:string',
'ddd' =>'tns:noKey'
), // input parameters
array('return' => 'xsd:string'), // output parameters
'urn:Exwsdl', // namespace
false, // soapaction
'rpc', // style
'encoded', // use
'Greet a person entering the sweepstakes' // documentation
);
$server->wsdl->addComplexType(
'noKey',
'complexType',
'struct',
'all',
'',
array(
'forename'=>array( 'name'=> 'forename', 'type' => 'xsd:string'),
'surname'=>array( 'name'=> 'surname', 'type' => 'xsd:string')
)
);
function hello($aaa, $bbb, $ccc, $ddd) {
return $aaa.", ".$bbb.", ".$ccc.", ".$ddd['forename'].", ".$ddd['surname'];
}