[TOC]
# 微瓴应用API
# 1. API概述
Hi,您好,欢迎使用腾讯微瓴开放平台服务。
本文档主要介绍腾讯微瓴开放平台API快速使用流程,如果您对文档内容有任何疑问,可以通过以下方式联系我们: 联系邮箱:welink@tencent.com
# 2. 使用流程
# 2.1 成为开发者
https://open.welink.qq.com (opens new window) 点击顶部导航栏右侧控制台或者底部快速入门-管理控制台,首次登录将会跳转到注册界面,完成企业资质注册即可进入控制台页面。
# 2.2 创建应用
在控制台页面,您可以在【应用管理】板块点击新增应用,填写应用的相关信息,自动生成应用AppID、AppKey和应用票据[将后台审核描述去掉,更改为“自动生成应用AppID、AppKey和应用票据”],完成应用的创建。
# 2.3 获取密钥
在您的应用创建成功之后,可以在应用调试或应用详情中查看此应用的接入凭证AppID和AppKey。这是您的应用接入微瓴的主要凭证,每个应用有唯一标识,互不相同,请您妥善保管。
# 2.4 生成签名
您的应用在调用微瓴API之前,首先需要获取接口鉴权的签名。您需要使用应用所分配的AppID和AppKey,参考签名Demo,生成API接口鉴权签名。
# 2.5 开始开发
腾讯微瓴开放了REST API形式的服务,您可以点击【开发资源-API文档】查看具体调用参数及方法。
# 3. 调用方式
# 3.1 服务地址
接口域名在开放平台正式app列表详情里,通过指定域名访问,在实际项目对应的环境中进行联调
- 目前支持的环境和域名列表为:
接入地域 | 环境类别 | 域名 |
---|---|---|
华南地区(广州) | 开放平台沙箱环境 | sandbox2api.welink.qq.com |
华南地区(广州) | 公有云环境 | api-gz.welink.qq.com |
# 3.2 通信协议
微瓴开放平台提供的所有API接口均通过HTTPS协议传输,提供高安全性的通讯。
# 3.3 请求方法
微瓴支持的 HTTP 请求方法:
- POST(推荐)
- GET
POST 请求支持的 Content-Type 类型:
- application/json(推荐),必须使用 HMAC-SHA1 签名方法。
- GET 请求的请求包大小不得超过 32 KB。
- POST 请求使用签名方法为 HMAC-SHA1时不得超过 1 MB。
# 3.4 字符编码
- 均使用UTF-8编码。
# 3.5 公共参数
- 公共参数是用于标识接口鉴权的参数,每次请求均需要携带这些参数,才能正常发起请求
参数 | 参数描述 |
---|---|
appid | 应用接入微瓴的唯一标识App ID,新增应用通过后系统自动生成 |
app_ticket | 用于登录API的应用票据,app_ticket有时间期限,由管理员决定app_ticket的期限,推荐3个月,请注意及时更新票据 |
sig | 加密的密文,用于登录API使用,生成方式见生成签名 |
token | 动态密钥,20分钟有效期,每一次调用API均需要带上该密钥 |
iotim_ticket | 物联票据,每一次调用API均需要带上该票据 |
# 4. 签名机制
# 4.1 签名机制简介
微瓴开放平台HTTP API使用签名机制来验证请求的合法性。应用在调用微瓴API时必须带上接口请求签名,其中签名信息由接口请求参数和应用密钥根据本文提供的HMAC-SHA1算法生成,使用Base64编码。对于校验不通过的请求,API将拒绝处理,并返回鉴权失败错误。
# 4.2 获取应用密钥
登录微瓴开放平台,进入控制台-应用管理页面,如您未创建应用,可通过新增应用功能创建应用,获取AppID和AppKey。
# 4.3 签名生成样例
获取到AppID和AppKey之后,您需要自行实现生成签名的功能。签名的生成推荐使用我们提供的各语言Demo。具体样例如下:
# 4.3.1 JAVA签名示例
private static String encrypt(String appKey,long timeStamp,long randomNum){
byte[] k = appKey.getBytes();
byte[] t = getBytesByLong(timeStamp);
byte[] n = getBytesByLong(randomNum);
byte[] np = new byte[k.length+t.length+n.length];
int i=0;
for(int j=0;j<k.length;j++,i++){
np[i]=k[j];
}
for(int j=0;j<t.length;j++,i++){
np[i]=t[j];
}
for(int j=0;j<n.length;j++,i++){
np[i]=n[j];
}
String sha1 = getSHA1(np);
return sha1;
}
private static byte[] getBytesByLong(long data){
byte[] bytes = new byte[8];
bytes[0] = (byte) (data & 0xff);
bytes[1] = (byte) ((data >> 8) & 0xff);
bytes[2] = (byte) ((data >> 16) & 0xff);
bytes[3] = (byte) ((data >> 24) & 0xff);
bytes[4] = (byte) ((data >> 32) & 0xff);
bytes[5] = (byte) ((data >> 40) & 0xff);
bytes[6] = (byte) ((data >> 48) & 0xff);
bytes[7] = (byte) ((data >> 56) & 0xff);
return bytes;
}
private static String getSHA1(byte[] str) {
String sha1 = "";
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(str);
byte[] messageDigest = digest.digest();
StringBuilder hexString = new StringBuilder();
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
sha1 = hexString.toString();
} catch (Exception e) {
e.printStackTrace();
}
return sha1.toUpperCase();
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 4.3.2 Python签名示例
import time
import struct
import hashlib
timeStamp = str(int(round(time.time() * 1000)))
#timeStamp = '1494502392528'
randomNum = '4561615'
appKey = '************'
#12sqq 中的 12s 表示KEYS的长度为12
signature_str = struct.pack('=12sqq',appKey,long(timeStamp),long(randomNum))
signature = hashlib.sha1(signature_str).hexdigest()
2
3
4
5
6
7
8
9
10
11
12
# 4.3.3 PHP签名示例
$appKey='testtesttesttest1';
$timeStamp = 1479693497852;
$randomNum = 4516316;
var_dump(encrypt($appKey,$timeStamp,$randomNum));
function encrypt($appKey,$timeStamp, $randomNum){
$k = getBytes($appKey);
$t = getBytesByLong($timeStamp);
$n = getBytesByLong($randomNum);
$np = array();
$i=0;
for($j=0;$j<count($k);$j++,$i++){
$np[$i]=$k[$j];
}
for($j=0;$j<count($t);$j++,$i++){
$np[$i]=$t[$j];
}
for($j=0;$j<count($n);$j++,$i++){
$np[$i]=$n[$j];
}
//var_dump($np);
$sha1 = sha1(toStr($np));
return $sha1;
}
function toStr($bytes) {
$str = '';
foreach($bytes as $ch) {
$str .= chr($ch);
}
return $str;
}
/**
* 转换一个String字符串为byte数组
* @param $str 需要转换的字符串
* @param $bytes 目标byte数组
* @author weling
*/
function getBytes($string) {
$bytes = array();
for($i = 0; $i < strlen($string); $i++){
$bytes[] = ord($string[$i]);
}
return $bytes;
}
/**
* 转换一个long为byte数组
* @param $byt 目标byte数组
* @param $val 需要转换的字符串
*/
function getBytesBylong($val) {
if(PHP_INT_SIZE == 4) { //整型为 32 位
$byt = array();
$byt[0] = ($val & 0xff);
$byt[1] = ($val >> 8 & 0xff);
$byt[2] = ($val >> 16 & 0xff);
$byt[3] = ($val >> 24 & 0xff);
if($val > PHP_INT_MAX) {
$high = intval($val / 4294967296);
$byt[4] = ($high & 0xff);
$byt[5] = ($high >> 8 & 0xff);
$byt[6] = ($high >> 16 & 0xff);
$byt[7] = ($high >> 24 & 0xff);
} else {
$byt[4] = $byt[5] = $byt[6] = $byt[7] = 0;
}
return $byt;
} else { //整型为 64 位
$byt = array();
$byt[0] = ($val & 0xff);
$byt[1] = ($val >> 8 & 0xff);
$byt[2] = ($val >> 16 & 0xff);
$byt[3] = ($val >> 24 & 0xff);
$byt[4] = ($val >> 32 & 0xff);
$byt[5] = ($val >> 40 & 0xff);
$byt[6] = ($val >> 48 & 0xff);
$byt[7] = ($val >> 56 & 0xff);
return $byt;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 4.3.4 NodeJS签名示例
// if not browser env, then require node.js's util. otherwise just use window's
const TextEncoder = (typeof window === 'undefined') ? require('util').TextEncoder : window.TextEncoder
const crypto = require('crypto')
const encryptSig = function (appKey, timeStamp, randomNum) {
let keyBytes = getBytesByStr(appKey)
let timestampBytes = getBytesByInt64LE(timeStamp)
let numberBytes = getBytesByInt64LE(randomNum)
let concatBuffer = new Uint8Array(keyBytes.length + 16)
concatBuffer.set(keyBytes)
concatBuffer.set(timestampBytes, keyBytes.length)
concatBuffer.set(numberBytes, keyBytes.length + 8)
let sha1 = crypto.createHash('SHA1')
sha1.update(concatBuffer)
let sigResult = sha1.digest('hex')
return sigResult
}
const getBytesByStr = function (str) {
// always utf-8
let encoder = new TextEncoder()
let strBuffer = encoder.encode(appKey)
return strBuffer
}
const getBytesByInt64LE = function (number) {
let w = 4294967296
let high = ((number / w) & 0xffffffff)
let low = number % w
// transfer to LE
let numberLEArray = new Uint8Array(8)
numberLEArray[0] = low & 0xff
numberLEArray[1] = low >> 8 & 0xff
numberLEArray[2] = low >> 16 & 0xff
numberLEArray[3] = low >> 24 & 0xff
numberLEArray[4] = high & 0xff
numberLEArray[5] = high >> 8 & 0xff
numberLEArray[6] = high >> 16 & 0xff
numberLEArray[7] = high >> 24 & 0xff
return numberLEArray
}
let loginTimestamp = new Date().getTime()
let loginNum = Math.round(Math.random() * 100000)
let appKey = '********' // change it to your own app key
let sig = encryptSig(appKey, loginTimestamp, loginNum)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# 4.3.5 Golang签名示例
func TestUnit_login(T *testing.T){
appId:=""
app_ticket:=""
app_key:=""
time:=time.Now().UnixNano() / int64(time.Millisecond)
sig:=encrypt(app_key,time,1)
url,_:=url.Parse("https://domain.welink.qq.com")
url.Path="/common/ticket/loginByApp"
params:=url.Query()
params.Add("appid",appId)
params.Add("time",strconv.FormatInt(time,10))
params.Add("num",strconv.Itoa(1))
params.Add("sig",sig)
params.Add("app_ticket",app_ticket)
url.RawQuery=params.Encode()
resp,_:=http.Get(url.String())
bytes,_:=ioutil.ReadAll(resp.Body)
fmt.Printf("resp:%s",string(bytes))
}
func encrypt( key string , times int64, num int64)string{
if len(key)<=0 {
return ""
}
k:= []byte(key)
var buffer bytes.Buffer
buffer.Write(k)
buffer.Write(intToByte(times))
buffer.Write(intToByte(num))
h:=sha1.New()
h.Write(buffer.Bytes())
bs:=h.Sum(nil)
sig:=hex.EncodeToString(bs)
return strings.ToUpper(sig);
}
func intToByte(n int64 )([]byte){
result:=make([]byte,8)
result[0]= byte(int8(n))
result[1]= byte(int8(n >> 8))
result[2]= byte(int8(n >> 16))
result[3]= byte(int8(n >> 24))
result[4]=byte(int8(n >> 32))
result[5]=byte(int8(n >> 40))
result[6]=byte(int8(n >> 48))
result[7]=byte(int8(n >> 56))
return result
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 4.3.5 C#签名示例
using System.Security.Cryptography;
using System.Linq;
public class Test
{
public static void Main()
{
string key = "KgoucKqD6eRj";
long times = 1599710713383;
long num = 335;
Console.WriteLine(HMAC1(key,times,num));
}
//sha1加密
public static string HMAC1(string key, long times, long num)
{
byte[] byte1 = System.Text.Encoding.UTF8.GetBytes(key);
byte[] byte2 = BitConverter.GetBytes(times);
byte[] byte3 = BitConverter.GetBytes(num);
byte[] ndata = new byte[byte1.Length + byte2.Length + byte3.Length];
byte1.CopyTo(ndata, 0);
byte2.CopyTo(ndata, byte1.Length);
byte3.CopyTo(ndata, byte1.Length+byte2.Length);
//建立SHA1对象
SHA1 sha = new SHA1CryptoServiceProvider();
byte[] result = sha.ComputeHash(ndata);
string hashValue = result.Aggregate("", (s, e) => s + String.Format("{0:x2}", e), s => s);
return hashValue.ToUpper();
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 5. 接口鉴权
# 5.1 使用用户信息登录(邮箱/QQ/微信账号登录)
- 请求url:
/common/ticket/loginByUser
- 请求方式:
get
- 描述: 用于获取token和iotim_ticket。适用于先登录过微瓴开放平台,已经有用户登录态的情况。例如从微瓴开放平台拉起客户端,从session中获取用户登录信息,然后使用该接口调用API获取动态密钥token和物联票据iotim_ticket。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
appid | Long | Yes | 应用系统的appid,新增应用后系统自动生成 |
time | Long | 是 | 当前时间戳,需要和生成sig的time保持一致 |
num | Long | 是 | 加密时的正随机数 |
sig | String | 是 | 用于鉴权的密文,生成方式见签名生成样例 |
loginKey | String | 是 | cookie中mvs_unified_login_token_key字段的值。支持QQ、微信、邮箱账号登录。 |
projectId | String | 是 | 项目id,由系统自动分配 |
- 请求示例:
/common/ticket/loginByUser
?appid=10000
&time=1494765993240
&num=1518
&sig=*****************************
&loginKey=************************************
2
3
4
5
6
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
token | String | 动态密钥,20分钟过期 |
iotim_ticket | String | 物联票据 |
- 返回格式:
{
"code": 0,
"data": {
"iotim_ticket": "*****************",
"token": "******************"
},
"message": "OK"
}
2
3
4
5
6
7
8
# 5.2 使用后台方式登录
- 请求url:
/common/ticket/loginByApp
- 请求方式:
get
- 描述: 用于获取token和iotim_ticket。适用于不关注用户信息,通过后台方式获取调用API的访问权限的场景。开发者可以使用开放平台分配的app_ticket通过该接口获取动态密钥token和物联票据iotim_ticket。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
appid | Long | 是 | 应用系统的App ID,由系统自动分配 |
time | Long | 是 | 当前时间戳,需要和生成sig的time保持一致 |
num | Long | 是 | 加密时的正随机数 |
sig | String | 是 | 用于鉴权的密文,生成方式见签名生成样例 |
app_ticket | String | 是 | 开放平台分配的票据,用于登录鉴权 |
projectId | String | 是 | 项目id,由系统自动分配 |
- 请求示例:
/common/ticket/loginByApp
?time=1520231107761
&num=1
&sig=*****************************
&appid=*****
&app_ticket=*******************************************
2
3
4
5
6
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
token | String | 动态密钥,20分钟过期 |
iotim_ticket | String | 物联票据 |
- 返回格式:
{
"code": 0,
"data": {
"iotim_ticket":
"*******************************************************",
"token":
"*******************************************************"
},
"message": "OK"
}
2
3
4
5
6
7
8
9
10
# 6. 设备管理
# 6.1 获取设备列表
- 请求url:
/common/device/getDeviceList
- 请求方式:
get
- 描述: 根据条件查询设备列表信息,设备需绑定到应用
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
num | Integer | 是 | 分页参数:每页记录数,最大返回100 |
page | Integer | 是 | 分页参数:当前页码 |
pid | Long | 否 | 查询条件:设备所属的产品的id |
sn | String | 否 | 查询条件:设备序列号 |
wId | String | 否 | 查询条件:设备在微瓴的唯一标志 |
parent_wId | String | 否 | 查询条件:父设备 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/device/getDeviceList?page=1
&num=999
&token=***************
&iotim_ticket=*********************
2
3
4
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
totalpage | Integer | 总页数 |
totalrow | Integer | 总数量 |
list | JsonArray | 设备详细信息列表 |
wId | String | 子设备在微瓴的唯一标志 |
product_id | Integer | 设备所属产品id |
project_id | Integer | 项目ID |
position | String | 设备位置信息 |
device_status | String | 设备在线状态,online-在线,offline-离线 |
isLive | boolean | 推流状态(仅摄像机有该状态) |
device_name | String | 设备名称 |
device_nick | String | 设备昵称 |
device_type | Integer | 设备类型编码 |
dt_name | String | 设备类型名称 |
sn | String | 设备序列号 |
point_name | String | 设备点位名称 |
coordinate | String | 设备坐标点,格式(x,y,z) |
parent_wId | String | 父设备在微瓴的唯一标志 |
din | String | 子设备在微瓴的唯一标志(旧标识,推荐使用wId) |
parent_din | String | 父设备在微瓴的唯一标志(旧标识,推荐使用parent_wId) |
ota_version | String | 设备当前上报的ota版本 |
- 返回格式:
{
"code":0,
"data":{
"totalpage":1,
"totalrow":4,
"list":[
{
"device_status":"offline",
"coordinate":"",
"din":"300000000000043491",
"device_nick":"11dsadsdasfasf3",
"device_type":49,
"point_name":"",
"poi_code":"w0903001",
"device_name":"11dsadsdasfasf3",
"parent_wId":"de415023-5fa8-4cdb-adb1-2172f0d6b2b5",
"wId":"c9dca342-5640-4509-8d10-5ce42c4ae5a9",
"project_id":137,
"dt_name":"空气净化器",
"product_id":1700006776,
"parent_din":"300000000000043333",
"sn":"11dsadsdasfasf3",
"position":"",
"ota_version":"1.1.1"
},
{
"device_status":"offline",
"coordinate":"",
"din":"300000000000043490",
"device_nick":"1asfasasfas12",
"device_type":49,
"point_name":"",
"poi_code":"w0903001",
"device_name":"1asfasasfas12",
"parent_wId":"de415023-5fa8-4cdb-adb1-2172f0d6b2b5",
"wId":"7c2e46f3-898d-447d-9170-d5682f20506a",
"project_id":137,
"dt_name":"空气净化器",
"product_id":1700006776,
"parent_din":"300000000000043333",
"sn":"1asfasasfas12",
"position":"海阔天空大厦_F3_1asfasasfas12",
"ota_version":"1.1.1"
},
{
"device_status":"offline",
"coordinate":"",
"din":"300000000000043489",
"device_nick":"111dsafasgah",
"device_type":49,
"point_name":"",
"poi_code":"w0903001",
"device_name":"111dsafasgah",
"parent_wId":"de415023-5fa8-4cdb-adb1-2172f0d6b2b5",
"wId":"70b62a97-2dce-44e4-beea-94d1b62c4663",
"project_id":137,
"dt_name":"空气净化器",
"product_id":1700006776,
"parent_din":"300000000000043333",
"sn":"111dsafasgah",
"position":"海阔天空大厦_F2_111dsafasgah",
"ota_version":"1.1.1"
},
{
"device_status":"offline",
"coordinate":"",
"din":"300000000000043488",
"device_nick":"99fsghfdjs3",
"device_type":49,
"point_name":"",
"poi_code":"w0903001",
"device_name":"99fsghfdjs3",
"parent_wId":"de415023-5fa8-4cdb-adb1-2172f0d6b2b5",
"wId":"5cad83dd-4fd0-4cb8-89fc-d8931390a22a",
"project_id":137,
"dt_name":"空气净化器",
"product_id":1700006776,
"parent_din":"300000000000043333",
"sn":"99fsghfdjs3",
"position":"海阔天空大厦_F1_99fsghfdjs3",
"ota_version":"1.1.1"
}
]
},
"message":"OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 6.2 更换设备接口
请求url:
/common/device/replaceDevices
请求方式:POST
参数列表:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
token | String | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 鉴权参数:登录获取的物联票据 |
projectId | Integer | 项目Id,不能为空, |
oldDeviceWId | String | 被替换设备wid, 与 oldDeviceDin不能同时为空,优先以oldDeviceWId设备信息为准。 |
oldDeviceDin | String | 被替换设备din,与 oldDeviceWId 不能同时为空,如果同时不为空,则优先以oldDeviceWId设备信息为准。 |
newWId | String | 新设备WId,与 newProductId+newSN 不能同时为空,如果同时不为空,则优先以newWId设备为准。 |
newProductId | String | 新设备productId,如果newWId不为空,则优先以newWId为准,如果newWId为空,则newProductId+newSN不能为空 |
newDeviceSN | String | 新设备SN,如果newWId不为空,则优先以newWId为准;如果newWId为空,则newProductId+newDeviceSN不能为空 |
newDeviceName | String | 新设备名称 |
isCopyOldDeviceHistory | String | 可以为空,是否继承原有设备的历史数据 ,true ,继承,false 不继承。默认为false |
说明: 替换的新设备需要在微瓴平台放号后才可以允许替换
- 请求示例:
/common/device/replaceDevices?
iotim_ticket=****************************
&token=***********************************
a.headers: Content-Type: application/json
b.body: {"projectId":11111118,"deviceInfo":[{"oldDeviceWId":"","oldDeviceDin":"","newDeviceName":"testDeviceName","newDeviceWId":"","newDeviceProductId":"","newDeviceSN":"","isCopyOldDeviceHistory":true}]}
2
3
4
5
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 返回码 |
message | String | 返回信息提示 |
upateResult | Number | 替换结果,0标识替换成功,-1表示替换失败 |
data | Json | 返回内容消息体 |
- 例如:
{
"code":0,
"message":"success",
"data":[
"projectId":11111118,
"deviceInfo":[
{
"oldDeviceWId":"",
"oldDeviceDin":"",
"newDeviceName":"testDeviceName",
"newDeviceWId":"",
"newDeviceProductId":"",
"newDeviceSN":"",
"upateResult":0
},
{
"oldDeviceWId":"",
"oldDeviceDin":"",
"newDeviceName":"testDeviceName2"
"newDeviceWId":"",
"newDeviceProductId":"",
"newDeviceSN":"",
"upateResult":-1
}
]
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 6.3 设备导入接口
请求url:
/common/open/device/import
请求方式:
POST application/json
描述:把设备导入到指定项目中
请求参数:
字段名称 字段类型 是否必须 字段描述 token String 是 鉴权参数:登录获取的动态密钥,拼接在url,body不需要携带 iotim_ticket String 是 鉴权参数:登录获取的物联票据,拼接在url,body不需要携带 productId String 是 产品Id sn String 是 设备sn,仅支持单个导入 parentDin String 否 父设备din号 填入则为子设备 不填入则是直连设备 locationId String 否 位置id 填入则对位置信息进行校验 从数字空间获取 请求示例:
/common/open/device/import?
iotim_ticket=****************************
&token=***********************************
a.headers: Content-Type: application/json
b.body: {"productId":"1700006187","locationId":"5c479e94-938f-11eb-8dc4-badd26213509","parentDin":"200900000000014359","sn":"IMPORT00024"}
2
3
4
5
返回参数:
字段名称 字段类型 描述 message string 导入返回信息 code Int 返回码 data JSONObject 导入结果 successList JSONArray 成功导入的设备列表 failList JSONArray 导入失败的设备列表 返回示例:
{
"code": 0,
"data": {
"successList": [{
"floorId": "ca6688d7-e273-4ed9-b9ba-46c373fd754b",
"result": true,
"msg": "success",
"productId": "1700006187",
"locationId": "5c479e94-938f-11eb-8dc4-badd26213509",
"location": "RM107",
"sn": "IMPORT00024",
"floor": "F1",
"building": "IDC机房",
"buildingId": "ecf67fa2-9337-4cb1-bf0f-bacfc4c99417"
}],
"failList": []
},
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 6.4 设备绑定接口
请求url:
/common/open/device/bind
请求方式:
POST application/json
描述:批量把设备和应用进行绑定
请求参数:
字段名称 字段类型 是否必须 字段描述 token String 是 鉴权参数:登录获取的动态密钥,拼接在url,body不需要携带 iotim_ticket String 是 鉴权参数:登录获取的物联票据,拼接在url,body不需要携带 dins String 是 设备绑定din, 多个设备用逗号分隔 appIds String 是 绑定项目下的应用id, 多个应用用逗号进行分割 请求示例:
/common/open/device/bind?
iotim_ticket=****************************
&token=***********************************
a.headers: Content-Type: application/json
b.body: {"appIds":"20005","dins":"200900000000014359,200900000000014360"}
2
3
4
5
返回参数:
字段名称 字段类型 字段描述 code Int 返回码 message String 返回信息提示 返回示例:
{
"code": 0,
"message": "OK"
}
2
3
4
# 6.5 设备移除接口
请求url:
/common/open/device/remove
请求方式:
POST application/json
描述:批量把设备从项目中移除,并解除设备已绑定的应用关系
请求参数:
字段名称 字段类型 是否必须 字段描述 token String 是 鉴权参数:登录获取的动态密钥,拼接在url,body不需要携带 iotim_ticket String 是 鉴权参数:登录获取的物联票据,拼接在url,body不需要携带 dins string 是 设备绑定din, 多个设备用逗号分隔 请求示例:
/common/open/device/remove?
iotim_ticket=****************************
&token=***********************************
a.headers: Content-Type: application/json
b.body: {"dins":"200900000000014359,200900000000014360"}
2
3
4
5
返回参数:
字段名称 字段类型 字段描述 code Int 返回码 message String 返回信息提示 返回示例:
{
"code": 0,
"message": "OK"
}
2
3
4
# 6.6 设备ota升级推送
请求url:
/common/open/device/upgrade
请求方式:
POST application/json
描述:为设备推送指定版本的ota升级包
请求参数:
字段名称 字段类型 是否必须 字段描述 token String 是 鉴权参数:登录获取的动态密钥,拼接在url,body不需要携带 iotim_ticket String 是 鉴权参数:登录获取的物联票据,拼接在url,body不需要携带 dins String[] 是 设备唯一标识,String数组 productId String 是 设备的产品Id otaVersion String 是 设备产品的ota版本号 请求示例:
/common/open/device/upgrade?
iotim_ticket=****************************
&token=***********************************
a.headers: Content-Type: application/json
b.body: {
"dins":["200900000000014359,200900000000014360"],
"productId": 1700006208,
"otaVersion": "1.1.1",
}
2
3
4
5
6
7
8
9
# 6.7 设备和应用绑定列表
请求url:
common/device/getDeviceAndAppList
请求方式:
GET
描述:通过接口查询应用权限下的设备与各应用之间的关系。
请求参数:
字段名称 字段类型 是否必须 字段描述 token String 是 鉴权参数:登录获取的动态密钥,拼接在url,body不需要携带 iotim_ticket String 是 鉴权参数:登录获取的物联票据,拼接在url,body不需要携带 num Int 是 分页参数:每页记录数,最大返回1000 page Int 是 分页参数:当前页码 wId String 否 设备编号,支持模糊查询 appId String 否 应用编号,支持模糊查询 请求示例:
common/device/getDeviceAndAppList?token=*******&iotim_ticket=***********&page=1&num=999&appId=20010
返回参数:
字段名称 字段类型 字段描述 code Int 错误码,0表示成功,其他见错误码说明 message String 执行结果消息 data Json 查询结果 totalRow int 总数量 totalPage int 总页数 pageNumber int 当前页码 pageSize int 每页数量 list array 产品列表,Json数组 wId String 产品编号 appIds array 应用编号,String数组 返回示例:
{
"code":0,
"data":{
"totalRow":28805,
"totalPage":14403,
"pageNumber":1,
"pageSize":2,
"list":[
{
"wId":"87074b1f-aca9-4de4-a826-2f8a1f80eb6e",
"appIds":[
"20010",
"20011"
]
},
{
"wId":"ecafca98-d66f-4c41-944d-09abd9ef509e",
"appIds":[
"20010"
]
}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 6.8 添加设备状态的统计维度
请求url:
/common/open/device/addDeviceStatisticsDim
请求方式:
POST application/json
描述:
添加项目下需要统计哪些层级的设备状态数据,添加后需要10分钟才会生效。调用接口 6.9 获取设备状态的统计记录 (opens new window) 获取项目下的设备状态统计结果。
单个项目下只允许有一种统计维度,如果单个项目添加多个统计维度,以最后一次提交的为准。
dimensions 配置规则:
- a: 参照开放平台文档poiId描述 (opens new window),建筑的维度为level=6,楼层的维度为level=7,房间的维度为level=8;
- b: dimensions 为4字节32位的Int值,将对应的比特位设置为1表示需要统计该维度的数据; 例如:对于项目11111171,需要统计建筑【level6】- 楼层【level7】维度的设备状态,那么将dimensions的第6,7位置为1,也就是 dimensions=1100 0000。
- 参照表:
Dimension值 层级名 值 0000 1100 0000 建筑+楼层 192 0000 0100 0000 建筑 64 0001 0100 0000 建筑+房间 320 0001 0000 0000 房间 256 0001 1000 0000 楼层+房间 384 0000 1000 0000 楼层 128 0001 1100 0000 建筑+楼层+房间 448
请求参数:
字段名称 字段类型 是否必须 字段描述 token String 是 鉴权参数:登录获取的动态密钥,拼接在url,body不需要携带 iotim_ticket String 是 鉴权参数:登录获取的物联票据,拼接在url,body不需要携带 projectId String 是 项目编号 show_device_type Boolean 是 是否统计设备类型维度,默认为 true dimensions Int 是 统计维度,将对应的比特位设置为1即可,例如统计建筑维度(level6,则为0100 0000=64)。需要传入十进制 请求示例: 统计项目11111171的建筑层级的设备状态,dimensions = 64 (0100 0000)
/common/device/addDeviceStatisticsDim?token=******&iotim_ticket=*****************&projectId=11111171
a.请求头:Content-Type:application/json
b.请求包体:
{
"dimensions": 64,
"show_device_type": true
}
2
3
4
5
6
7
返回参数:
字段名称 字段类型 字段描述 code Int 返回码,0表示成功,其他见错误码说明 message String 执行结果消息 返回示例:
{
"code": 0,
"message": "OK"
}
2
3
4
# 6.9 获取设备状态的统计记录
请求url:
/common/open/device/getDeviceStatus
请求方式:
GET
描述:
- 获取项目下指定建筑|指定楼层|指定房间|指定设备类型的状态(汇总数,在线数,离线数,故障数)。若是第一次获取指定项目下的设备状态统计,需要调用接口 6.8 添加设备状态的统计维度 (opens new window) 进行指定项目的配置
- POIID 地理层级关系图 (opens new window)
请求参数:
字段名称 字段类型 是否必须 字段描述 token String 是 鉴权参数:登录获取的动态密钥,拼接在url,body不需要携带 iotim_ticket String 是 鉴权参数:登录获取的物联票据,拼接在url,body不需要携带 projectId String 是 项目编号 level Int 是 所属地理层级,"0"表示查询项目下的设备状态 poiIds String 否 需要查询的poiId,多个以,分隔(为空表示查询所有,返回该项目下该level的设备状态的统计结果) poiCodes String 否 需要查询的poiCode,多个以,分隔,为空表示查询所有
说明: 当level=0的时候,表示查询项目下的设备状态,不包含位置信息。此时poiIds字段的内容不会作为筛选条件,poiCodes仍可作为筛选条件进行查询指定的设备类型。
- 返回参数:
字段名称 | 字段类型 | 字段描述 | ||||
---|---|---|---|---|---|---|
code | Int | 返回码,0表示成功,其他见错误码说明 | ||||
message | String | 执行结果消息 | ||||
data | JSON | 查询结果 | ||||
projectId | String | 项目ID | ||||
total | Int | 汇总数 | ||||
onlineSum | Int | 离线数 | ||||
offlineSum | Int | 离线数 | ||||
faultSum | Int | 故障数 | ||||
poiCodeListOverview | JSON | 设备类型概览列表 | ||||
poiCode | String | 设备类型值 | ||||
name | String | 设备类型名称 | ||||
total | Int | 汇总数 | ||||
offline | Int | 离线数 | ||||
online | Int | 在线数 | ||||
fault | Int | 故障数 | ||||
levelList | JSON | 层级列表,当poiIds只有一个查询条件时,不显示此项 | ||||
id | String | 层级id | ||||
total | Int | 汇总数 | ||||
offlineSum | Int | 离线数 | ||||
onlineSum | Int | 在线数 | ||||
faultSum | Int | 故障数 | ||||
poiCodeList | JSON | 设备类型列表 | ||||
poiCode | String | 设备类型值 | ||||
name | String | 设备类型名称 | ||||
total | Int | 汇总数 | ||||
offline | Int | 离线数 | ||||
online | Int | 在线数 | ||||
fault | Int | 故障数 |
- 请求示例1:
/common/open/device/getDeviceStatus?token=******&iotim_ticket=*****************&projectId=11111171&level=8&poiIds=440305000003,440305000406&poiCodes="
- 返回示例1:
{
"code": 0,
"data": {
"projectId": "11111171",
"total": 13,
"onlineSum": 0,
"offlineSum": 12,
"faultSum": 1,
"poiCodeListOverview": [
{
"poiCode": "w0905001",
"name": "灯控面板",
"total": 1,
"online": 0,
"fault": 0,
"offline": 1
},
{
"poiCode": "w0107006",
"name": "照明网关",
"total": 2,
"online": 0,
"fault": 0,
"offline": 2
},
{
"poiCode": "w0701003",
"name": "半球摄像头",
"total": 3,
"online": 0,
"fault": 1,
"offline": 2
},
{
"poiCode": "w0701004",
"name": "快球摄像头",
"total": 5,
"online": 0,
"fault": 0,
"offline": 5
},
{
"poiCode": "w0713002",
"name": "优图盒子",
"total": 1,
"online": 0,
"fault": 0,
"offline": 1
},
{
"poiCode": "w0714001",
"name": "智能插座",
"total": 1,
"online": 0,
"fault": 0,
"offline": 1
}
],
"levelList": [
{
"id": "440305000003",
"total": 5,
"onlineSum": 0,
"offlineSum": 5,
"faultSum": 0,
"poiCodeList": [
{
"poiCode": "w0701004",
"name": "快球摄像头",
"total": 5,
"online": 0,
"fault": 0,
"offline": 5
}
]
},
{
"id": "440305000406",
"total": 8,
"onlineSum": 0,
"offlineSum": 7,
"faultSum": 1,
"poiCodeList": [
{
"poiCode": "w0714001",
"name": "智能插座",
"total": 1,
"online": 0,
"fault": 0,
"offline": 1
},
{
"poiCode": "w0905001",
"name": "灯控面板",
"total": 1,
"online": 0,
"fault": 0,
"offline": 1
},
{
"poiCode": "w0701003",
"name": "半球摄像头",
"total": 3,
"online": 0,
"fault": 1,
"offline": 2
},
{
"poiCode": "w0713002",
"name": "优图盒子",
"total": 1,
"online": 0,
"fault": 0,
"offline": 1
},
{
"poiCode": "w0107006",
"name": "照明网关",
"total": 2,
"online": 0,
"fault": 0,
"offline": 2
}
]
}
]
},
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
- 请求示例2:
/common/open/device/getDeviceStatus?token=******&iotim_ticket=*****************&projectId=11111171&level=0&poiIds=&poiCodes=w0901001,w0701010"
- 返回示例2:
{
"code": 0,
"data": {
"projectId": "11111171",
"total": 70,
"onlineSum": 3,
"offlineSum": 67,
"faultSum": 0,
"poiCodeListOverview": [
{
"poiCode": "w0901001",
"name": "机顶盒",
"total": 16,
"online": 0,
"fault": 0,
"offline": 16
},
{
"poiCode": "w0701010",
"name": "视频网关",
"total": 54,
"online": 3,
"fault": 0,
"offline": 51
}
]
},
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 7. 服务管理
# 7.1 调用第三方服务
- 请求url:
/common/logic/call
- 请求方式:
POST
- 描述: 应用通过该接口访问开放平台上发布的服务。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
service_id | Long | 是 | 访问的服务的id |
api_id | Long | 是 | 访问的服务下的某个api的id |
params | JsonArray | 否 | 服务的api的参数数组 |
name | String | 否 | 参数名 |
value | All | 否 | 参数值 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/logic/call?
service_id=*******************************
&api_id=**********************************
&iotim_ticket=****************************
&token=***********************************
&project_id=******************************
a.headers: Content-Type: application/json
b.body: {"params": [{"name":"a", "value":"a"},{"name":"b", "value":"2"}]}
2
3
4
5
6
7
8
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回格式:
{
"code": 0,
"message": "OK"
}
2
3
4
# 8. 帐号权限
# 8.1 获取当前用户信息
- 请求url:
/common/account/getCurrentUserInfo
- 请求方式:
get
- 描述: 获取当前登录用户的的信息,包括用户的角色列表
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/account/getCurrentUserInfo?
token=************************************
&iotim_ticket=****************************
&project_id=******************************
2
3
4
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
user_id | Integer | 用户id |
user_name | String | 用户名称 |
String | 用户邮箱 | |
user_expire_time | String | 用户账号授权过期时间,“永久授权”表示无过期时间 |
project_id | String | 项目id |
organizationlist | Json | 用户组织架构信息 |
organization | String | 用户所属组织架构,例如:top3-top2-top1-top2 |
detail | JsonArray | 每层组织架构详细信息 |
gmt_create_ | String | 该组织架构创建时间 |
parent_id | String | 该组织架构上层组织部架构id |
name | String | 该组织架构名称 |
id | String | 该组织架构id |
order_num | String | 该级别组织架构排序 |
gmt_modified | String | 该组织架构最后一次更新时间 |
rolelist | JsonArray | 用户角色信息 |
role_name | String | 用户角色名称 |
role_id | String | 用户角色id |
role_code | String | 用户角色代码 |
- 返回格式:
"code": 0,
"data": [
{
"project_id": "11111118",
"organizationlist": {
"organization": "",
"detail": [
]
},
"email": "935367253@qq.com",
"rolelist": [
{
"role_name": "fortestrole",
"role_id": "2042",
"role_code": "welink_1590049749780"
}
],
"user_id": "40845",
"用户自定义字段1": "用户自定义字段1的value",
"用户自定义字段2": "用户自定义字段2的value",
"用户自定义字段3": "用户自定义字段3的value",
"user_expire_time": "2023-06-29 23:59:59",
}
],
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 8.2 获取项目下告警处理人角色的用户列表
- 请求url:
/common/processor/processorList
- 请求方式:
get
- 描述: 获取项目下的用户列表(告警处理人角色)
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | Int | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
num | Int | 否 | 分页参数:每页记录数(分页参数为空不分页) |
page | Int | 否 | 分页参数:当前页码(分页参数为空不分页) |
String | 否 | 需要查询的用户邮箱(参数为空,默认查询全量) |
- 请求示例:
/common/processor/processorList?
token=************************************************************
&iotim_ticket=*********************************************************
&page=1
&num=10
&email=1234567@qq.com
2
3
4
5
6
- 返回参数:
返回参数 | 参数类型 | 参数说明 |
---|---|---|
code | Int | 错误码,0表示成功,其他看错误码说明 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
list | JsonArray | 用户列表 |
userName | String | 用户名称 |
String | 用户邮箱 | |
mobile | String | 用户手机号 |
createTime | String | 用户创建时间 |
apiRoles | List | 用户绑定应用角色信息(分配给应用的appid下的角色),json数组 |
- 返回示例:
{
"code": 0,
"data": {
"list": [
{
"userName": "用戶名",
"email":"12345678@qq.com",
"mobile": "12345678",
"createTime": 1562917573000,
"apiRoles": [
{
"roleName": "admin",
"roleCode": "admin",
"description": "应用管理员"
},
{
"roleName": "user",
"roleCode": "user",
"description": "应用普通用户"
}
]
},
{
"userName": "用戶名1",
"email":"123456781@qq.com",
"mobile": "123456781",
"createTime": 1562917573000,
"apiRoles": [
{
"roleName": "admin",
"roleCode": "admin",
"description": "应用管理员"
}
]
}
]
},
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 8.3 根据用户手机号查询用户信息
- 请求url:
/common/user/getUserInfoByMobile
- 请求方式:
post
- 描述: 根据用户手机号查询用户基本信息,包括用户有权限的项目列表,每个有权限项目的用户基本信息,角色信息,自定义字段信息,组织架构信息。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
projectId | String | 否 | 项目编号 |
String | 否 | 用户邮箱 | |
mobile | String | 是 | 用户手机号,需要区分国际区号,例如:86-xxxxxxxxxxx |
app_id | String | 是 | 应用id |
- 请求示例:
/common/user/getUserInfoByMobile?token=******&iotim_ticket=******
headers = {"Content-Type": "application/json"}
body = {
"mobile":"189······689",
"project_id":"137",
"app_id":"40719"
}
2
3
4
5
6
7
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
user_id | Integer | 用户id |
user_name | String | 用户名称 |
String | 用户邮箱 | |
user_expire_time | String | 用户账号授权过期时间,“永久授权”表示无过期时间 |
project_id | String | 项目id |
organizationlist | Json | 用户组织架构信息 |
organization | String | 用户所属组织架构,例如:top3-top2-top1-top2 |
detail | JsonArray | 每层组织架构详细信息 |
gmt_create_ | String | 该组织架构创建时间 |
parent_id | String | 该组织架构上层组织部架构id |
name | String | 该组织架构名称 |
id | String | 该组织架构id |
order_num | String | 该级别组织架构排序 |
gmt_modified | String | 该组织架构最后一次更新时间 |
rolelist | JsonArray | 用户角色信息 |
role_name | String | 用户角色名称 |
role_id | String | 用户角色id |
role_code | String | 用户角色代码 |
- 返回格式:
"code": 0,
"data": [
{
"project_id": "11111118",
"organizationlist": {
"organization": "",
"detail": [
]
},
"email": "935367253@qq.com",
"rolelist": [
{
"role_name": "fortestrole",
"role_id": "2042",
"role_code": "welink_1590049749780"
}
],
"user_id": "40845",
"用户自定义字段1": "用户自定义字段1的value",
"用户自定义字段2": "用户自定义字段2的value",
"用户自定义字段3": "用户自定义字段3的value",
"user_expire_time": "2023-06-29 23:59:59",
}
],
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 8.4 根据项目id,应用id 查询有权限的用户信息
- 请求url:
/common/user/getUserInfoByApp
- 请求方式:
get
- 描述:用于获取指定应用下有权限的用户信息,包括角色,自定义扩展属性,组织架构等基本信息
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
appId | Long | 是 | 应用系统的App ID,由系统分配 |
projectId | Long | 是 | appId所属项目ID,由系统分配 |
- 请求示例:
/common/user/getUserInfoByApp?
projectId=xxx
&appId=xxx
&token=***************
&iotim_ticket=*********************
2
3
4
5
- 返回参数
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | JsonArray | 查询结果 |
- 返回格式
{
"code":0,
"data":[
{
"自定义字段1":"",
"自定义字段2":"",
"自定义字段3":"test",
"自定义字段4":"",
"自定义字段5":"",
"rolelist":[
{
"role_name":"admin",
"role_id":"2035",
"role_code":"admin"
}
],
"user_id":"41878",
"project_id":"1",
"organizationlist":{
"organization":"",
"detail":[
]
},
"name":"测试用户",
"en_name":"test_user_",
"user_expire_time":"永久授权",
"email":"xx@qq.com"
}
]
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 8.5 新增角色
- 请求url:
/common/account/addAPIRole
- 请求方式:
get
- 描述:给当前应用新增一个API角色
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
role_name | String | 是 | 角色名,中文请用utf8编码 |
role_code | String | 是 | 角色代码,中文请用utf8编码 |
description | String | 是 | 角色描述,中文请用utf8编码 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/account/addAPIRole?
token=************************************
&role_name=管理员
&role_code=admin5
&description=测试帐号
&iotim_ticket=****************************
&project_id=******************************
2
3
4
5
6
7
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回格式:
{
"code": 0,
"message": "OK"
}
2
3
4
# 8.6 删除角色
- 请求url:
/common/account/delAPIRole
- 请求方式:
get
- 描述: 删除当前应用的一个API角色,被删除的角色代码不能再使用
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
role_code | String | 否 | 角色代码,中文请用utf8编码 |
project_id | String | 否 | 项目编号 |
force_delete | String | 否 | 强制删除字段 为true时:自动删除角色关联用户、设备、功能权限的关系, 为false或者空时:如有用户、设备、功能相关资源则不能删除此角色 |
- 请求示例:
/common/account/delAPIRole?
token=************************************
&role_code=admin5
&iotim_ticket=****************************
&project_id=******************************
&force_delete=****************************
2
3
4
5
6
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回格式:
{
"code": 0,
"message": "OK"
}
2
3
4
# 8.7 查询角色
- 请求url:
/common/account/findAPIRoleList
- 请求方式:
get
- 描述: 根据角色代码查询角色信息
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
role_code | String | 是 | 角色代码,中文请用utf8编码 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/account/delAPIRole?
token=************************************
&iotim_ticket=****************************
&project_id=******************************
2
3
4
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | JSONArray | 角色信息列表 |
- 返回格式:
{
"code": 0,
"data": [
{
"role_name": "管理员",
"role_code": "admin1",
"description": "测试帐号"
}
],
"message": "OK"}
2
3
4
5
6
7
8
9
10
# 8.8 新增角色与设备关系
- 请求url:
/common/account/addRoleDeviceRelation
- 请求方式:
GET
- 描述: 该接口用于添加角色和设备之间的关系,例如给角色赋予设备的读权限。如果应用有这个角色,应用就可以读取该设备的数据。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
role_code | String | 是 | 角色代码,中文请用utf8编码 |
wId | String | 是 | 设备在微瓴的唯一标识 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/account/addRoleDeviceRelation?
token=************************************
&role_code=admin1
&wId=******************
&iotim_ticket=****************************
&project_id=******************************
2
3
4
5
6
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回格式:
{
"code": 0,
"message": "OK"
}
2
3
4
# 8.9 删除角色与设备关系
- 请求url:
/common/account/delRoleDeviceRelation
- 请求方式:
GET
- 描述: 用于删除角色和设备之间的关系,删除角色对设备的控制权限
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
role_code | String | 是 | 角色代码,中文请用utf8编码 |
wId | String | 是 | 设备在微瓴的唯一标识 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/account/delRoleDeviceRelation?
token=************************************
&role_code=admin1
&wId=*************************************
&iotim_ticket=****************************
&project_id=******************************
2
3
4
5
6
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
del_count | Integer | 删除的记录数 |
- 返回格式:
{
"code": 0,
"data": { "del_count": 1 },
"message": "OK"
}
2
3
4
5
# 8.10 查询角色与设备关系
- 请求url:
/common/account/findRoleDeviceRelation
- 请求方式:
GET
- 描述: 该接口用于查询该应用下某个角色有权限的设备列表信息。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
role_code | String | 是 | 角色代码,中文请用utf8编码 |
num | Integer | 是 | 分页参数:每页显示的数量 |
page | Integer | 是 | 分页参数:返回的页码 |
project_id | String | 否 | 项目编号 |
- 请求示例:
/common/account/findRoleDeviceRelation?
token=************************************
&role_code=admin1
&page=1
&num=999
&iotim_ticket=****************************
&project_id=******************************
2
3
4
5
6
7
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | JSONArray | 查询结果 |
totalPage | Integer | 返回的总页数 |
totalRow | Integer | 返回的总量 |
wId | String | 设备的唯一标识 |
- 返回格式:
{
"code": 0,
"data": {
"totalpage": 1,
"totalrow": 2,
"list": [
{
"wId": "******************"
},
{
"wId": "******************"
}
]
},
"message": "OK"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 9. 消息广播
# 9.1 发送消息到设备
- 请求url:
/common/msg/send
- 请求方式:
GET
- 描述: 用于发送设备的控制消息,通过微瓴下控数据到直连设备(具有通讯能力的设备),直连设备再根据下控的数据进行解析成设备对应的协议,并下达到指定的设备.
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
wId | String | 是 | 设备的唯一标识 |
datapoint | Long | 否 | 自定义功能码,默认为80000 |
cmd | String | 是 | 下控设备的消息内容,需UrlEncode编码(用模型中services定义的内容来下控,也可以自定义消息下控) |
- 请求示例:
/common/msg/send?token=***********************&iotim_ticket=***************&wId=************************&datapoint=100001548&cmd=****************
- cmd示例1:
{
"profile":{
"poiCode":"w242400",
"modelId":"123"
},
"services":{
"switch":{
"action":"lightOn",
"color":"red"
}
}
}
//urlEncode:%7B%22profile%22%3A%7B%22poiCode%22%3A%22w242400%22%2C%22modelId%22%3A%22123%22%7D%2C%22services%22%3A%7B%22switch%22%3A%7B%22action%22%3A%22lightOn%22%2C%22color%22%3A%22red%22%7D%7D%7D
2
3
4
5
6
7
8
9
10
11
12
13
- cmd示例2:
{"action":"lightOn"}
//urlEncode:%7B%22action%22%3A%22lightOn%22%7D
2
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 返回数据 |
seq | String | 该次请求的seq |
- 返回格式:
{
"code": 0,
"message": "OK",
"data": {
"seq": 5031738
}
}
2
3
4
5
6
7
# 9.2 智能设备控制
- 请求url:
/common/msg/controller
- 请求方式:
GET
- 描述: 用于发送消息到设备,需要实现对应设备协议。仅适用于植入物联SDK模式,如果不是,建议采用9.1接口。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
din | String | 是 | 设备的唯一标识 |
data | String | 是 | 控制内容,需 UrlEncode |
seq | Integer | 是 | 序列号。在同一个 wId 之中相邻的两条请求中,如果 seq 相同则屏蔽后一条 |
sub_id | JsonArray | 否 | 子节点 ID,用于对网关下设备进行群控操作,直连设备忽略该参数 |
timestamp | String | 是 | 时间戳,单位:毫秒 |
cmd | String | 是 | sss控制命令 |
- 请求示例:
/common/msg/controller?
token=**************
&din=***************
&data={
"timestamp":1494919323720,
"sub_id":["031605230002","031605230003"],
"seq":1,
"cmd":{
"bri":50,
"on":true,
"rgb":[100,100,100],
"ct":100}
}
&iotim_ticket=******
2
3
4
5
6
7
8
9
10
11
12
13
14
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 操作结果 |
update_num | Integer | 录像记录修改数量 |
- 返回格式:
{
"code": 0,
"message": "OK",
"data": {
"update_num": 1000
}
}
2
3
4
5
6
7
# 9.3 文件上传
- 请求url:
/common/msg/sendFile
- 请求方式:
GET
- 描述: 通过对象存储(Cloud Object Storage,简称:COS)发送文件到设备,获取文件在COS上的信息。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
dins | String | 是 | 设备 din,可以以","分隔,发送给多个设备 |
fileName | String | 是 | 上传的文件名 |
fileSize | Integer | 是 | 上传的文件大小,单位:byte |
hashCode | String | 是 | 本次上传文件的 hash 值 |
fileMD5 | String | 是 | 本次上传文件的 MD5 值 |
data | String | 是 | 给设备发送的自定义消息内容 |
- 请求示例:
/common/msg/sendFile?
token=*******************************************************
&dins=***************
&fileName=img.png
&fileSize=8898
&hashCode=913cf4af128d078db1b21f3b85462bd8e5d7116f
&fileMD5=cc2e46c7dd477b86d0c729b2362a7cd0
&data=test
&iotim_ticket=***********************************************
2
3
4
5
6
7
8
9
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 操作结果 |
file_id | String | 该次发送的文件 ID |
cos_authorization | String | 上传至 COS 系统所需的授权码 |
url | String | 上传文件路径 |
host | String | 上传至 cos 时的 header |
x-cos-content-sha1 | String | 上传至 cos 时的 header |
- 返回格式:
{
"code":0,
"data":{
"x-cos-content-sha1":"913cf4af128dsd078db1b21f3b85462bd8e5d7116f",
"file_id":"eb54f755-b2c6-4e0e-8e9f-cb035fdhdf0b9962",
"host":"temporary-file-upload-137-130014261223318.cos.ap-guangzhou.myqcloud.com",
"cos_authorization":"string-demo",
"url":"http://tddfgary-file-ugdsad-137-1300142618.cos.ap-.com/iot_cos/20200825/eb54f755-b2c6-4e0e-8e9f/img.png"
},
"message":"OK"
}
2
3
4
5
6
7
8
9
10
11
- 上传url:sendFile返回的url
- 请求方式:
PUT
- 请求头:
{
"x-cos-content-sha1":"x-cos-content-sha1",//sendFile返回的x-cos-content-sha1的值
"host":"host",//sendFile返回的host的值
"Authorization":"cos_authorization"//sendFile返回的cos_authorization的值
}
2
3
4
5
返回状态码为200表示上传成功
# 9.4 通知平台文件已上传
- 请求url:
/common/msg/fileNotify
- 请求方式:
GET
- 描述: 通知平台发送文件在COS上链接到具体的设备。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
fileId | String | 是 | 文件 ID |
uploadResult | String | 是 | 上传文件结果,success:成功,fail:失败 |
- 请求示例:
/common/msg/fileNotify?
token=*******************************************************
&fileId=0fdb0373-1921-4b87-90ff-41740670bff0
&uploadResult=success
&iotim_ticket=***********************************************
2
3
4
5
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回格式:
{
"code": 0,
"message": "OK"
}
2
3
4
返回ok后,设备侧可以收到dataponit id为30003的消息,接收格式查看此接口文档 (opens new window)
# 9.5 消息推送接口
- 请求url:
/common/msg/report
- 请求方式:
POST
- 描述: 消息广播接口,发送消息到平台。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数,登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数,登录获取的物联票据 |
message_type | Integer | 是 | 消息类型,详见附录 (opens new window) |
content | Object | 是 | 消息内容,详见附录 (opens new window) |
- 请求示例:
/common/msg/report?
token=*******************************************************
&iotim_ticket=***********************************************
a.请求头:Content-Type:application/json
b.请求包体:{"message_type":1000100,"content":"test content"}
2
3
4
5
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 操作结果 |
seq | String | 消息的seq |
- 返回格式:
{
"code": 0,
"message": "OK",
"data": {
"seq": "5031740"
}
}
2
3
4
5
6
7
# 9.6 应用接收消息格式(来源应用)
- 请求方式:
POST
- 描述: 微瓴主动推送消息给到应用端的消息格式。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
cookie | String | 是 | 本条消息的cookie,接收到需要返回 |
apiName | String | 是 | 消息类型,"report_data_point":表示设备主动上报, "set_data_point_res":表示设备是根据某条下发消息所回应的数据, “api_broadcast ”来自于api 调用 |
from_app | String | 是 | 消息来源的appid |
time | Object | 是 | 消息发送时间 |
value | Object | 是 | 自定义消息内容 |
seq | Object | 是 | 消息唯一编号 |
- 请求示例:
a.请求头:Content-Type:application/json
b.请求包体:{"apiName":"api_broadcaster","cookie":"29412_1063711","from_app":"40291","time":1561014001593,"value":"value text","seq":"13015327"}
2
- 返回参数:
需要消息接收方返回的内容
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
cookie | String | 请求时所带参数 |
- 返回格式:
{
"code": 0,
"cookie": "29412_1063711"
}
2
3
4
# 9.7 应用接收消息格式(来源设备)
- 请求方式:
POST
- 描述: 微瓴主动推送消息给到应用端的消息格式。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
cookie | String | 是 | 本条消息的cookie,接收到需要返回 |
apiName | String | 是 | 消息类型,"report_data_point":表示设备主动上报, "set_data_point_res":表示设备是根据某条下发消息所回应的数据, “api_broadcast ”来自于api 调用 |
wId | String | 是 | 设备唯一标识 |
errmsg | Object | 是 | 异常消息内容 |
id | Object | 是 | datapoint id 表示功能ID 可选,硬件会上报,app也是可选项 |
time | Object | 是 | 消息发送时间 |
type | Object | 是 | 消息格式 |
value | Object | 是 | 自定义消息内容 |
seq | Object | 是 | 消息唯一编号 |
- 请求示例:
a.请求头:Content-Type:application/json
b.请求包体:{
"apiName": "report_data_point",
"cookie": "16198_577418",
"wId": "********",
"errmsg": "",
"id": 20134,
"time": 1511802600575,
"type": "string",
"value":"{\"V\":1,\"subid\":\"0900009\",\"list\":[{\"func\":\"CO2\",\"value\":\"972180.00\"}],\"timestamp\":1511802557768}",
"seq": "0"
}
2
3
4
5
6
7
8
9
10
11
12
- 返回参数:
需要消息接收方返回的内容
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
cookie | String | 请求时所带参数 |
- 返回格式:
{
"code": 0,
"cookie": "29412_1063711"
}
2
3
4
# 9.8 应用回调黑名单规则
- 应用回调地址请求失败次数超过5次则进入黑名单,第6次请求失败进入黑名单1分钟,第7次失败进入黑名单5分钟,第8次及之后进入黑名单15分钟;
- 进入黑名单后,在限制时间内不会再请求其回调地址;
- 从第一次进入黑名单起开始计算规则生效时间,超过1小时清空请求失败计数,重置黑名单规则;
- 应用回调地址请求成功后,也将重置黑名单规则。
# 9.9 以动作触发的方式发送消息到设备
- 请求url: /common/msg/triggerAction
- 请求方式: POST
- 描述: 用于发送设备的控制消息,通过微瓴管理平台上配置动作,将动作关联的数据下控到直连设备(具有通讯能力的设备),直连设备再根据下控的数据进行解析成设备对应的协议,并下达到指定的设备。
- 参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
wId | String | 否 | 设备的唯一标识 |
action_id | Integer | 是 | 动作ID |
cmd | Json | 是 | 下控设备的动态消息内容,用于替换动作的自定义消息中的某些动态数据,json格式 |
- 请求示例:
/common/msg/triggerAction?token=***********************&iotim_ticket=***************
a.请求头:Content-Type:application/json;charset=UTF-8
b.请求包体:{"wId":"************************","cmd":{"action":"lightOn"},"action_id":1}
2
3
- cmd是json数据,示例如下:
{
"profile": {
"poiCode": "w242400",
"modelId": "123"
},
"services": {
"switch": {
"action": "lightOn",
"color": "red"
}
}
}
2
3
4
5
6
7
8
9
10
11
12
- 管理平台上动作消息以物模型模板的形式存在,支持动态值配置,动态值以%%()来标识,cmd中的数据是动态值的数据来源,通过动态替换得到最终的下发消息。动态值数据替换示例:
cmd消息数据:
{
"id": 123,
"value": {
"device": 789,
"list": [
"hello",
"world"
]
}
}
动作模板消息:
{
"action": "open",
"device_id": "%%(value.device)",
"item": "%%(value.list[0])",
"item2": "%%(value.list[2])"
}
则动作发送的最终消息为:
{
"action": "open",
"device_id": 789,
"item": "hello",
"item2": "NULL"
}
说明:如果动态值在cmd中不存在,则以 NULL 替换;支持数组取值。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- 返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 返回数据 |
seq | String | String |
- 返回格式:
{
"code": 0,
"message": "OK",
"data": {
"seq": 5031738
}
}
2
3
4
5
6
7
# 10. 应用功能权限管理
# 10.1 查询角色的功能列表
请求url:
/common/permission/findRolePermissionList
请求方式:
get
描述: 根据角色编号查询对应的功能列表
参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
role_code | String | 是 | 角色编号 |
project_id | String | 否 | 项目编号 |
请求示例:
/common/permission/findRolePermissionList? token=****** &iotim_ticket=******** &role_code=****** &project_id=******
1
2
3
4
5返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
data | Json | 查询结果 |
role_code | String | 角色码 |
role_name | String | 角色名称 |
permission_list | JSONArray | 权限列表 |
cp_id | Integer | 功能编号 |
parent_cp_id | Integer | 父功能编号 |
value | String | 功能值 |
name | String | 功能名称 |
type | String | 功能类型 |
返回格式:
{ "code": "0", "message": "ok", "data": { "role_code": "", "role_name": "", "permission_list": [ { "cp_id": 123, "parent_cp_id ": 152, "value": "", "name": "", "type": "" } ] } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 10.2 新增应用功能信息
请求url:
/common/permission/addCustomPermission
请求方式:
get
描述: 给应用新增一个功能信息
参数列表:
字段名称 | 字段类型 | 是否必须 | 字段描述 |
---|---|---|---|
token | String | 是 | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | String | 是 | 鉴权参数:登录获取的物联票据 |
project_id | String | 是 | 项目编号 |
parent_id | String | 否 | 父功能编号 |
val | String | 是 | 功能值 |
name | String | 是 | 功能名称 |
type | String | 是 | 功能类型 |
is_vaild | String | 是 | 是否有效:-1为无效,0为有效 |
order | String | 是 | 排序 |
String | 是 | 用户注册邮箱 |
请求示例:
/common/permission/addCustomPermission? token=******** &iotim_ticket =************** &project_id =************** &parentId =************** &val =************** &name =************** &type =************** &is_vaild=************** &order=**************
1
2
3
4
5
6
7
8
9
10返回参数:
字段名称 | 字段类型 | 字段描述 |
---|---|---|
code | Int | 错误码,0表示成功,其他见错误码说明 |
message | String | 执行结果消息 |
- 返回格式:
{
"code":0,
"data":{
"cp_id":"358"
},
"message":"OK"
}
2
3
4
5
6
7
# 11. 对象存储上传下载
# 11.1 获取临时上传地址
请求url:
/common/fileservice/uploadTemporaryFile
请求方式:
GET
描述:该接口支持多租户按项目临时存储,最大支持上传单个大小为1G的文件,不支持断点续传。客户端通过此接口获取临时文件上传的地址,然后对得到的地址发送HTTP PUT请求,把文件以二进制流的形式附在body上传到该地址。文件在微瓴默认保存时效为1小时,最大保存90天,超过保存时效后文件将被清理,请在时效内通过common/fileservice/downloadTemporaryFile接口下载上传的文件。同一个上传地址,在有效期内,上传多个文件,可用文件是最后一个上传文件。
请求参数
参数名称 | 类型 | 长度 | 是否必填 | 描述 |
---|---|---|---|---|
token | string | 无限制 | true | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | string | 无限制 | true | 鉴权参数:登录获取的物联票据 |
file_name | string | 100 | true | 文件名 |
expired_time | Integer | 无限制 | false | 获取的上传地址的有效时间,单位为秒,默认为3600秒 |
file_save_seconds | Integer | 无限制 | false | 文件保存时效,单位为秒,默认为3600秒,最大保存7776000秒 |
- 请求示例
/common/fileservice/uploadTemporaryFile?
token=***********************
&file_name=test.jpg
&expired_time=3600
&file_save_seconds=3600
2
3
4
5
- 返回参数
参数名称 | 类型 | 是否必填 | 参数长度 | 描述 |
---|---|---|---|---|
code | Int | true | 无限制 | 错误码表,0表示成功,其他见错误码表 |
message | string | false | 无限制 | 执行结果消息 |
data | JSON | false | 无限制 | 返回结果 |
file_id | string | false | 无限制 | 文件id |
upload_url | string | false | 无限制 | 文件上传地址 |
- 返回示例
{
"code": 0,
"data": {
"file_id": "dec8d6f8-577f-4850-97bb-19059af93889",
"upload_url": "https://temporarybucket-30035.sz.gfp.tencent-cloud.com/1000/10000/temporary-file-upload/20190725/common/1564036741985-dec8d6f8-577f-4850-97bb-19059af93889.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DJwxbdHXcgrqZyWxNOcqdDnN0%26q-sign-time%3D1564036741%3B1564040341%26q-key-time%3D1564036741%3B1564040341%26q-header-list%3Dhost%3Bx-cos-content-sha1%26q-url-param-list%3D%26q-signature%3Dba3e7fc12e2a033c73b83f921ded736e9759ad9b"
},
"message": "OK"
}
2
3
4
5
6
7
8
# 11.2 获取临时下载地址
请求url:
/common/fileservice/downloadTemporaryFile
请求方式:
GET
描述:客户端调用该接口获取下载地址,通过HTTP GET请求下载地址的方式将文件流转成文件。
请求参数
参数名称 | 类型 | 参数长度 | 是否必填 | 描述 |
---|---|---|---|---|
token | string | 无限制 | true | 鉴权参数:登录获取的动态密钥 |
iotim_ticket | string | 无限制 | true | 鉴权参数:登录获取的物联票据 |
expired_time | Integer | 无限制 | false | 获取的下载地址有效时间,单位为秒,默认为1200秒 |
file_id | string | 无限制 | true | 文件id |
- 请求示例
/common/fileservice/downloadTemporaryFile?
token=******************
&expired_time=3600
&file_id=dec8d6f8-577f-4850-97bb-19059af93889
2
3
4
- 返回参数
参数名称 | 类型 | 是否必填 | 参数长度 | 描述 |
---|---|---|---|---|
code | Int | true | 无限制 | 错误码表,0表示成功,其他见错误码表 |
message | string | false | 无限制 | 执行结果消息 |
data | JSON | false | 无限制 | 返回结果 |
filename | string | false | 无限制 | 文件名 |
downloadUrl | string | false | 无限制 | 文件下载地址 |
- 返回示例:
{
"code": 0,
"data": {
"filename": "test.jpg",
"downloadUrl": "https://temporarybucket-30035.sz.gfp.tencent-cloud.com/1000/10000/temporary-file-upload/20190725/common/1564036741985-dec8d6f8-577f-4850-97bb-19059af93889.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DJwxbdHXcgrqZyWxNOcqdDnN0%26q-sign-time%3D1564036913%3B1564040513%26q-key-time%3D1564036913%3B1564040513%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3Ddb929c4a291b98cade0eeedf12f966718c56e11a"
},
"message": "OK"
}
2
3
4
5
6
7
8