tl; dr:发送多个字符串作为对SOAP请求的响应。
我是SOAP新手。我编写了一个简单的Web服务,通过SOAP提供请求。由于我想在PHP中实现它,我使用了NuSOAP库。我给SOAP API设计的规范如下。
请求格式:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://www.sandeepraju.in/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<q0:getData>
<token>String</token>
</q0:getData>
</soapenv:Body>
</soapenv:Envelope>
示例/样本响应:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:getDataResponse xmlns:ns2="http://www.sandeepraju.in/">
<return>
<Data>
<animal>cat</animal>
<phone>225</phone>
<code>FYI</code>
</Data>
我为上述规范编写的PHP代码如下:
require_once("../nusoap_old/lib/nusoap.php");
// Definition of getData operation
function getData($token) {
if($token == "somestring") {
return array("animal" => "cat", "phone" => "225", "code" => "FYI");
}
else {
return array("animal" => "null", "phone" => "null", "code" => "null");
}
}
// Creating SOAP server Object
$server = new soap_server();
// Setup WSDL
$server->configureWSDL('catnews', 'urn:catinfo');
$server->wsdl->addComplexType('return_array_php',
'complexType',
'struct',
'all',
'',
array(
'animal' => array('animal' => 'animal', 'type' => 'xsd:string'),
'phone' => array('phone' => 'phone', 'type' => 'xsd:string'),
'code' => array('code' => 'code', 'type' => 'xsd:string')
)
);
// Register the getData operation
$server->register("getData",
array('token' => 'xsd:string'),
array('return' => 'tns:return_array_php'),
'urn:catinfo',
'urn:catinfo#getData');
// Checking POST request headers
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)? $HTTP_RAW_POST_DATA : "";
$server->service($HTTP_RAW_POST_DATA);
在这里,我认为我应该 NOT 返回一个PHP数组。但我不确定根据规范应该返回什么。谁能帮我这个。或者返回一个数组是否正确?
答案 0 :(得分:3)
您需要为包含数据的数组添加另一种复杂类型。 像这样:
$server->wsdl->addComplexType(
'dataArray', // MySoapObjectArray
'complexType', 'array', '', 'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:return_array_php[]')), 'tns:return_array_php'
);
将新数据类型注册为函数的返回值。
$server->register(
'getData',
array('Datum'=>'xsd:token'),
array('return'=>'tns:dataArray'),
$namespace,
false,
'rpc',
'encoded',
'description'
);
然后你的函数需要设置数组的单个部分。
function GetData($token)
{
if($token == "somestring") {
$result[0] = array(
"animal" => "cat",
"phone" => "225",
"code" => "FYI"
);
$result[1] = array(
"animal" => "dog",
"phone" => "552",
"code" => "IFY"
);
} else {
$result = null;
}
return $result;
}
使用字符串&#34; somestring&#34;调用此服务的响应将是:
<ns1:getDataResponse xmlns:ns1="http://localhost/status/status.php">
<return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:return_array_php[2]">
<item xsi:type="tns:return_array_php">
<animal xsi:type="xsd:string">cat</animal>
<phone xsi:type="xsd:string">225</phone>
<code xsi:type="xsd:string">FYI</code>
</item>
<item xsi:type="tns:return_array_php">
<animal xsi:type="xsd:string">dog</animal>
<phone xsi:type="xsd:string">552</phone>
<code xsi:type="xsd:string">IFY</code>
</item>
</return>
</ns1:getDataResponse>
符合您的规格。