我需要使用OCPP - 协议从系统的现有WSDL文件创建一个中央系统(SOAP服务器)。(开放式充电点协议)
我已经成功地在非wsdl-mode和wsdl-mode中编写测试SOAP服务器和客户端,但是当我尝试使用现有的WSDL时,我得到的是一大堆错误(不能告诉我们我很多)
WSDL files可以在这里找到(中央系统和充电点。抱歉,无法发布更多链接..)
我已经修复了一些错误,但无法解决这个问题 我猜 server.php 有错误并且没有返回任何内容,但我不知道为什么或如何使其工作。
为什么服务器无法识别请求或此处发生了什么?
的var_dump(的 $客户端 - > __ getLastRequestHeaders());
string(201)" POST /testi/OCPPServer.php HTTP / 1.1主机:127.0.0.1 连接:Keep-Alive User-Agent:PHP-SOAP / 5.6.8内容类型: 应用/肥皂+ xml的;字符集= UTF-8;行动=" /心跳" 内容长度:276"
的var_dump(的 $客户端 - > __ getLastRequest());
string(276)" 1234"
的var_dump(的 $客户端 - > __ getLastResponseHeaders());
NULL
的var_dump(的 $客户端 - > __ getLastResponse()获得);
NULL
以下是我的代码:
server.php
<?php
ini_set("soap.wsdl_cache_ttl", "0");
header("Content-type:text/xml");
# This class handles OCPP central system functions
class OCPPFunctions {
public function Heartbeat() {
#$date = date('Y-m-d H:i:s');
#return array('currentTime' => $date);
#return $date;
#test datetime
return array('currentTime' => '2010-10-10T10:10:10Z');
}
public function BootNotification($params) {
$result['RegistrationStatus'] = "Accepted";
$result['currentTime'] = "";
$result['heartbeatInterval'] = 100000;
return $result;
}
}
$server = new SoapServer("http://127.0.0.1/testi/ocppcp.wsdl",
array('trace' => 1));
$server->setClass('OCPPFunctions');
$server->handle();
?>
client.php
<?php
ini_set("soap.wsdl_cache_ttl", "0");
$wsdl_local = "http://127.0.0.1/testi/ocppcs.wsdl";
$client = new SoapClient($wsdl_local,
array('trace' => 1 ,
'soap_version' => SOAP_1_2,
'location' => 'http://127.0.0.1/testi/server.php'));
$header = new SoapHeader('urn://Ocpp/Cs/2012/06/', 'chargeBoxIdentity', '1234' );
$client->__setSoapHeaders($header);
var_dump($client->__getFunctions());
echo '<br>';
try {
$result = $client->__soapCall('Heartbeat', array());
echo $result;
} catch(SoapFault $e) {
var_dump($e);
}
?>
SoapFault var_dump($ e)我得到的是:
对象(SoapFault)#3(9){[&#34; message&#34;:protected] =&gt; string(27)&#34; Error Fetching&gt; http headers&#34; [&#34;串&#34;:&#34;例外&#34;:私人] =&GT; string(0)&#34;&#34; &GT; [&#34;代码&#34;:保护] =&GT; int(0)[&#34; file&#34;:protected] =&gt; string(58)&#34; /Applications/XAMPP/xamppfiles/htdocs/testi/OCPPClient.php" [&#34;线&#34;:保护] =&GT; int(21)[&#34; trace&#34;:&#34; Exception&#34;:private] =&gt; array(2){[0] =&gt; array(4){[&#34; function&#34;] =&gt; string(11)&#34; __ doRequest&#34; [&#34;类&#34;] =&GT; string(10)&#34; SoapClient&#34; [&#34;类型&#34;] =&GT; string(2)&#34; - &gt;&#34; [&#34; ARGS&#34;] =&GT; array(5){[0] =&gt;字符串(276)&#34; 1234&#34; [1] =&GT; string(37)&#34; http:// localhost /testi/OCPPServer.php" [2] =&GT; string(10)&#34; / Heartbeat&#34; [3] =&GT; int(2)[4] =&gt; int(0)}} [1] =&gt; array(6){[&#34; file&#34;] =&gt; string(58)&#34; /Applications/XAMPP/xamppfiles/htdocs/testi/OCPPClient.php" [&#34;线&#34;] =&GT; int(21)[&#34; function&#34;] =&gt; string(10)&#34; __ soapCall&#34; [&#34;类&#34;] =&GT; string(10)&#34; SoapClient&#34; [&#34;类型&#34;] =&GT; string(2)&#34; - &gt;&#34; [&#34; ARGS&#34;] =&GT; array(2){[0] =&gt; string(9)&#34; Heartbeat&#34; [1] =&GT; array(1){[&#34; foo&#34;] =&gt; string(3)&#34; bar&#34; }&#34; previous&#34;:&#34; Exception&#34;:private] =&gt; NULL [&#34; faultstring&#34;] =&gt; string(27)&#34;错误获取http标头&#34; [&#34;的faultcode&#34;] =&GT; string(4)&#34; HTTP&#34; }
任何帮助或提示都将不胜感激!
答案 0 :(得分:0)
var_dump(client);
如果返回NULL,则表示它是网络问题;如果返回您的Soap通话详细信息,则不是代码问题。
它很可能出现在您的soap options数组中,因为如果我没记错的话,uri和options仅在wdsl为空值(NON-WDSL MODE)时使用