将数组传递给 Web 服务 php nusoap
Posted
技术标签:
【中文标题】将数组传递给 Web 服务 php nusoap【英文标题】:passing an array to web-service php nusoap 【发布时间】:2014-12-17 14:40:19 【问题描述】:我在将数组传递给我使用 php 和 nusoap 创建的 Web 服务函数时遇到问题。 问题是我想我做错了什么..我怀疑问题出在函数或我的客户端。当我发送一个数组时,它不会进入我在 Web 服务中注册的函数。当我调用网络服务时,我只得到空数组的响应。 我希望有人可以在这里帮助我。 谢谢。
编辑:我设法修复它。我忘了为请求构建一个结构。
服务器端:
<?php
//include nusoap
require_once('c:\\wamp\\www\\nusoap.php');
//create server instance
$server = new soap_server();
//configure wsdl
$server->wsdl->schemaTargetNamespaces = 'urn:GetArr';
$server->configureWSDL('GetArr','urn:GetArr');
$server->wsdl->addComplexType(
'Product',
'complexType',
'struct',
'all',
'',
array(
'name' => array('name' => 'name', 'type' => 'xsd:string'),
'code' => array('name' => 'code', 'type' => 'xsd:string'),
'price' => array ('name' => 'price', 'type' => 'xsd:int'),
'quantity' => array ('name' => 'quantity', 'type' => 'xsd:int'),
'total_price' => array('name' => 'total_price', 'type' => 'xsd:int')
));
//this is what i was missing
$server->wsdl->addComplexType(
'ArrayReq',
'complexType',
'struct',
'all',
'',
array(
'name' => array('name' => 'name', 'type' => 'xsd:string'),
'code' => array('name' => 'code', 'type' => 'xsd:string'),
'price' => array ('name' => 'price', 'type' => 'xsd:int'),
'quantity' => array ('name' => 'quantity', 'type' => 'xsd:int')
));
//until here.
$server->wsdl->addComplexType(
'ProductArray',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(
array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Product[]')),
'tns:Product');
//function that get and return values
function GetTotalPrice ($proArray)
$temparray = array();
$temparray[] = array('name' => $proArray['name'], 'code' => $proArray['code'], 'price' => $proArray['price'], 'quantity'
=> $proArray['quantity'], 'total_price' => $proArray['quantity'] * $proArray['price']);
return $temparray;
;
//register the method
$server->register('GetTotalPrice',
array('proArray' => 'tns:ArrayReq'),// and this line also.
array('return' => 'tns:ProductArray'),
'urn:GetArr',
'urn:GetArr#GetTotalPrice',
'rpc',
'encoded',
'Get the product total price'
);
//run the service
$post = file_get_contents('php://input');
$server->service($post);
?>
客户端
<?php
//include nusoap
require_once('c:\\wamp\\www\\nusoap.php');
ini_set ('soap.wsdl_cache_enabled', 0);
$arr['name'] = "GoPro";
$arr['code'] = "245";
$arr['price'] =70;
$arr['quantity'] = 4;
$sClient = new nusoap_client('http://localhost/nusoap/comserv.php?wsdl','wsdl','','','','');
$response = $sClient->call('GetTotalPrice',array($arr),'','', false,true);
$error = $sClient->getError();
if ($error)
echo "<h2>Constructor error</h2><pre>" . $error . "</pre>";
if ($sClient->fault)
echo "<h2>Fault</h2><pre>";
echo ($response);
echo "</pre>";
else
$error = $sClient->getError();
if ($error)
echo "<h2>Error</h2><pre>" . $error . "</pre>";
if ($response != "" || NULL)
echo "<h2>Respond</h2><pre>";
print_r ($response);
echo "</pre>";
?>
这是输出(响应)
Respond
Array
(
[0] => Array
(
[name] =>
[code] =>
[price] =>
[quantity] =>
[total_price] => 0
)
)
编辑: 这是固定输出。
回复
Array
(
[0] => Array
(
[name] => GoPro
[code] => 245
[price] => 70
[quantity] => 4
[total_price] => 280
)
)
【问题讨论】:
好的,所以我修好了。我添加了 cmets,因此任何人都可以看到我添加的内容以使其正常工作.. 【参考方案1】:好的,所以我修好了。我添加了 cmets,因此任何人都可以看到我添加的内容以使其正常工作..
我需要为请求创建一个结构,以便我的函数知道数组类型。在函数注册中也修复了。
【讨论】:
这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 @HashemQolami 我认为这篇文章应该进行编辑,而不是删除(我看到很多人投票删除)。特别是因为 OP 找到了修复并回答了他自己的问题。他可能只需要发布他编写的代码示例即可使其正常工作,否则我看不出有什么问题。以上是关于将数组传递给 Web 服务 php nusoap的主要内容,如果未能解决你的问题,请参考以下文章