我是webservices的新手,想学习它。 请让我知道在肥皂服务器上解析肥皂请求的最佳和最简单的方法。我的网络服务工作正常,但我有以下问题:
我无法从soap请求中获取值。我尝试了DOMDocument以及simplexml_load_file。但我无法得到任何东西。我的意思是,客户端正在发送soap请求,但我无法解析它以便处理。
我无法测试我的功能如何在服务器上运行。我从soap客户端发送请求,无论我打印什么,服务器上的var_dump都不起作用,我只能看到返回值或客户端异常。我需要将请求soap添加到数组中并处理它并保存到DB并返回响应。我试图打印/查看/查看客户端请求,但失败了。我需要将其视为数组以循环并保存到DB。
请帮忙。
SOAP服务器:
<?php
ini_set("soap.wsdl_cache_enabled","0");
$server = new SoapServer("my.wsdl");
function hello($params){
$response = array(
"output1" => "requestOutputOne",
"output2" => "requestOutputTwo"
);
return $response;
}
$server->addFunction('hello');
$server->handle();
?>
SOAP客户端:
<?php
ini_set('display_errors', 1);
ini_set("soap.wsdl_cache_enabled","0");
try
{
$client = new SoapClient("my.wsdl", array('trace' => 1));
$params = array(
"input1"=>"requestInputOne",
"input2"=>"requestInputTwo"
);
$response = $client->hello($params);
header("Content-Type: text/xml");
echo $client->__getLastResponse();
}
catch (SoapFault $e) {
echo '<pre>'; print_r($e); echo '</pre>';
}
?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<input>
<item>
<key>input1</key>
<value>requestInputOne</value>
</item>
<item>
<key>input2</key>
<value>requestInputTwo</value>
</item>
</input>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
答案 0 :(得分:0)
试试这个:
$response = $client->hello($params);
$p=objectToArray($response);
recurse($p);
}
function objectToArray( $object )
{
if( !is_object( $object ) && !is_array( $object ) )
{
return $object;
}
if( is_object( $object ) )
{
$object = get_object_vars( $object );
}
return array_map( 'objectToArray', $object );
}
function recurse ($array)
{
//statements
foreach ($array as $key => $value)
{
# code...
if( is_array( $value ) )
{
recurse( $value );
}
else
{ $v=$value;
$v=str_replace("’",'\'',strip_tags($v));
$v=str_replace("–",'-',$v);
$v=str_replace("‘",'\'',strip_tags($v));
$v=str_replace("“",'"',strip_tags($v));
$v=str_replace("”",'"',strip_tags($v));
$v=str_replace("–",'-',strip_tags($v));
$v=str_replace("’",'\'',strip_tags($v));
$v=str_replace("'",'\'',strip_tags($v));
$v=str_replace(" ",'',strip_tags($v));
$v=html_entity_decode($v);
$v=str_replace("&",' and ',$v);
$v = ereg_replace("\r\n", "", $v);
$v = ereg_replace("\r", "", $v);
$v = ereg_replace("\t", "", $v);
$v = preg_replace('/\s+/', ' ', $v);
echo '<'.$key .'>'. trim($v) .'</'.$key.'>';
}
}
使用此功能,您可以使用所有键和值插入数据库
答案 1 :(得分:0)
我终于得到了答案:
$xml = $params->item;
$result = array();
foreach ($xml as $item)
{
$result[$item->key] = $item->value;
}
这将构建包含soap xml中所有key =&gt;值的新数组。此功能在上面的SoapServer中用于处理从Soapclient发送的数据。