有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

简介

物联使能 API 是物联使能平台为帮助用户快速开发并高效托管物联网 SaaS 而提供的接口操作与云端服务,包括设备管理与控制、设备数据查询、数据模板查询等管理能力。用户可通过调用物联使能 API 来使用物联使能服务,支持的全部 API 请参见 物联使能 API 概览

调用方式

API URLhttps://iot.cloud.tencent.com/api/exploreropen/serviceapi。 其中公共参数有: Action,RequestId,AppKey,Signature,Timestamp,Nonce。具体说明如下:
Action:用于标识请求的方法名称。
RequestId:用于标识一个唯一请求,推荐使用 uuid 作为参数值,定位问题时建议提供该参数值。
AppKey:为 SaaS 的密钥。
Signature:为本次请求的签名,具体计算方法见本文下方示例。
Timestamp:为本次请求的 Unix 秒级时间戳。
Nonce:为随机正整数,用于和时间戳一起,防范 API 重放攻击。

签名算法

获取 SaaS 的 AppKey 和 AppSecret

在创建 SaaS 时,平台将会为用户生成对应的安全凭证。安全凭证包括 AppKey 和 AppSecret。AppKey 是用于标识 API 调用者身份,AppSecret 是用于加密签名字符串和服务器端验证签名字符串的密钥。用户应严格保管其AppSecret,避免泄露
具体获取步骤如下:
1. 登录 物联网开发平台控制台,选择已有项目进入项目详情页。
2. 选择左侧菜单物联使能 > SaaS 服务,单击新建按钮 创建 SaaS
3. 创建 SaaS 成功后,即可获取系统自动生成的 AppKey 与 AppSecret。

生成签名串

有了安全凭证 AppKey 和 AppSecret 后,即可生成签名串。下面给出一个生成签名串的详细过程。
假设用户的 AppKey 和 AppSecret 分别是:
AppKey: ServiceAppKey
AppSecret: ServiceAppSecret
说明
本文仅为示例,请您根据自己实际的 AppKeyAppSecret 进行后续操作。
以获取设备物模型数据 ServiceDescribeDeviceData 请求为例,当用户调用这一接口时,其请求参数可能如下:
参数名称
类型
描述
参考数值
RequestId
String
公共参数,唯一请求 ID,可自行生成,推荐使用 uuid。定位问题时,需要提供该次请求的 RequestId
476c990a-f5b7-1575-987c-4ef70e474932
Action
String
公共参数,调用的接口方法名称
ServiceDescribeDeviceData
AppKey
String
公共参数,物联网 SaaS 的 AppKey ,用于标识对应的物联网 SaaS
ServiceAppKey
Signature
String
公共参数,请求的签名
根据实际算法生成
Timestamp
Int64
公共参数,当前的 UNIX 时间戳(秒级)
1546315200
Nonce
Int64
公共参数,随机正整数,与时间戳一起,用于 API 防重放
71087795
ProductId
String
产品 ID
ProductA
DeviceName
String
设备名称
Device001
说明
请求参数中的公共请求参数有:RequestId、Action、AppKey、Timestamp、Nonce、Signature。ServiceDescribeDeviceData 接口特有参数:ProductId、DeviceName。
而参数 Signature(签名串)正是由上述参数共生成的,具体步骤如下:
1. 对参数排序 对所有请求参数按参数名做字典序升序排列,所谓字典序升序排列,直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增顺序的排列次序,即先考虑第一个 “字母”,在相同的情况下考虑第二个 “字母”,依此类推。您可以借助编程语言中的相关排序函数来实现这一功能,例如 PHP 中的 ksort 函数。上述示例参数的排序结果如下:
{
Action=ServiceDescribeDeviceData,
AppKey=ServiceAppKey,
DeviceName=Device001,
Nonce=71087795,
ProductId=ProductA,
RequestId=476c990a-f5b7-1575-987c-4ef70e474932,
Timestamp=1546315200
}
使用其它程序设计语言开发时, 可对上面示例中的参数进行排序,得到的结果一致即可。
2. 拼接请求字符串 将把上一步排序好的请求参数格式化成“参数名称” = “参数值”的形式,如对 Action 参数,其参数名称为 "Action",参数值为 "AppCreateCellphoneUser",因此格式化后就为 Action = AppCreateCellphoneUser。
“参数值” 为原始值而非 URL 编码后的值。
若输入参数中包含下划线,则需要将其转换为 “.”
将格式化后的各个参数用 "&" 拼接在一起,最终生成的请求字符串为:
Action=ServiceDescribeDeviceData&AppKey=ServiceAppKey&DeviceName=Device001&Nonce=71087795&ProductId=ProductA&RequestId=476c990a-f5b7-1575-987c-4ef70e474932&Timestamp=1546315200

3. 生成签名串 使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。 具体代码如下,以 PHP 语言为例:
$secretKey = 'ServiceAppSecret';
$srcStr = 'Action=ServiceDescribeDeviceData&AppKey=ServiceAppKey&DeviceName=Device001&Nonce=71087795&ProductId=ProductA&RequestId=476c990a-f5b7-1575-987c-4ef70e474932&Timestamp=1546315200';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));
echo $signStr

最终得到的签名串为:
P206d+JzP37FLKBDkD689wqnl4k=
使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。