数据转发至第三方服务

最近更新时间:2025-12-29 15:26:13

我的收藏

概述

将通过规则提取出来的消息字段转发给第三方服务时,您可自定义如何处理这些数据。这种方式是提供给用户灵活性最高的一种消息处理方式。
注意:
第三方服务必须以 HTTP 或 HTTPS 的方式提供服务。配置转发第三方服务,需要提供支持 HTTP 或 HTTPS 的网站 URL 和端口。规则引擎转发成功后,第三方服务将收到来自42.193.134.62106.52.211.220157.255.11.20214.215.166.14120.233.106.237 的数据包。

前提条件

已有可使用的实例,可参见 实例管理
已创建规则,具体操作可参见 创建规则

配置步骤

步骤1:填写服务器配置

操作指南 创建规则和筛选数据,再添加行为操作,选择转发到第三方服务。
1. 登录 物联网开发平台控制台,单击目标实例,选择左侧菜单栏数据流转 > 规则引擎
2. 单击需要配置的规则名称,在规则详情页面,单击添加行为操作
3. 在弹出的“添加规则”窗口,填写相关信息。
3.1 选择行为类型为“数据转发到第三方服务(Forward)”。
3.2 填写您的 HTTP 或 HTTPS 服务地址。物联网开发平台会将设备上报的数据转发至 HTTP 或 HTTPS 服务地址。
4. 为保证您的服务请求为合法有效的请求,请勾选 “增加鉴权 Token”,且填写您的服务对应的 Token。您可以任意填写 Token,用作生成签名(该 Token 会和接口 URL 中包含的 Token 进行比对,从而验证安全性)。
说明:
当勾选 “增加鉴权 Token”后,您的服务需实现下方的 验证消息 逻辑。


步骤2:验证消息

注意:
为了您后台稳定使用,请选择增加鉴权 Token。

请求标识

用户如果在转发到第三方服务(Forward)即 HTTP 转发,已选择“增加鉴权 Token”,物联网开发平台将在 HTTP 或 HTTPS 请求头部增加如下字段:
参数
描述
Signature
Signature 结合了“添加规则”中填写的 Token 参数和请求中的 Timestamp 参数、Nonce 参数。
Timestamp
时间戳。
Nonce
随机数。
1. 将 Token、Timestamp、Nonce 三个参数进行字典序排序。
2. 将三个参数字符串拼接成一个字符串进行 SHA1 加密。
3. 开发者获得加密后的字符串可与 Signature 对比,标识该请求来源于物联网开发平台。
检验 Signature 的 PHP 示例代码如下:
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];

$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}

Running Environment

Operating System: Ubuntu 24.04.3 LTS / x86_64

Runtime Version: PHP 8.3.6 (cli) (built: Jul 14 2025 18:30:55) (NTS)

例如某次请求,相关参数如下,用户设置 Token 为 aaa。
Nonce: IkOaKMDalrAzUTxC
Signature: c259ed29ec13ba7c649fe0893007401a36e70453
Timestamp: 1604458421

Running Environment

Operating System: Ubuntu 24.04.3 LTS / x86_64

Runtime Version: PHP 8.3.6 (cli) (built: Jul 14 2025 18:30:55) (NTS)

排序后的字符串是1604458421IkOaKMDalrAzUTxCaaa,最终计算 SHA1 结果为c259ed29ec13ba7c649fe0893007401a36e70453

步骤3:服务地址校验

1. 当开启规则引擎时,物联网开发平台将发送一次 GET 请求到填写的服务器地址 URL 上,GET 请求头部增加如下字段:
参数
描述
Signature
Signature 结合了“添加规则”中填写的 Token 参数和请求中的 Timestamp 参数、Nonce 参数。
Timestamp
时间戳。
Nonce
随机数。
Echostr
随机字符串。
物联网开发平台向第三方服务发送报文示例:
GET / HTTP/1.1
Host: **.**.**.**:4443
User-Agent: Go-http-client/1.1
Content-Type: application/json
Echostr: UPWIAFASvDUFcTEE
Nonce: testrance
Signature: abb6c316a8134596d825c5a1295bfa6f7657664d
Timestamp: 1623149590
Accept-Encoding: gzip

2. 第三方服务若确认此次 GET 请求来自物联网开发平台,请在 body 中原样返回 Echostr 参数内容。
第三方服务回复物联网开发平台报文示例:
HTTP/1.1 200 OK
Date: Tue, 08 Jun 2021 10:53:10 GMT
Content-Length: 16
Content-Type: text/plain; charset=utf-8

UPWIAFASvDUFcTEE

3. 物联网开发平台校验返回的 Echostr 参数内容,确认服务器地址 URL 是否有效。

配置案例

准备工作

1. 单击 首页 进入完成注册账号,然后进入控制台页面,单击 Create Request Bin 部署 HTTP 应用服务。

2. 一键快速部署后,就能看到自动生成的 URL,复制 URL 的同时需要手动点击右上角的“Deploy”以生效。

3. 将第2步的 URL 粘贴到物联网开发平台对应规则的行为操作的服务地址中。
说明:
单击“保存”后平台会自动校验第三方 URL 的可连接性,若提示“超时”需核查 HTTP 服务是否部署。
“增加鉴权 Token”为可选项,用户可根据实际情况来选择。


转发物模型数据到第三方平台

1. 在对应规则的筛选数据中编写规则,如图所示 Topic 类型的数据为物模型属性上报。

2. 将第三方生成的 URL 复制粘贴到行为规则中保存即可。
3. 启用配置好的规则状态,同时检查 Topic 类型和转发的 URL 地址。

4. 用 MQTTX 工具去模拟物模型数据上报,操作步骤如下图所示,具体上报可参考 物模型 Topic 消息通信

5. 查看云端诊断日志中的内容,确认消息成功转发至第三方平台。

6. 来到第三方平台,如下图所示。找到 body 位置,展开即可核查是否有收到平台转发的消息。

若第三方平台未收到消息,则需核查是否发送“Responded successfully with status 200” 。该状态表示规则引擎转发消息至第三方服务器的请求,已收到第三方返回的 HTTP 200 状态码,核心结论是消息转发成功,第三方服务器已正常接收并处理。
7. 复制 payload 的加密内容,用 Base64 编码工具 进行解码,然后核对 JSON 数据是否正确。


数据格式

消息类型包括设备上报的 Topic 消息和平台监测到设备状态变化的通知消息,两类消息转发成功后,第三方服务收到的数据格式不同。如下:
设备消息上报的 Topic 消息。转发成功后,第三方服务收到的数据格式如下:
{
"payload": {
"dianliang":41
},
"timemills":1764038772492,
"seq": 212934692,
"timestamp": 1660210398,
"topic": "$thing/up/property/D1S742XVM1/Test",
"devicename": "Test",
"productid": "D1S742XVM1"
}
设备状态变化通知:当平台监测到设备状态变化后,会触发此消息转发,转发成功后,第三方服务收到的数据格式如下:
{
"MsgType": "Forward",
"Event": "",
"Topic": "$state/report/D1S742XVM1/Test",
"Seq": 0,
"PayloadLen": 178,
"ProductId": "D1S742XVM1",
"DeviceName": "Test",
"Payload": "eyJkZXZpY2VOYW1lIjoicHNrRGV2aWNlMDAxIiwiZXZlbnQiOiJFVl9PTkxJTkUiLCJwcm9kdWN0SUQiOiJLNzJDUkFJRzk4IiwicmVhc29uIjoiUkVBU09OX0RFVklDRV9DT05ORUNUIiwidGltZXN0YW1wIjoxNjc2OTY1MzUxLCJ0b3BpYyI6IiRzdGF0ZS9yZXBvcnQvSzcyQ1JBSUc5OC9wc2tEZXZpY2UwMDEifQ==",
"Time": "2023-02-21 15:42:31",
"TimeMills": 1676965351605,
"Reason": ""
}
Payload 进行 Base64解码后:
{
"deviceName": "Test",
"event": "EV_OFFLINE",
"productID": "D1S742XVM1",
"reason": "REASON_DEVICE_DISCONNECT",
"timestamp": 1677068839,
"topic": "$state/report/D1S742XVM1/Test"
}

字段说明

字段
描述
payload
按编写的数据筛选规则,从设备上报的 Topic 消息中,筛选出来的数据;如果设备上报的是二进制格式数据,payload 为原数据进行 Base64 编码。
timemills
转发行为触发时的时间戳,毫秒级别。
seq
序列号。
timestamp
时间戳。
topic
主题信息。
devicename
设备名称。
productid
产品 ID。
event
EV_ONLINE:上线。
EV_OFFLINE:下线。
reason
REASON_DEVICE_DISCONNECT:设备断连。
REASON_STATE_KICKED:服务端主动踢下线。
REASON_DEVICE_KICKED":设备端互踢下线。
REASON_KEEPALIVE_TIMEOUT":设备端超时断连。

重发机制

重发机制用于在消息转发过程中发生失败的情况下,进行再次重发以达到接收消息的目的,具体说明如下:
若消息转发失败,系统则会进行转发重试,重试按照1s、3s、10s的时间间隔依次进行,若三次重试均失败,则将消息丢弃掉。
若用户配置了“转发错误行为操作”,在三次重试失败后,将按“转发错误行为操作”的配置,再进行一次消息转发,如果仍失败,则将消息丢弃掉。