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

简介

应用端 API 是开发平台为了满足智能家居场景,为用户开发自有品牌的小程序或 App 而提供的云端服务,用户无需实现用户管理、设备管理、设备定时、家庭管理等基础能力,可通过调用应用端 API 快速完成移动应用端的开发。

调用方式

1. 登录前所使用的 API URL 为 https://iot.cloud.tencent.com/api/exploreropen/appapi。 其中公共参数有:Action,RequestId,AppKey,Signature,Timestamp,Nonce。
Action 用于标识请求的方法名称。
RequestId 用于标识一个唯一请求,推荐使用 uuid 作为参数值,定位问题时建议提供该参数值。
AppKey 为应用的密钥。
Signature 为本次请求的签名,具体计算方法见本文下方示例。
Timestamp 为本次请求的 UNIX 秒级时间戳。
Nonce 为随机正整数,用于和时间戳一起,防范 API 重放攻击。
2. 登录后所使用的 API URL 为 https://iot.cloud.tencent.com/api/exploreropen/tokenapi。 其中公共参数有: Action,RequestId,AccessToken。
Action 用于标识请求的方法名称。
RequestId 用于标识一个唯一请求,推荐使用 uuid 作为参数值,定位问题时建议使用该参数值。
AccessToken 用于标识一个已经登录的用户。
说明:
调用应用端 API 接口前,需要先调用登录相关接口(应用端 API/用户管理),登录成功后得到 AccessToken
AccessToken用于标识一个用户。当用户登录成功后,再携带AccessToken调用其他应用端 API。
登录前调用 URL 后缀 为.../appapi、登录后调用 URL 后缀为.../tokenapi

签名算法

获取应用 AppKey 和 AppSecret

如果用户不使用腾讯官方的“腾讯连连”小程序,用户也可通过平台开放能力开发自有品牌小程序。在创建应用的时候,平台会为用户生成小程序对应的安全凭证。安全凭证包括 AppKey 和 AppSecret。AppKey 是用于标识 API 调用者身份,AppSecret 是用于加密签名字符串和服务器端验证签名字符串的密钥。
注意:
用户应严格保管其 AppSecret,避免泄露
具体获取步骤如下:
1.1 登录 物联网开发平台控制台,进入开发中心。
1.2 选择左侧菜单应用开发 > 小程序开发,新建小程序,具体新建步骤参见 应用开发
1.3 创建小程序成功后,即可获取系统自动生成的 AppKey 与 AppSecret。

生成签名串

有了安全凭证 AppKey 和 AppSecret 后,就可以生成签名串了。下面给出了一个生成签名串的详细过程。
假设用户的 AppKey 和 AppSecret 分别是:
AppKey: ahPxdK****TGrejd
AppSecret: NcbHqk****TCGbKnQH
说明:
本文仅为示例,请您根据自己实际的 AppKeyAppSecret 进行后续操作。
以通过手机号注册账号 AppCreateCellphoneUser 请求为例,当用户调用这一接口时,其请求参数可能如下:
参数名称
类型
描述
参考数值
RequestId
String
公共参数,唯一请求 ID,可自行生成,推荐使用 uuid。定位问题时,需要提供该次请求的 RequestId。
8b8d499bbba1ac28b6da21b4
Action
String
公共参数,调用的接口方法名称。
AppCreateCellphoneUser
AppKey
String
公共参数,应用 AppKey ,用于标识对应的 App。
ahPxdK****TGrejd
Signature
String
公共参数,请求的签名。
Szxai9Qs7****OXahbFbseZ+uE=
Timestamp
Int64
公共参数,当前的 UNIX 时间戳(秒级)。
1546315200
Nonce
Int
公共参数,随机正整数,与时间戳一起,用于 API 防重放。
71087795
CountryCode
String
国家区码。
86
PhoneNumber
String
手机号码。
13900000000
Password
String
密码。
password
VerificationCode
String
短信验证码。
123456
说明:
请求参数中的公共请求参数有:RequestId、Action、AppKey、Timestamp、Nonce、Signature。
AppCreateCellphoneUser 接口特有参数:CountryCode、PhoneNumber、Password、VerificationCode。
而参数 Signature(签名串)正是由上述参数共生成的,具体步骤如下:
1. 对参数排序。 对所有请求参数按参数名做字典序升序排列,所谓字典序升序排列,直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增顺序的排列次序,即先考虑第一个“字母”,在相同的情况下考虑第二个 “字母”,依此类推。您可以借助编程语言中的相关排序函数来实现这一功能,例如 PHP 中的 ksort 函数。上述示例参数的排序结果如下:
{
Action=AppCreateCellphoneUser,
AppKey=ahPxdK****TGrejd,
CountryCode=86,
Nonce=71087795,
Password=My!P@ssword,
PhoneNumber=13900000000,
RequestId=8b8d499bbba1ac28b6da21b4,
Timestamp=1546315200,
VerificationCode=123456
}
使用其它程序设计语言开发时, 可对上面示例中的参数进行排序,得到的结果一致即可。
2. 拼接请求字符串。 将把上一步排序好的请求参数格式化成“参数名称” = “参数值”的形式,例如对 Action 参数,其参数名称为 "Action",参数值为 "AppCreateCellphoneUser",因此格式化后就为 Action=AppCreateCellphoneUser。
“参数值”为原始值而非 URL 编码后的值。
若输入参数中的“键”包含下划线,则需要将其转换为 “.”。对于“值”不需要额外操作。
将格式化后的各个参数用"&"拼接在一起,最终生成的请求字符串为:
Action=AppCreateCellphoneUser&AppKey=ahPxdK****TGrejd&CountryCode=86&Nonce=71087795&Password=My!P@ssword &PhoneNumber=13900000000&RequestId=8b8d499bbba1ac28b6da21b4&Timestamp=1546315200&VerificationCode=123456
3. 生成签名串。 使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。 具体代码如下,以 PHP 语言为例:
$secretKey = 'NcbHqk****TCGbKnQH';
$srcStr = 'Action=AppCreateCellphoneUser&AppKey=ahPxdK****TGrejd&CountryCode=86&Nonce=71087795&Password=My!P@ssword&PhoneNumber=13900000000&RequestId=8b8d499bbba1ac28b6da21b4&Timestamp=1546315200&VerificationCode=123456';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));
echo $signStr
最终得到的签名串为:
Szxai9Qs7O3lBoOXahbFbseZ+uE=
使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。

常见问题

对于参数为字符串且为空的,应将其从签名串中省略,不需要将其参与签名。

调试工具

使用应用端 API 调试工具,快速调试应用端 API。


http://www.vxiaotou.com