如何配置WEM-MX电表实现能源追踪与数据上报对接
WEM-MX电表对接实操步骤
一、先排查PHP页面未触发的问题
先不要写业务逻辑,按以下顺序定位:
- 先在web根目录写一个最简请求记录脚本,内容如下:
<?php $log = sprintf( "[%s] METHOD:%s HOST:%s URI:%s HEADERS:%s BODY:%s\n", date('Y-m-d H:i:s'), $_SERVER['REQUEST_METHOD'], $_SERVER['HTTP_HOST'], $_SERVER['REQUEST_URI'], json_encode(getallheaders()), file_get_contents('php://input') ); file_put_contents('./access_debug.log', $log, FILE_APPEND);
把web服务器的访问日志、错误日志级别调到最高,临时关闭WAF、HTTPS强制跳转、路径伪静态规则,触发一次电表上报,看日志里有没有收到请求,重点确认3个点:
- 电表请求的目标端口、路径是否和你配置的一致:该型号老设备不支持非80端口、不支持多级路径、仅识别
.php后缀的处理入口,配置上报地址时不要带多余参数 - 服务器是否拦截了请求:老SOAP设备固定带
Content-Type: text/xml头,部分默认配置的web服务器会拦截非form类型的POST请求,直接返回403/415状态码,不会转发给PHP解析 - 虚拟主机是否匹配:部分固件版本硬编码了上报请求的HOST头,用IP直连时要把接收脚本设为web服务器的默认站点,避免请求落到其他虚拟主机上
- 注意:该设备固件不支持HTTP 301/302跳转,所有上报地址必须直接返回200状态码,不要做路径补全、协议跳转类的规则。
二、SOAP上报最小实现
不需要系统学习SOAP/XML规范,针对该设备的ReportData上报接口,按最小逻辑实现即可:
- 不要用
$_POST获取上报数据:SOAP报文是放在HTTP请求体里的XML格式数据,不是表单格式,必须用file_get_contents('php://input')获取原始请求体 - 解析数据直接用PHP内置的SimpleXML扩展,注意处理SOAP命名空间,示例代码:
<?php // 获取原始请求体 $rawXml = file_get_contents('php://input'); // 解析XML,忽略CDATA转义 $xml = simplexml_load_string($rawXml, 'SimpleXMLElement', LIBXML_NOCDATA); // 注册SOAP和业务接口的命名空间,不注册无法读取报文体节点 $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $xml->registerXPathNamespace('et', 'http://etanalytics.com/'); // 提取上报数据节点 $reportData = $xml->xpath('//soap:Body//et:ReportData')[0] ?? null; if ($reportData) { // 此处写自己的业务逻辑,提取设备编号、时间戳、各回路能耗值,存入数据库/文件 file_put_contents('./meter_data_storage.log', print_r($reportData, true)."\n", FILE_APPEND); }
- 必须返回符合规范的SOAP响应,否则设备会判定上报失败,持续重复发送请求,固定返回成功的响应报文如下:
<?php header('Content-Type: text/xml; charset=utf-8'); echo <<<XML <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ReportDataResponse xmlns="http://etanalytics.com/"> <ReportDataResult>true</ReportDataResult> </ReportDataResponse> </soap:Body> </soap:Envelope> XML; exit;
三、兜底方案(SOAP对接受阻时使用)
如果SOAP模式调试无进展,直接切换为FTP上报模式,配置成本更低、稳定性更高:
- 部署FTP服务,为电表单独创建账号,仅开放单个上传目录的写入权限,注意该设备仅支持FTP主动模式,不支持FTPS、SFTP加密,不要开启相关安全选项
- 设备按固定间隔生成标准格式的能耗数据文件(csv/dat格式)上传到FTP目录,写定时任务扫描该目录,解析新增文件的字段入库即可,完全不需要处理XML/SOAP逻辑
- 注意给FTP目录关闭执行权限,避免文件上传类安全风险
内容的提问来源于stack exchange,提问作者Leary00
相关产品推荐
相关产品推荐

