PHP 萤石云消息推送获取报警等信息

235 阅读2分钟

需求分析

  • 举例:设备开启画面变化检测,当设备画面产生变化,设备就会产生报警(画面变化报警),产生这条报警消息之后,设备会主动向平台上传该消息,则这个过程被称为消息推送服务。

  • 在萤石云平台并未找到这一接口的解决方案,网上也并没有解决方案,通过工单,我了解到了,在使用萤石云是,萤石app上开启动检,就能收到消息和图片了,开通平台消息推送就能接收了。

  • 消息推送官方文档地址:open.ys7.com/help/565

  • 消息推送位置: 萤石云开放平台-》云信令-》消息推送。

解决方案

本人采用的是TP6,如使用其他框架,请注意值处理。

  1. 开通消息推送后,根据指引,填写要接收的报警信息,并准确填写webhook中的地址。
  • webhook地址要求 : 必填;接收消息的地址,默认以http:// 或者 https://开头 对于一次webhook推送,用户webhook服务的http返回码为200,且返回内容中包含了推送请求消息报文messageId时,表示推送成功。

代码示例

use think\facade\Request;

class Demo 
{
    /**
     * @notes 萤石云云信令消息
     * @return json
     * @author Milo
     * @date 2025/02/10
    */
    public function receive_message() {
        $header = Request::header();
        $body = Request::getContent();
        $receiveMessage = null;
        try {
             $receiveMessage = json_decode($body, true);
             if ($receiveMessage !== null) {
                 // do someting ...
                 
             }
            
        } catch (Exception $e) {
            //异常处理
            return json($e->getMessage(), 200)
        }
        $result = [];
        if ($receiveMessage !== null) {
            $messageId = $receiveMessage['header']['messageId'];
            $result['messageId'] = $messageId;
        }

        return json($result, 200); // 确保返回http200
    }
}

建议

  1. 你可以先使用平台文档上的请求体进行基础测试。
示例:


{
    "body": {
        "data": "0",
        "index": 24409
    },
    "header": {
        "channelNo": 1,
        "deviceId": "D98462102",
        "messageId": "5e57f239793f2b007fecb0de",
        "messageTime": 1582821945396,
        "type": "ys.open.isapi"
    }
}

正确的应返回

状态码: 200
{  
    "messageId": "5e57f239793f2b007fecb0de"
}
  1. 如果测试没问题,打开消息接收后,将会在报警或其他消息触发进行推送,如果你测试的没问题,但是萤石云中台一直出现【 非正常http状态码 】 ,请检测你服务器防火墙是否进行了拦截操作。

最后

感谢观看,共同学习进步~ Tomorrow will be better