跳到主要内容

openAPI

OpenAPI

简介

深盾提供 OpenAPI 可以方便软件开发商的官网、CRM、ERP系统做集成对接,实现全程电子化

实现效果

许可签发、用户注册、用户许可更新等一系列操作都在软件开发商原有平台完成,不改变原有使用方式和提高用户体验。

更新历史

版本日期备注
2.0.0 beta2017.05.17初稿
2.0.1 beta2017.06.13添加用户成功后, 可区分出是否之前已在用户中心注册过
添加用户的接口修改支持使用手机号作为用户名
2.0.2 beta2017.09.07添加查询某用户已发许可的 API
添加发布软锁许可的 API
2.0.3 beta2017.09.21添加不依赖模板发布云锁或软锁许可的 API
添加用于更新(修改)已发的云锁或软锁许可的 API
2.0.4 beta2017.09.28添加标签管理相关 API
2.0.5 beta2017.10.25添加软锁查询相关 API
许可计次限制统一使用 "counter"
2.0.62018.11.15添加授权码管理相关 API
2.0.72018.12.12授权码生成、更新 API 支持高级属性设置
2.0.82019.01.10云锁许可新增计费相关参数设置
2.0.92019.01.25新增获取账号许可使用情况接口
2.0.102019.04.26支持按照套餐发布许可, 部分描述和限制更新
2.0.112019.05.29新增授权码兑换接口
2.0.122019.07.25产品相关接口增加"显示名称"字段, 部分描述更新
2.0.132019.08.06产品相关接口新增对"硬件锁"产品的支持
修正部分目录标题名称
2.0.142019.08.30授权码管理相关接口增加"系统平台"字段, 支持生成面向安卓平台的授权码, 部分描述更新
2.0.152019.09.04授权码管理相关接口增加"累积绑定设备数"字段
新增获取授权码使用情况接口
2.0.162019.09.10新增硬件锁许可管理接口, 详见第十节
新增硬件锁信息管理接口, 详见第十一节
2.0.172019.11.28授权码管理相关接口增加对集团许可的支持
2.0.182020.02.13调整部分名词称谓, 与开发者中心保持一致
2.0.192020.09.15云锁模板以及云锁许可支持踢出设置, 详见第七节对应字段描述
2.0.202020.11.20新增获取账户余额信息接口, 详见第六节
2.0.212020.12.16授权码许可支持 C2D/D2C 文件有效期设置, 详见第九节对应字段描述
2.0.222021.03.03授权码管理, 新增"授权码解绑"接口
"获取授权码的绑定列表"接口返回数据新增字段, 详见第九节对应接口及字段描述
2.0.232021.05.11授权码管理, 数据区支持编辑模式设置, 与开发者中心界面操作功能保持对应, 详见接口字段描述
硬件锁许可管理, 数据区支持编辑模式设置, 与开发者中心界面操作功能保持对应, 详见接口字段描述
2.0.242021.09.24新增获取账单信息接口, 详见第六节
2.0.252022.06.20修改产品、修改模板新增可选是否同步参数
2.0.262022.09.28新增使用 C2D 反查授权码/账号许可接口
2.0.272022.10.20云软(即账号)模板/许可相关接口支持 Key/Value 数据区
2.0.282022.12.26生成授权码接口: 支持 PPM
更新授权码接口: 支持将永久许可更新为非永久许可
账号许可/授权码许可: 增加锁定/解锁接口
2.0.292023.02.09支持使用多访问密钥调用接口, 计费相关接口支持根据访问密钥绑定的账户计费更新
账号许可/更新授权码: 支持修改订阅模式
2.0.302023.03.06账号许可: 新增软锁获取累计绑定设备接口
2.1.02023.06.08授权码: 含有多个产品的授权码, 支持分别设置许可条款
2.1.12023.09.28签发/更新许可, 支持设置备注/合同编号/标签
2.1.22023.11.06模板和许可, 数据区为文件模式时, 也可以指定读写区大小
2.1.32023.12.13模板和不依赖模板的许可, 扣费方式为套餐时, 支持自动匹配
2.1.42024.04.25授权码许可, 新增在线借阅/集团借阅参数

目录

一. 约定

  1. 术语
  • 普通账号: 必须用邮箱或手机号作为登录账号, 云平台全局可用, 可使用不同开发者发布的许可, 此类账号可以在终端自助登录云平台的中间件来使用许可软件;
  • 影子账号: 账号由创建该账号的开发者管理, 仅用于跟开发者自己的账号系统建立关联, 此类账号由开发者应用自己管理登录过程;
  • licenseId: 产品在深思云平台的许可 ID, 取值范围: [1, 4294967295];
  • 数据区: 为开发者提供三个数据存储区域, 可以存储任意数据:
    • rom: 在许可使用过程中不能修改, 最大 65535 byte;
    • raw: 在许可使用过程中可以修改, 最大 65535 byte;
    • pub: 在许可使用过程中不能修改, 最大 65535 byte
  1. 接口概述
  • 请求结构:
    • 服务接口 URL: https://openapi.senseyun.com/v2/sv/${请求操作}
    • 通信协议: HTTPS
    • 请求方法: POST
    • Content-Type: application/json
    • 字符编码: 请求和响应都以 UTF-8 编码
    • 请求结构: JSON
    • 响应结构: JSON
    • API 规范: 此 API 不使用 rest 风格, 响应 JSON 中 code 属性为 0 表示成功, 为其它值表示失败.
  • 公共参数: 需要将下列公共请求参数加入 HTTP Header 中
参数名称必选描述
SenseAppID开发者的 APPID, 获取方式见下文
SenseTimestampUTC 时间戳(毫秒), 与服务器时间相差过大将导致认证失败
SenseNonce每次调用需传入不重复的值, 用于抗重放, 可实现为使用 UUID
SenseSign用于认证的签名, 计算方式见下文

图一.开发者信息

登录深盾开发者中心, 右上角点击 "开发者信息"

图二.查看 AppID 和 Serret

注意事项:

  • 默认访问密钥调用 OpenAPI 时, 涉及计费相关的接口统一使用主账户进行计费.
  • 其他访问密钥调用 OpenAPI 时, 涉及计费相关的接口将使用该访问密钥绑定的计费账户进行计费.
  1. 签名机制
  • 说明 用于验证调用者合法性, 同时实现抗重放、防篡改的安全机制.
  • 签名过程
    • ResourceURI: 请求操作, 例如: v2/sv/addUser;
    • BodyContent: 请求中的 JSON;
    • Secret: 深盾 OpenAPI 访问密钥, 获取过程见上文;
    • SenseSign = Base64(HMAC_SHA256(SenseTimestamp + SenseNonce + ResourceURI + BodyContent, Secret));
  • 请求示例:
POST https://openapi.senseyun.com/v2/sv/addUser
Content-Type: application/json
SenseAppID: ab73d14ec3ab4a3a8275c90200f6e5d7
SenseTimestamp: 1490950471521
SenseNonce: 4a3a8275c90200fab73d14ec3ab6e5d7
SenseSign: rrkEBbMf8DaIrefRAcnDoDG/5lXmmBFE05rlopXAU4c=

{
"userAccount": "test@test.com.cn",
"nickname": "张三",
"passwd": "123456"
}
  • 代码示例(Java 11+):
import com.fasterxml.jackson.databind.node.*;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*;

private static final String APPID = "深盾 OpenAPI 访问 ID";
private static final String SECRET = "深盾 OpenAPI 访问密钥";

private static final HttpClient CLIENT = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10L))
.followRedirects(HttpClient.Redirect.ALWAYS)
.build();

private static Map<String, String> buildHeader(String uri, String body) {
long now = System.currentTimeMillis();
String nonce = removeAll(UUID.randomUUID().toString(), '-');
String timestampStr = String.valueOf(now);
byte[] timestampBytes = timestampStr.getBytes(StandardCharsets.UTF_8);
byte[] nonceBytes = nonce.getBytes(StandardCharsets.UTF_8);
byte[] uriBytes = uri.getBytes(StandardCharsets.UTF_8);
byte[] bodyBytes = body.getBytes(StandardCharsets.UTF_8);
byte[] allSrcBytes = new byte[timestampBytes.length + nonceBytes.length + uriBytes.length + bodyBytes.length];
int offset = 0;
System.arraycopy(timestampBytes, 0, allSrcBytes, offset, timestampBytes.length);
offset += timestampBytes.length;
System.arraycopy(nonceBytes, 0, allSrcBytes, offset, nonceBytes.length);
offset += nonceBytes.length;
System.arraycopy(uriBytes, 0, allSrcBytes, offset, uriBytes.length);
offset += uriBytes.length;
System.arraycopy(bodyBytes, 0, allSrcBytes, offset, bodyBytes.length);

byte[] secretBytes = SECRET.getBytes(StandardCharsets.UTF_8);
byte[] signBytes = hMacSHA256(allSrcBytes, secretBytes);
String senseSign = Base64.getEncoder().encodeToString(signBytes);

Map<String, String> headers = new HashMap<>(4);
headers.put("SenseAppID", APPID);
headers.put("SenseTimestamp", timestampStr);
headers.put("SenseNonce", nonce);
headers.put("SenseSign", senseSign);
return headers;
}

private static String removeAll(final CharSequence str, final char ch) {
if (Objects.isNull(str)) {
return null;
}

final int len = str.length();
final StringBuilder sb = new StringBuilder(len);
char c1;
for (int i = 0; i < len; i++) {
c1 = str.charAt(i);
if (c1 != ch) {
sb.append(c1);
}
}
return sb.toString();
}

private static byte[] hMacSHA256(byte[] data, byte[] key) {
try {
final String algorithm = "HmacSHA256";
SecretKeySpec spec = new SecretKeySpec(key, algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(spec);
return mac.doFinal(data);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

private static void send(String uri, ObjectNode json) {
String body = json.toString();
Map<String, String> headers = buildHeader(uri, body);

HttpRequest.Builder builder = HttpRequest.newBuilder()
.uri(URI.create("https://openapi.senseyun.com" + uri))
.POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
.header("Content-Type", "application/json");
headers.forEach(builder::header);
HttpRequest request = builder.build();

HttpResponse<String> resp;
try {
resp = CLIENT.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
int code = resp.statusCode();
String respBody = resp.body();
System.out.println("code: " + code);
System.out.println("resp: " + respBody);
}

public static void main(String[] args) throws Exception {
final String uri = "/v2/sv/addUser";

ObjectNode json = new ObjectNode(JsonNodeFactory.instance);
json.set("userAccount", new TextNode("test@test.com.cn"));
json.set("nickname", new TextNode("张三"));
json.set("passwd", new TextNode("123456"));

send(uri, json);
}

  1. 接口限制
  • 未转正的开发者
    • 最多添加 100 个账号; 批量导入单次不超过 10 个账号;
  • 转正后的开发者
    • 出于安全考虑, 接口调用有频次限制, 具体限制根据业务量设置;

二. API概览

API描述
账号相关
addUser添加普通账号
addShadowUser添加影子账号
modifyUserPasswd修改影子账号的密码
modifyUser修改账号备注信息
deleteUser删除账号(包含普通账号和影子账号)
findUsers查找账号
产品相关
addProduct添加产品
modifyProduct修改产品信息
getProductInfo按照产品 ID 获得产品信息
productList按照产品名称模糊搜索产品信息
deleteProduct按照产品 ID 删除产品
账号模板相关
addTemplate添加模板
modifyTemplate修改模板信息
templateList按照产品 ID 枚举模板
findTemplate按照模板编号查找模板信息
deleteTemplate删除模板
账号许可相关
issueLicenseByProduct不依赖模板发布许可
issueLicense依赖模板发布许可
updateLicense更新(修改)已发许可
deleteLicense删除许可
licenseList搜索许可
softLockbindList获取软锁的绑定机器信息
softLockUnbind解绑软锁
licenseUseInfo获取许可使用信息
softLockLicenseInfo获取指定软许可的信息
softLockbindHistory获取指定软许可的绑定历史信息(包含绑定信息)
softLockbindMachineLast获取具体机器的软锁许可的最新绑定(解绑)信息
softLockbindMachineHistory获取具体机器的软锁许可的绑定历史信息(包含解绑信息)
getAccountLicenseUsage获取账号许可的使用情况
findBoundSoftLicenseByC2d使用 C2D 反查已绑定的软锁许可
硬件锁许可相关
devicelicense/addlic签发添加许可升级包
devicelicense/updatelic签发更新许可升级包
devicelicense/dellic删除硬件许可升级包
devicelicense/ctrllic签发控制许可升级包
dlm/issueAddLicense发布添加硬件锁许可
dlm/issueUpdateLicense发布更新硬件锁许可
dlm/issueDeleteLicense发布删除硬件锁许可
dlm/issueClearAllLicenses发布清空锁内所有许可
dlm/getLicenseDetail获取硬件锁许可详情
硬件锁信息管理接口
dm/modifyContact修改用户锁联系人信息
dm/autoUpgradeSwitcher开关用户锁在线自动升级
dm/getBriefInfo获取用户锁信息
dm/exportDongleProduceInfo导出用户锁生产数据
计费管理接口
getAvailableLicensePackage获取可用的许可套餐
getAccountBalance获取账户余额信息
getBillInfo获取账单信息
标签管理相关
addTag添加标签
updateTag修改标签
deleteTag删除标签
findTags按标签名称查找标签
授权码管理相关
issueLicenseKey生成授权码
updateLicenseKey更新授权码
deleteLicenseKey删除授权码
findLicenseKeys搜索授权码
getLicenseKeyDetail获取授权码详情
getLicenseKeyBindList获取授权码的绑定列表
licenseKeyExchange兑换授权码
getLicenseKeyUsage获取授权码使用情况
licenseKeyUnbind授权码解绑
findBoundLicenseKeyByC2d使用 C2D 反查已绑定的授权码

三. 账号管理接口

1. 添加普通账号

  • 接口地址:

https://openapi.senseyun.com/v2/sv/addUser

  • 参数:
参数名称必选类型默认值描述
nicknamestring客户姓名/昵称
userAccountstring登录账号. accountType 的值决定此参数:
accountType = 1 时, 必须为合法的邮箱地址;
accountType = 2时, 必须为合法的手机号
accountTypenumber11-邮箱, 2-手机号
passwdstring密码
cellphonestring手机号码
accountType = 2时, 若不为空必须与 userAccount 值一致
emailstring邮箱地址
accountType = 1时, 若不为空必须与 userAccount 值一致
sexstring性别, 可选值: 男/女
telstring电话
addressstring联系地址
tagIdsarray标签 ID 列表
descstring账号备注信息
  • 响应:
字段名称类型描述
alreadyRegisteredAtCloudboolean账号是否在深盾云平台注册过
codenumber状态码
descstring结果描述
dataData1

Data1

字段名称类型描述
userIdstring账号 id
  • 示例: 请求内容:
{
"nickname": "张三",
"userAccount": "test@test.com.cn",
"passwd": "123456",
"cellphone": "1351111111X",
"sex": "男",
"tel": "12332112",
"address": "北京市海淀区XXX",
"desc": "高校老师",
"tagIds": [ 123, 234 ]
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"userId": "f17769576f9545d583a10c44a5389f58"
}
}

2. 添加影子账号

  • 接口地址:

https://openapi.senseyun.com/v2/sv/addShadowUser

  • 参数:
参数名称必选类型默认值描述
nicknamestring账号名称
shadowAccountstring影子账号
passwdstring账号密码
cellphonestring手机号码
emailstring电子邮箱
sexstring性别: 可选值: 男/女
telstring电话
addressstring联系地址
tagIdsarray标签 ID 列表
descstring账号备注
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData2

Data2

字段名称类型描述
userIdstring账号 id
userAccountstring登录账号, 修改密码时传此值修改此账号的密码
  • 示例: 请求内容:
{
"nickname": "张三",
"shadowAccount": "dasodjsakl",
"passwd": "123456",
"tagIds": [ 123, 234 ]
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"userId": "f17769576f9545d583a10c44a5389f58",
"userAccount": "gf7769576f9545d583a10c44a5389f58dasodjsakl"
}
}

3. 修改影子账号密码

  • 接口地址:

https://openapi.senseyun.com/v2/sv/modifyUserPasswd

  • 说明:

此 API 只能修改通过 addShadowUser 接口添加的账号的密码

  • 参数:
参数名称必选类型默认值描述
userAccountstring登录账号, 请填写添加影子账号返回的 userAccount
passwdstring账号密码
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"userAccount": "test@test.com.cn",
"passwd": "123456"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

4. 修改账号备注信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/modifyUser

  • 参数:
参数名称必选类型默认值描述
userIdstring账号 ID
nicknamestring账号姓名/昵称
cellphonestring对于普通账号, 将忽略此参数, 只能用户登录用户中心自行修改
emailstring对于普通账号, 将忽略此参数, 只能用户登录用户中心自行修改
sexstring性别, 可选值: 男/女
telstring电话
addressstring联系地址
tagIdsarray标签 ID 列表
descstring账号备注信息
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"userId": "96669f0de91746dbafe20e5291efb1f3",
"nickname": "demo1",
"cellphone": "1341111111",
"tagIds": [ 123, 234 ]
}

响应内容:

{
"code": 0,
"desc": "成功"
}

5. 删除账号

  • 接口地址:

https://openapi.senseyun.com/v2/sv/deleteUser

  • 说明:

对于普通账号, 只从开发者的账号列表删除, 用户中心仍保留; 对于影子账号, 则全部删除.

  • 参数:
参数名称必选类型默认值描述
userIdstring账号 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"userId": "96669f0de91746dbafe20e5291efb1f3"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

6. 查找账号

  • 接口地址:

https://openapi.senseyun.com/v2/sv/findUsers

  • 参数:
参数名称必选类型默认值描述
userAccountstring账号, 支持模糊查找
emailstring邮箱, 支持模糊查找
nicknamestring客户姓名/昵称, 支持模糊查找
cellphonestring手机号码, 支持模糊查找
tagIdsarray标签 ID 列表
tagNamestring标签名称
currentPagenumber1当前页, 从 1 开始
pageSizenumber10每页数量
  • 注意事项:

参数 userAccount 对于普通账号是指邮箱或手机号; 对于影子账号是指添加影子账号时返回的 userAccount

  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData3

Data3

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
usersUser[]账号信息列表

User

字段名称类型描述
userIdstring账号 ID
nicknamestring账号名称
userAccountstring账号
accountTypenumber账号类型:
1-邮箱
2-手机号
4-影子账号
sexstring性别(男/女)
telstring电话
cellphonestring手机号
emailstring邮箱
addressstring联系地址
descstring描述
tagMessageTagMessage[]标签信息列表

TagMessage

字段名称类型描述
idnumber标签 ID
namestring标签名称
createTimenumberUTC 时间戳(毫秒)
  • 示例: 请求内容:
{
"email": "demo1@test.com",
"nickname": "demo1",
"cellphone": "1341111111",
"tagIds": [ 123, 234 ],
"tagName": "企业用户",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"users": [
{
"userAccount": "demo1@test.com",
"accountType": 1,
"nickname": "demo1",
"sex": "男",
"tel": "0315-12345678",
"cellphone": "1341111111",
"address": "海淀区阜成路西钓鱼台",
"desc": "在校大学生",
"tagMessage": [
{
"id": 123,
"name": "企业用户",
"createTime": 1505273720000
},
{
"id": 234,
"name": "企业用户",
"createTime": 1505273720000
}
]
}
]
},
"totalPage": 1,
"totalCount": 1
}

四. 产品管理接口

1. 添加产品

  • 接口地址:

https://openapi.senseyun.com/v2/sv/addProduct

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber产品 ID, 取值范围: [1, 4294967295]
productNamestring产品名称, 最长 64 字符
displayNamestring显示名称, 最长 64 字符
licenseFormarray许可形式
仅支持云锁: [1]
仅支持软锁: [2]
仅支持硬件锁: [4]
支持任意许可: [1, 2, 4]
pubstring公开区的 hex 字符串
romstring只读区的 hex 字符串
rawstring读写区的 hex 字符串
modulesModule[]子模块列表

Module

参数名称必选类型默认值描述
moduleIdnumber模块编号
moduleNamestring模块名称
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData4

Data4

字段名称类型描述
licenseIdnumber产品 ID
  • 示例: 请求内容:
{
"licenseId": 1,
"productName": "产品测试",
"displayName": "测试产品",
"licenseForm": [ 1, 2 ],
"pub": "AABB",
"rom": "CCDD",
"raw": "EEFF",
"modules": [
{
"moduleId": 1,
"moduleName": "1 号功能开关"
},
{
"moduleId": 2,
"moduleName": "2 号功能开关"
}
]
}

响应内容:

{
"code": 0,
"data": {
"licenseId": 1
},
"desc": "成功"
}

2. 修改产品

  • 接口地址:

https://openapi.senseyun.com/v2/sv/modifyProduct

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber产品 ID
productNamestring产品名称, 最长 64 字符
syncNameToTemplateAndLicbooleanfalse修改后的产品名称是否同步到所有已创建销售模板、已发布的许可中
displayNamestring显示名称, 最长 64 字符
licenseFormarray许可形式
仅支持云锁: [1]
仅支持软锁: [2]
仅支持硬件锁: [4]
支持任意许可: [1, 2, 4]
pubstring公开区的 hex 字符串
romstring只读区的 hex 字符串
rawstring读写区的 hex 字符串
modulesModule[]子模块列表
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"licenseId": 1,
"productName": "产品测试",
"syncNameToTemplateAndLic ": true,
"displayName": "测试产品",
"licenseForm": [
1,
2
],
"pub": "AABB",
"rom": "CCDD",
"raw": "EEFF",
"modules": [
{
"moduleId": 1,
"moduleName": "1 号功能开关"
},
{
"moduleId": 2,
"moduleName": "2 号功能开关"
}
]
}

响应内容:

{
"code": 0,
"desc": "成功"
}

3. 按照产品 ID 查找产品

  • 接口地址:

https://openapi.senseyun.com/v2/sv/getProductInfo

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber产品 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataProduct

Product

字段名称类型描述
licenseIdnumber产品 ID
productNamestring产品名称
displayNamestring显示名称
licenseFormarray许可形式
pubstring公开区的 hex 字符串
romstring只读区的 hex 字符串
rawstring读写区的 hex 字符串
modulesModule[]
  • 示例: 请求内容:
{
"licenseId": 1
}

响应内容:

{
"code": 0,
"data": {
"licenseId": 1,
"productName": "产品测试",
"displayName": "测试产品",
"licenseForm": [ 1, 2 ],
"pub": "AABB",
"rom": "CCDD",
"raw": "EEFF",
"modules": [
{
"moduleId": 1,
"moduleName": "1 号功能开关"
},
{
"moduleId": 2,
"moduleName": "2 号功能开关"
}
],
"createTime": 1564022355000
},
"desc": "成功"
}

4. 按照产品名称查找产品

  • 接口地址:

https://openapi.senseyun.com/v2/sv/productList

  • 参数:
参数名称必选类型默认值描述
productNamestring产品名称, 支持模糊查找
currentPagenumber1当前页, 从 1 开始
pageSizenumber10每页数量
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData6

Data6

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
productsProduct[]产品列表
  • 示例: 请求内容:
{
"productName": "测试"
}

响应内容:

{
"code": 0,
"data": {
"totalPage": 1,
"totalCount": 1,
"products": [
{
"licenseId": 1,
"productName": "产品测试",
"displayName": "测试产品",
"licenseForm": [
1,
2
],
"pub": "AABB",
"rom": "CCDD",
"raw": "EEFF",
"modules": [
{
"moduleId": 1,
"moduleName": "1 号功能开关"
},
{
"moduleId": 2,
"moduleName": "2 号功能开关"
}
],
"createTime": 1564022355000
}
]
},
"desc": "成功"
}

5. 删除产品

  • 接口地址:

https://openapi.senseyun.com/v2/sv/deleteProduct

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber产品 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"licenseId": 1234567890
}

响应内容:

{
"desc": "OK",
"code": 0
}

五. 账号模板管理接口

1. 添加模板

  • 接口地址:

https://openapi.senseyun.com/v2/sv/addTemplate

  • 参数:
参数名称必选类型默认值描述
templateNamestring模板名称
licenseIdnumber产品(许可) ID, 取值范围: [1, 4294967295], 必须是平台上已有的产品
licenseFormnumber许可形式
1-云锁
2-软锁
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestringlicenseMode 为 0 或 2 时必选
订阅模式
对于账户余额, 取值如下:
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 无需传入
对于套餐许可, 指定使用某个套餐时, 取值为对应套餐的序列号; 自动匹配套餐时, 取值 auto
isForeverboolean是否永久许可
licStartTimeTypenumberisForever = false 时必选
时间限制类型
0-具体时间
1-许可发布时间作为开始时间
startTimenumber开始时间, UTC 时间戳(秒)
endTimenumber结束时间, UTC 时间戳(秒)
spanTimenumber时间跨度(天)
counternumberlicenseForm = 1 时生效
许可使用次数, 取值范围: [1, 4294967295]
licDurationnumberlicStartTimeType = 1 时必选
限定时长(天)
offlineDaysnumberlicenseForm = 2 时必选
离线时长(天), 取值范围: [1, 180]
licBindLimitnumberlicenseForm = 2 时必选
同时绑定设备数
licBindMaxLimitnumberlicenseForm = 2 时必选
累积绑定设备数
isOfflinebooleanfalselicenseForm = 2 时生效
是否支持离线
kickOutbooleantruelicenseForm = 1 时生效
是否允许踢出
versionnumber0许可版本
pubstring公开区的 hex 字符串
romstring只读区的 hex 字符串
rawstring读写区的 hex 字符串
dataZonePadModenumber1数据区编辑模式
1-二进制模式
2-Key/Value 模式
kvSeparatorstring:dataZonePadMode = 2 时生效
Key/Value 分隔符, 长度为 1
kvConnectorstring;dataZonePadMode = 2 时生效
Key/Value 连接符, 长度为 1
rawResizenumber重置读写区大小, 取值范围: [读写区数据长度, 65535]
  • 注意事项:
  1. 对于云锁普通许可(即 licenseForm = 1, licenseMode = 0), pricingMode 字段的取值不能为 once, 即不支持永久云锁许可
  2. 字段 kickOut 仅适用于云锁许可(即 licenseForm = 1). 当 kickOut 设置为 true 时, 表示最后一次许可登录的机器会踢出上一次许可登录的机器(默认); 当 kickOut 设置为 false 时, 表示许可登录后不会被后续机器的许可登录踢出, 直到主动退出后续机器才可以许可登录
  3. 字段 rawResize 表示设置读写区的有效长度, 当软件运行时可能会写入比预设的数据区内容更多的数据时, 则需要对读写区内容进行扩容占位, 该字段值应设置的尽可能符合实际所需, 以提高运行时读写效率, 默认占位字节为 0x00. 例如, 预设的读写区内容为 HelloWorld, 如果软件在运行时向读写区写入 01234567890 时将报错, 因为预设的读写区的有效长度为 1028(HelloWorld 字符串的长度为 10); 此时, 如果设置了 rawResize = 15, 则预设的读写区的有效长度便会被设置为 15(此时读写区实际内容为 HelloWorld 加 5 个 0x00 占位字节), 此时再写入 01234567890 时将是正常的
  4. 设置自动匹配套餐(licenseMode = 2, 且 pricingMode = auto)时, 按照许可条款自动匹配可用的套餐; 优先匹配快要过期或剩余许可数较少的套餐
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData7

Data7

字段名称类型描述
templateIdnumber模板 ID
  • 示例: 请求内容:
{
"templateName": "测试",
"licenseId": 123456,
"licenseForm": 2,
"licenseMode": 0,
"pricingMode": "daily",
"isForever": false,
"licStartTimeType": 0,
"startTime": 1488188325,
"endTime": 1588198325,
"version": 1,
"pub": "AABBCCDD",
"rom": "EEFFAACC",
"raw": "AABB1234",
"modules": [
{
"moduleId": 1,
"moduleName": "测试 1"
},
{
"moduleId": 2,
"moduleName": "测试 2"
}
]
}

响应内容:

{
"desc": "OK",
"code": 0,
"data": {
"templateId": 12
}
}

2. 修改模板

  • 接口地址:

https://openapi.senseyun.com/v2/sv/modifyTemplate

  • 参数:
参数名称必选类型默认值描述
templateIdnumber模板编号
templateNamestring模板名称
syncNameToLicbooleanfalse修改模板名称是否同步至已发许可中
licenseFormnumber许可形式
1-云锁
2-软锁
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestringlicenseMode 为 0 或 2 时必选
订阅模式
对于账户余额, 取值如下:
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 无需传入
对于套餐许可, 指定使用某个套餐时, 取值为对应套餐的序列号; 自动匹配套餐时, 取值 auto
isForeverboolean是否永久许可
licStartTimeTypenumberisForever = false 时必选
时间限制类型
0-具体时间
1-许可发布时间作为开始时间
startTimenumber开始时间, UTC 时间戳(秒)
endTimenumber结束时间, UTC 时间戳(秒)
spanTimenumber时间跨度(天)
counternumberlicenseForm = 1 时生效
许可使用次数, 取值范围: [1, 4294967295]
licDurationnumberlicStartTimeType = 1 时必选
限定时长(天)
offlineDaysnumberlicenseForm = 2 时必选
离线时长(天), 取值范围: [1, 180]
licBindLimitnumberlicenseForm = 2 时必选
同时绑定设备数
licBindMaxLimitnumberlicenseForm = 2 时必选
累积绑定设备数
isOfflinebooleanfalselicenseForm = 2 时生效
是否支持离线
kickOutbooleantruelicenseForm = 1 时生效
是否允许踢出
versionnumber0许可版本
pubstring公开区的 hex 字符串
romstring只读区的 hex 字符串
rawstring读写区的 hex 字符串
dataZonePadModenumber1数据区编辑模式
1-二进制模式
2-Key/Value 模式
kvSeparatorstring:dataZonePadMode = 2 时生效
Key/Value 分隔符, 长度为 1
kvConnectorstring;dataZonePadMode = 2 时生效
Key/Value 连接符, 长度为 1
rawResizenumber重置读写区大小, 取值范围: [读写区数据长度, 65535]
  • 注意事项:
  1. 对于云锁普通许可(即 licenseForm = 1, licenseMode = 0), pricingMode 字段的取值不能为 once, 即不支持永久云锁许可
  2. 字段 kickOut 仅适用于云锁许可(即 licenseForm = 1). 当 kickOut 设置为 true 时, 表示最后一次许可登录的机器会踢出上一次许可登录的机器(默认); 当 kickOut 设置为 false 时, 表示许可登录后不会被后续机器的许可登录踢出, 直到主动退出后续机器才可以许可登录
  3. 字段 rawResize 表示设置读写区的有效长度, 当软件运行时可能会写入比预设的数据区内容更多的数据时, 则需要对读写区内容进行扩容占位, 该字段值应设置的尽可能符合实际所需, 以提高运行时读写效率, 默认占位字节为 0x00. 例如, 预设的读写区内容为 HelloWorld, 如果软件在运行时向读写区写入 01234567890 时将报错, 因为预设的读写区的有效长度为 1028(HelloWorld 字符串的长度为 10); 此时, 如果设置了 rawResize = 15, 则预设的读写区的有效长度便会被设置为 15(此时读写区实际内容为 HelloWorld 加 5 个 0x00 占位字节), 此时再写入 01234567890 时将是正常的
  4. 设置自动匹配套餐(licenseMode = 2, 且 pricingMode = auto)时, 按照许可条款自动匹配可用的套餐; 优先匹配快要过期或剩余许可数较少的套餐
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"templateId": 10,
"templateName": "测试 2",
"licenseForm": 2,
"licenseMode": 0,
"pricingMode": "daily",
"isForever": false,
"licStartTimeType": 0,
"startTime": 1488188325,
"endTime": 1588298325,
"version": 2,
"pub": "AABBCCDD4321",
"rom": "EEFFAACC1234",
"raw": "AABB123456",
"modules": [
{
"moduleId": 1,
"moduleName": "测试 1"
},
{
"moduleId": 2,
"moduleName": "测试 2"
}
]
}

响应内容:

{
"desc": "OK",
"code": 0,
}

3. 按照产品 ID 枚举模板

  • 接口地址:

https://openapi.senseyun.com/v2/sv/templateList

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber产品 ID
currentPagenumber1当前页, 从 1 开始
pageSizenumber10每页数量
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData8

Data8

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
templatesTemplate[]模板信息列表

Template

字段名称类型描述
idnumber模板 ID
templateNamestring模板名称
licenseIdnumber许可 ID
productNamestring产品名称
licenseFormnumber许可形式
1-云锁
2-软锁
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestring订阅模式
daily - 按天收费
yearly - 按年收费
once - 一次性收费
auto - 自动匹配套餐
isForeverboolean是否永久许可
licStartTimeTypenumber时间限制类型
0-具体时间
1-许可发布时间作为开始时间
startTimenumber开始时间, UTC 时间戳(秒)
endTimenumber结束时间, UTC 时间戳(秒)
spanTimenumbner时间跨度(天)
counternumber使用次数
licDurationnumber限定时长
licBindLimitnumber同时绑定设备数
licBindMaxLimitnumber累积绑定设备数
offlineDaysnumber离线时长(天)
pubstring公开区数据的 hex 字符串
romstring只读区数据的 hex 字符串
rawstring读写区数据的 hex 字符串
dataZonePadModenumber数据区编辑模式
1-二进制模式
2-Key/Value 模式
kvSeparatorstringKey/Value 分隔符
kvConnectorstringKey/Value 连接符
rawResizenumber读写区重置大小
modulesModule[]子模块列表
canModifynumber发许可时, 模板的许可限制是否可临时修改
0-不可修改
1-可修改
createTimenumber创建时间, UTC 时间戳(秒)
kickOutboolean是否允许踢出
  • 示例: 请求内容:
{
"licenseID": 1234567890
}

响应内容:

{
"desc": "OK",
"code": 0,
"data": {
"templates": [
{
"id": "1",
"templateName": "测试",
"licenseId": 1234567890,
"productName": "测试",
"isForever": true,
"startTime": 0,
"endTime": 0,
"spanTime": 0,
"times": 0,
"licenseForm": "软锁",
"licenseMode": 0,
"pricingMode": "daily",
"offlineDays": 30,
"licBindLimit": 3,
"modules": [
{
"moduleId": 1,
"moduleName": "1"
},
{
"moduleId": 2,
"moduleName": "2"
}
],
"licDuration": 0,
"licStartTimeType": 0,
"licBindMaxLimit": 128,
"canModify": false,
"version": 1,
"pub": "AABB",
"rom": "CCDD",
"raw": "EEFF",
"dataZonePadMode": 1,
"createtime": 1490695767
}
],
"totalPage": 1,
"totalCount": 1
}
}

4. 按照模板编号查找模板信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/findTemplate

  • 参数:
参数名称必选类型默认值描述
templateIdnumber模板 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataTemplate模板信息
  • 示例: 请求内容:
{
"licenseID": 1234567890
}

响应内容:

{
"desc": "OK",
"code": 0,
"data": {
"id": "1",
"templateName": "测试",
"licenseId": 1234567890,
"productName": "测试",
"licenseMode": 0,
"pricingMode": "daily",
"isForever": true,
"startTime": 0,
"endTime": 0,
"spanTime": 0,
"times": 0,
"licenseForm": "软锁",
"offlineDays": 30,
"licBindLimit": 3,
"modules": [
{
"moduleId": 1,
"moduleName": "1"
},
{
"moduleId": 2,
"moduleName": "2"
}
],
"licDuration": 0,
"licStartTimeType": 0,
"licBindMaxLimit": 128,
"canModify": false,
"version": 1,
"pub": "AABB",
"rom": "CCDD",
"raw": "EEFF",
"dataZonePadMode": 1,
"createtime": 1490695767
}
}

5. 删除模板

  • 接口地址:

https://openapi.senseyun.com/v2/sv/deleteTemplate

  • 参数:
参数名称必选类型默认值描述
templateIdnumber模板 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"licenseID": 1234567890
}

响应内容:

{
"desc": "OK",
"code": 0
}

六. 计费管理接口

1. 获取可用的许可套餐

  • 接口地址:

https://openapi.senseyun.com/v2/sv/getAvailableLicensePackage

  • 说明: 获取已经购买的并且当前可用的许可套餐信息列表

  • 参数:

参数名称必选类型默认值描述
licenseFormnumber许可形式:
1-云锁
2-软锁
currentPagenumber1当前页
pageSizenumber10每页数量
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData9

Data9

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
rowsLicensePackage[]许可套餐列表

LicensePackage

字段名称类型描述
namestring套餐名称
guidstring套餐序列号
platformnumber系统平台
7: 传统(Windows/x86 Linux/MacOS)
24: 智能(Android/ARM Linux)
当许可套餐的许可形式为软锁时返回此字段
surplusnumber套餐的剩余可用量, 有数量限制的许可套餐会返回此字段
deadlinestring套餐的到期时间, 有时间限制的许可套餐会返回此字段
  • 示例: 请求内容:
{
"licenseForm": 1,
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"data": {
"totalPage": 1,
"rows": [
{
"surplus": 10,
"name": "云锁 30 天试用",
"guid": "a9606bc320974fa989571e65e230cb58",
"deadline": "2019-05-07 23:59:59"
}
],
"totalCount": 1
},
"desc": "成功"
}

2. 获取账户余额信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/getAvailableLicensePackage

  • 参数: 无

  • 响应:

字段名称类型描述
codenumber状态码
descstring结果描述
dataAccountBalance

AccountBalance

字段名称类型描述
totalBalancenumber账户可用余额总额
topupBalancenumber可用充值余额
voucherBalancenumber可用赠送余额
  • 示例: 请求内容:
{ }

响应内容:

{
"code": 0,
"data": {
"totalBalance": 150,
"topupBalance": 100,
"voucherBalance": 50
},
"desc": "成功"
}

3. 获取账单信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/getBillInfo

  • 说明: 获取已经扣款的许可账单信息

  • 参数:

参数名称必选类型默认值描述
licenseCategorynumber许可类型:
1-账号许可
2-授权码许可
userAccountstring许可类型为账号许可时, 填写用户账号(手机/邮箱/影子账号);
许可类型为授权码时, 填写授权码
licenseIdnumber许可 ID
payTimeBeginnumber扣款开始时间, UTC 时间戳(秒)
payTimeEndnumber扣款结束时间, UTC 时间戳(秒)
currentPagenumber1当前页数, 从 1 开始
pageSizenumber10每页数量, 取值范围: [1, 100]
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData10

Data10

字段名称类型描述
totalPagenumber总页数
pageSizenumber总条数
rowsBill[]账单列表

Bill

字段名称类型描述
billNostring账单编号
licenseIdnumber许可 ID
licenseModenumber扣费方式
1-账户余额
2-赠送许可
licenseFormnumber许可形式
1-云锁 2-软锁
userAccountstring用户账号或授权码
pricingModestring订阅模式
daily - 按天收费
yearly - 按年收费
once - 一次性收费
reasonstring扣费原因
distribute - 发布许可
update - 更新许可
licenseAmountnumber许可金额
licenseBindAmountnumber绑定设备金额
licenseBorrowAmountnumber许可借阅金额
amountnumber预估费用
dealAmountnumber实扣金额
deductAtstring扣款时间(yyyy-MM-dd HH:mm:ss)
statusstring扣款状态
paid - 已扣款
platformnumber系统平台
7: 传统(Windows/x86 Linux/MacOS)
24: 智能(Android/ARM Linux)
createAtstring创建时间(yyyy-MM-dd HH:mm:ss)
  • 示例: 请求内容:
{
"licenseCategory": 2,
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"data": {
"totalPage": 1,
"totalCount": 1,
"rows": [
{
"amount": 2433,
"billNo": "B041000000000000620210924112525120",
"createAt": "2021-09-24 11:25:25",
"dealAmount": 2433,
"deductAt": "2021-09-24 11:26:23",
"licenseAmount": 58,
"licenseBindAmount": 2375,
"licenseBorrowAmount": 0,
"licenseForm": 2,
"licenseId": 2021092401,
"licenseMode": 0,
"platform": 7,
"pricingMode": "once",
"reason": "distribute",
"status": "paid",
"userAccount": "B4TT-P4PF-7RW6-XVM5"
}
]
},
"desc": "成功"
}

七. 云软许可管理接口

1. 不依赖模板发布许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/issueLicenseByProduct

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber产品(许可) ID, 取值范围: [1, 4294967295], 必须在平台上存在
isForeverboolean是否永久许可
licenseFormnumber许可形式
1-云锁
2-软锁
userAccountstring用户账号(绑定的手机/邮箱皆可)
versionnumber0许可版本
startTimenumber开始时间, UTC 时间戳(秒)
endTimenumber结束时间, UTC 时间戳(秒)
spannumber时间跨度(天)
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestringlicenseMode 为 0 或 2 时必选
订阅模式
对于账户余额, 取值如下:
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 无需传入
对于套餐许可, 指定使用某个套餐时, 取值为对应套餐的序列号; 自动匹配套餐时, 取值为 auto
counternumberlicenseForm = 1 时生效
许可使用次数
offlineDaysnumberlicenseForm = 2 时必选
离线时长(天), 取值范围: [1, 180]
licBindLimitnumberlicenseForm = 2 时必选
同时绑定设备数
licBindMaxLimitnumberlicenseForm = 2 时必选
累积绑定设备数
isOfflinebooleanfalselicenseForm = 2 时生效
是否支持离线
kickOutbooleantruelicenseForm = 1 时生效
是否允许踢出
moduleModule[]子模块列表
pubstring公开区的 hex 字符串
romstring只读区的 hex 字符串
rawstring读写区的 hex 字符串
dataZonePadModenumber1数据区编辑模式
1-二进制模式
2-Key/Value 模式
kvSeparatorstring:dataZonePadMode = 2 时生效
Key/Value 分隔符, 长度为 1
kvConnectorstring;dataZonePadMode = 2 时生效
Key/Value 连接符, 长度为 1
rawResizenumber重置读写区大小, 取值范围: [读写区数据长度, 65535]
remarkstring备注
contractNostring合同编号
tagIdsarray标签 ID 列表
  • 注意事项:
  1. 输入参数 userAccount 对于普通用户是指添加用户时的邮箱或手机号, 对于影子账号是指添加影子账号是返回的 userAccount 值;
  2. 字段 kickOut 仅适用于云锁许可(即 licenseForm = 1). 当 kickOut 设置为 true 时, 表示最后一次许可登录的机器会踢出上一次许可登录的机器(默认); 当 kickOut 设置为 false 时, 表示许可登录后不会被后续机器的许可登录踢出, 直到主动退出后续机器才可以许可登录
  3. 字段 rawResize 表示设置读写区的有效长度, 当软件运行时可能会写入比预设的数据区内容更多的数据时, 则需要对读写区内容进行扩容占位, 该字段值应设置的尽可能符合实际所需, 以提高运行时读写效率, 默认占位字节为 0x00. 例如, 预设的读写区内容为 HelloWorld, 如果软件在运行时向读写区写入 01234567890 时将报错, 因为预设的读写区的有效长度为 1028(HelloWorld 字符串的长度为 10); 此时, 如果设置了 rawResize = 15, 则预设的读写区的有效长度便会被设置为 15(此时读写区实际内容为 HelloWorld 加 5 个 0x00 占位字节), 此时再写入 01234567890 时将是正常的
  4. 设置自动匹配套餐(licenseMode = 2, 且 pricingMode = auto)时, 按照许可条款自动匹配可用的套餐; 优先匹配快要过期或剩余许可数较少的套餐
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData11

Data11

字段名称类型描述
costnumber许可预估费用
  • 示例: 请求内容:
{
"licenseId": 10,
"isForever": false,
"licenseForm": 2,
"licenseMode": 0,
"pricingMode": "daily",
"userAccount": "abc@163.com",
"span": 20,
"offlineDays": 10,
"licBindLimit": 12,
"licBindMaxLimit": 120,
"module": [
1,
3,
4
],
"rom": "4256ef",
"raw": "542136ff",
"pub": "25364787df"
}

响应内容:

{
"desc": "成功",
"code": 0,
"data": {
"cost": 5.00
}
}

2. 依赖模板发布许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/issueLicense

  • 参数:
参数名称必选类型默认值描述
templateIdnumber模板 ID
userAccountstring用户账号
  • 注意事项:
  1. 输入参数 userAccount 对于普通用户是指添加用户时的邮箱或手机号, 对于影子账号是指添加影子账号是返回的 userAccount
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData11
  • 示例: 请求内容:
{
"templateId": 10,
"userAccount": "abc@163.com"
}

响应内容:

{
"desc": "成功",
"code": 0,
"data": {
"cost": 3.00
}
}

3. 更新(修改)已发许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/updateLicense

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber产品(许可) ID, 取值范围: [1, 4294967295], 必须在平台上存在
userAccountstring用户账号(绑定的手机/邮箱皆可)
licenseFormnumber许可形式
1-云锁
2-软锁
pricingModestringlicenseMode 为 0 或 2 时必选
订阅模式
对于账户余额, 取值如下:
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 无需传入
对于套餐许可, 指定使用某个套餐时, 取值为对应套餐的序列号
versionobject0许可版本, 不传入则不修改; 有两个属性: op, value, op 目前只能为 set, value 为许可版本号, 取值范围[0, 4294967295]
endTimeobject许可结束时间. 有两个属性: op, value, op 可选值为 set/inc/dec/disable, set 为设置许可结束时间为 value 值, inc 为在已有结束时间基础上增加 value 值, desc 为在已有结束时间上减少 value 值, disable 为禁用此项; value 为秒数
spanobject时间跨度(天). 有两个属性: op, value, op 可选值为 set/inc/dec, set 为设置时间跨度为 value 值, inc 为在已有时间跨度上增加 value 值, dec 为在已有时间跨度上减少 value 值, value 为修改许可的时间跨度值, 取值范围: [1, 18250]
counterobjectlicenseForm = 1 时生效
许可使用次数, 有两个属性: op, value, op 目前只能为 set, value 为使用次数值
offlineDaysobjectlicenseForm = 2 时必选
离线时长(天), 有两个属性: op, value, op 目前只能为 set, value 为离线时长天数
licBindLimitobjectlicenseForm = 2 时必选
同时绑定设备数, 有两个属性: op, value, op 目前只能为 set, value 为设备数
licBindMaxLimitobjectlicenseForm = 2 时必选
累积绑定设备数, 有两个属性: op, value, op 目前只能为 set, value 为设备数
isOfflinebooleanfalselicenseForm = 2 时生效
是否支持离线
kickOutbooleantruelicenseForm = 1 时生效
是否允许踢出
moduleobject子模块列表, 有两个属性: op, value, op 可选值为 set/inc/dec/disable, set 为设置模块, inc 为增加模块, dec 为去掉模块, disable 为清空模块; value 为 array, 取值范围: [1, 64]
pubobject公开区, 只有一个属性: data, 为该数据区的 hex 字符串
romobject只读区, 只有一个属性: data, 为该数据区的 hex 字符串
rawobject读写区, 只有一个属性: data, 为该数据区的 hex 字符串
dataZonePadModenumber1数据区编辑模式
1-二进制模式
2-Key/Value 模式
kvSeparatorstring:dataZonePadMode = 2 时生效
Key/Value 分隔符, 长度为 1
kvConnectorstring;dataZonePadMode = 2 时生效
Key/Value 连接符, 长度为 1
rawResizenumber重置读写区大小, 取值范围: [读写区数据长度, 65535]
remarkstring备注
contractNostring合同编号
tagIdsarray标签 ID 列表. 不传入则不作修改; 传入空列表则清空标签
  • 注意事项:
  1. 输入参数 userAccount 对于普通用户是指添加用户时的邮箱或者手机; 对于影子账号是指添加影子账号时返回的 userAccount
  2. 在许可有效期内可以免费更新 12 次, 超过 12 次后需要购买许可更新次数包, 每更新一次扣除一次
  3. 字段 pricingMode 表示订阅模式, 目前只能对软锁许可(即 licenseForm 为 2), 且扣费方式为账户余额(即 licenseMode 为 0)的许可修改, 只允许从按天或按年修改为一次性. 按此修改时, 更新所需费用会减去已支付的部分费用
  4. 字段 kickOut 仅适用于云锁许可(即 licenseForm = 1). 当 kickOut 设置为 true 时, 表示最后一次许可登录的机器会踢出上一次许可登录的机器(默认); 当 kickOut 设置为 false 时, 表示许可登录后不会被后续机器的许可登录踢出, 直到主动退出后续机器才可以许可登录
  5. 字段 rawResize 表示设置读写区的有效长度, 当软件运行时可能会写入比预设的数据区内容更多的数据时, 则需要对读写区内容进行扩容占位, 该字段值应设置的尽可能符合实际所需, 以提高运行时读写效率, 默认占位字节为 0x00. 例如, 预设的读写区内容为 HelloWorld, 如果软件在运行时向读写区写入 01234567890 时将报错, 因为预设的读写区的有效长度为 1028(HelloWorld 字符串的长度为 10); 此时, 如果设置了 rawResize = 15, 则预设的读写区的有效长度便会被设置为 15(此时读写区实际内容为 HelloWorld 加 5 个 0x00 占位字节), 此时再写入 01234567890 时将是正常的
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData12

Data12

字段名称类型描述
licenseIdnumber许可 ID
userAccountstring用户账号
licenseFormnumber许可形式
1-云锁
2-软锁
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestring订阅模式
对于账户余额, 取值如下:
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 该字段无实际意义
对于套餐许可, 取值为对应套餐的序列号
isForeverboolean是否永久许可
versionnumber许可版本
startTimestring许可开始时间(yyyy-MM-dd HH:mm:ss)
endTimestring许可结束时间(yyyy-MM-dd HH:mm:ss)
spannumber时间跨度(天)
offlineDaysnumber离线时长(天)
licBindLimitnumber同时绑定设备数
licBindMaxLimitnumber累积绑定设备数
romstring只读区 hex 字符串
rawstring读写区 hex 字符串
pubstring公开区 hex 字符串
remarkstring备注
contractNostring合同编号
tagsarray标签列表
costnumber本次更新所需费用
  • 示例: 请求内容:
{
"licenseId": "1024",
"userAccount": "user@account.com",
"licenseForm": 2,
"version": {
"op": "set",
"value": 1
},
"endTime": {
"op": "dec",
"value": 200
},
"span": {
"op": "set",
"value": 123456789
},
"offlineDays": {
"op": "set",
"value": 10
},
"licBindLimit": {
"op": "set",
"value": 2
},
"licBindMaxLimit": {
"op": "set",
"value": 3
},
"module": {
"op": "set",
"value": [ 1, 2, 3, 64 ]
},
"rom": {
"data": "1234"
},
"raw": {
"data": "1234"
},
"pub": {
"data": "123456"
},
"remark": "备注信息",
"contractNo": "合同编号 1023",
"tagIds": [ 1, 2 ]
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"licenseId": "1024",
"userAccount": "user@account.com",
"isForever": false,
"licenseForm": 2,
"licenseMode": 0,
"pricingMode": "yearly",
"version": 1,
"startTime": "yyyy-MM-dd HH:mm:ss",
"endTime": "yyyy-MM-dd HH:mm:ss",
"licDuration": 5,
"span": 3,
"offlineDays": 5,
"licBindLimit": 5,
"licBindMaxLimit": 5,
"module": [ 49, 1, 3, 5 ],
"rom": "xxxxx",
"raw": "xxxxx",
"pub": "xxxxx",
"remark": "备注信息",
"contractNo": "合同编号 1023",
"tags": [
{
"id": 1,
"name": "标签 1"
},
{
"id": 2,
"name": "标签 2"
}
],
"cost": 2
}
}

4. 删除许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/deleteLicense

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber许可 ID
userAccountstring用户账号
licenseFormnumbner许可形式: 1-云锁 2-软锁
  • 注意事项:
  1. 输入参数 userAccount 对于普通用户是指添加用户时的邮箱或者手机; 对于影子账号是指添加影子账号时返回的 userAccount
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"licenseId": 1,
"userAccount": "abc@163.com",
"licenseForm": 1
}

响应内容:

{
"desc": "成功",
"code": 0
}

5. 搜索许可(许可签发时的状态, 并非当前使用中的状态)

  • 接口地址:

https://openapi.senseyun.com/v2/sv/licenseList

  • 参数:
参数名称必选类型默认值描述
userAccountstring用户账号, 支持模糊查找
userIdstring用户 ID
licenseIdsarray许可 ID 列表
licenseFormsarray许可形式列表
currentPagenumber1当前页, 从 1 开始
pageSizenumber10每页数量
  • 注意事项:
  1. 输入参数 userAccount 对于普通用户是指添加用户时的邮箱或者手机; 对于影子账号是指添加影子账号时返回的 userAccount
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData13

Data13

字段名称类型描述
totalPagenumber总页数
pageSizenumber总条数
licensesLicense[]许可列表

License

字段名称类型描述
idnumber许可唯一编号
licenseIdnumber许可 ID
productNamestring产品名称
tempIdnumber模板 ID
templateNamestring模板名称
userIdstring用户 ID
emailstring用户邮箱
userNamestring用户名称
licenseFormnumber许可形式
licenseModenumber扣费方式
pricingModestring订阅模式
licenseFormDescstring许可形式的描述, 云锁/软锁
isForeverboolean是否永久
isForeverDescstring对是否永久的描述
hasStartTimeboolean是否有开始时间
startTimenumber开始时间, UTC 时间戳(秒)
hasEndTimeboolean是否有结束时间
endTimenumber结束时间, UTC 时间戳(秒)
hasSpanTimeboolan是否有时间跨度
spanTimenumber时间跨度(天)
hasCounterboolean是否有使用次数
counternumber使用次数
licBindLimitnumber同时绑定设备数
licBindMaxLimitnumber累积绑定设备数
hasLicDurationboolean是否有限定时长
licDurationnumber限定时长(天)
licStartTimeTypenumber时间限制类型
modulesarray子模块列表
statusnumber许可状态
1-正常
5-已锁定
6-审批中
7-已拒绝
pubLicenseGuidstring许可 guid
createTimenumber创建时间, UTC 时间戳(秒)
kickOutboolean是否允许踢出
romstring只读区 hex 字符串
rawstring读写区 hex 字符串
pubstring公开区 hex 字符串
kvSeparatorstringKey/Value 分隔符
kvConnectorstringKey/Value 连接符
rawResizenumber重置读写区大小
remarkstring备注信息
contractNostring合同编号
tagsarray标签信息
  • 示例: 请求内容:
{
"userAccount": "demo1@test.com",
"userId": "",
"licenseIds": [
"123456",
"12345"
],
"licenseForms": [ 1, 2, 3 ],
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"licenses": [
{
"id": 567,
"licenseId": 88888,
"productName": "测试产品",
"tempId": 123,
"templateName": "测试模板",
"userId": "543606e09d8c48c48ebf34d008379e60",
"email": "demo1@test.com",
"userName": "测试账号",
"licenseForm": 1,
"licenseFormDesc": "云锁",
"isForever": 0,
"isForeverDesc": "非永久",
"hasStartTime": true,
"startTime": 1488188325,
"hasEndTime": true,
"endTime": 1489188325,
"hasSpanTime": false,
"spanTime": 0,
"hasTimes": false,
"licenseMode": 0,
"pricingMode": "yearly",
"times": 0,
"licBindMaxLimit": 0,
"licBindMaxLimitDesc": "无限制",
"hasLicDuration": false,
"licDuration": 0,
"licStartTimeType": 0,
"modules": [
{
"moduleId": 1,
"moduleName": "测试 1"
},
{
"moduleId": 2,
"moduleName": "测试 2"
}
],
"status": 1,
"pubLicenseGuid": "6318d834602a472db4b8333acea94573",
"createTime": 1490695767,
"remark": "标签信息",
"contractNo": "合同编号 1023",
"tags": [
{
"id": 1,
"name": "标签 1"
},
{
"id": 2,
"name": "标签 2"
}
]
}
],
"totalPage": 1,
"totalCount": 1
}
}

6. 获取指定的软锁许可的信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/softLockLicenseInfo

  • 参数:
参数名称必选类型默认值描述
licenseGuidstring许可 guid
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataLicense
  • 示例: 请求内容:
{
" licenseGuid": "6318d834602a472db4b8333acea94573"
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"id": 567,
"licenseId": 88888,
"productName": "测试产品",
"tempId": 123,
"templateName": "测试模板",
"userId": "543606e09d8c48c48ebf34d008379e60",
"email": "demo1@test.com",
"userName": "测试账号",
"licenseForm": 1,
"licenseFormDesc": "云锁",
"isForever": 0,
"isForeverDesc": "非永久",
"hasStartTime": true,
"startTime": 1488188325,
"hasEndTime": true,
"endTime": 1489188325,
"hasSpanTime": false,
"pricingMode": "yearly",
"licenseMode": 0,
"spanTime": 0,
"hasTimes": false,
"times": 0,
"licBindMaxLimit": 0,
"licBindMaxLimitDesc": "无限制",
"hasLicDuration": false,
"licDuration": 0,
"licStartTimeType": 0,
"modules": [
{
"moduleId": 1,
"moduleName": "测试 1"
},
{
"moduleId": 2,
"moduleName": "测试 2"
}
],
"status": 1,
"dataZonePadMode": 1,
"pubLicenseGuid": "6318d834602a472db4b8333acea94573",
"createTime": 1490695767
}
}

7. 获取软锁许可的绑定机器信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/softLockbindList

  • 参数:
参数名称必选类型默认值描述
licenseGuidstring许可 guid
currentPagenumber1当前页数, 从 1 开始
pageSizenumber10每页数量
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData14

Data14

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
bindListSoftLockBind[]绑定列表

SoftLockBind

字段名称类型描述
idnumber绑定记录编号
endUserGuidstring用户 ID
offlineExpireTimenumber许可离线有效期截至时间, UTC 时间戳(秒)
licenseGuidstring许可 guid
hardwareNamestring绑定的设备名称
hardwareMacListstring绑定设备的 mac 地址列表, 逗号分隔
createAtnumber绑定时间, UTC 时间戳(秒)
bindStatusnumber绑定状态:
1-已绑定
2-已主动解绑
3-服务端标记为强制解绑
4-已强制解绑
5-许可被新许可替换
6-已被新的绑定记录覆盖
hardwareUserNamestring绑定设备(计算机)系统用户名
lastRefreshNamenumber上一次激活时间, UTC 时间戳(秒)
machineIdstring机器 ID
devIdstring开发者 ID
hardwareInternetIpstring绑定设备的公网 IP
licNumberIdnumber许可 ID
hardwareIpListstring绑定设备的 IP 地址列表, 逗号分隔
updateAtnumber绑定记录更新时间, UTC 时间戳(秒)
  • 示例: 请求内容:
{
"licenseGuid": "6318d834602a472db4b8333acea94573",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"bindList": [
{
"id": "5d91e1256ee847678269ce5c446b4e36",
"endUserGuid": "ba28b2ef15604f0988c182c335d5ae30",
"offlineExpireTime": 1496152668,
"offlineDays": 77,
"licenseGuid": "dc13cd8886104599b997992b0e3220c7",
"hardwareName": "LIYJ-PC",
"hardwareMacList": "6C-71-D9-DE-15-E9",
"createAt": 156424452000,
"updateAt": 15525463550,
"bindStatus": 1,
"hardwareUserName": "abc@163.com",
"lastRefreshTime": 1489499868,
"hardwareId": "",
"machineId": "asadfeaf1452145",
"devId": "0700000000000098",
"hardwareInternetIp": "114.253.35.223",
"licNumberId": 777,
"hardwareIpList": "192.168.1.107"
}
],
"totalPage": 1,
"totalCount": 1
}
}

8. 获取指定的软锁许可的累积绑定设备信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/softLockBoundInfo

  • 参数:
参数名称必选类型默认值描述
licenseGuidstring许可 guid
currentPagenumber1当前页数, 从 1 开始
pageSizenumber10每页数量
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData15

Data15

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
rowsSoftLockBound[]绑定列表

SoftLockBound

字段名称类型描述
bindIdstring绑定记录 ID
machineIdstring机器 ID
pcNamestring绑定机器名称
macstring绑定机器的 mac 地址列表, 逗号分隔
localIpstring绑定机器的局域网 IP
bindStatusnumber绑定状态
1-已绑定
2-已手动解绑(在线)
3-强制解绑中(WEB 发起)
4-已自动解绑
5-已绑定(待更新许可)
7-已手动解绑(离线)
8-强制解绑中(API 发起)
10-自动解绑中(许可已删除)
11-自动解绑中(重新签发许可)
bindTimestring许可绑定时间
statusChangeTimestring上一次状态变更时间
offlineExpireTimestring许可离线有效期截止时间
lastRefreshTimestring上一次激活时间
  • 示例: 请求内容:
{
"licenseGuid": "6318d834602a472db4b8333acea94573",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"bindList": [
{
"bindId": "7071d816f5cc4035a155c74267c4ed3f",
"bindStatus": 1,
"bindTime": "2023-01-28 17:03:02",
"lastRefreshTime": "2023-01-28 17:03:02",
"localIp": "10.10.1.134",
"mac": "D0-8E-79-0F-96-ED",
"machineId": "52e22d84ab152c387b9e8d96b6111351eb4bd014e92580e1f53bae70c99f53ba",
"offlineExpireTime": "2023-02-08 17:03:02",
"pcName": "PC",
"statusChangeTime": "2023-01-28 17:03:02"
}
],
"totalPage": 1,
"totalCount": 1
}
}

9. 获取指定的软锁许可的绑定历史信息(包含解绑信息)

  • 接口地址:

https://openapi.senseyun.com/v2/sv/softLockbindHistory

  • 参数:
参数名称必选类型默认值描述
licenseGuidstring许可 guid
currentPagenumber1当前页数, 从 1 开始
pageSizenumber10每页数量
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData16

Data15

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
rowsSoftLockBindHistory[]绑定列表

SoftLockBindHistory

字段名称类型描述
idstring绑定记录 ID
endUserGuidstring用户 ID
offlineExpireTimenumber许可离线有效期截止时间, UTC 时间戳(秒)
offlineDaysnumber许可离线时长(天)
licenseGuidstring许可 guid
hardwareNamestring绑定的机器名称
hardwareMacListstring绑定机器的 mac 地址列表, 逗号分隔
createAtnumber绑定时间, UTC 时间戳(秒)
bindStatusnumber绑定状态
1-已绑定
2-已手动解绑(在线)
3-强制解绑中(WEB 发起)
4-已自动解绑
5-已绑定(待更新许可)
7-已手动解绑(离线)
8-强制解绑中(API 发起)
10-自动解绑中(许可已删除)
11-自动解绑中(重新签发许可)
hardwareUserNamestring绑定计算机的系统用户名
lastRefreshTimenumber上次激活时间, UTC 时间戳(秒)
machineIdstring机器 ID
devIdstring开发者 ID, hex 形式
hardwareInternetIpstring绑定机器的公网 IP
licNumberIdnumber许可 ID
hardwareIpListstring绑定机器的局域网 IP 列表, 逗号分隔
updateAtnumber绑定状态更新时间, UTC 时间戳(秒)
  • 示例: 请求内容:
{
"licenseGuid": "6318d834602a472db4b8333acea94573",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"bindList": [
{
"id": "5d91e1256ee847678269ce5c446b4e36",
"endUserGuid": "ba28b2ef15604f0988c182c335d5ae30",
"offlineExpireTime": 1496152668,
"offlineDays": 77,
"licenseGuid": "dc13cd8886104599b997992b0e3220c7",
"hardwareName": "LIYJ-PC",
"hardwareMacList": "6C-71-D9-DE-15-E9",
"historyCreateAt": "2017-01-14 17:44:49",
"bindStatus": 1,
"hardwareUserName": "abc@163.com",
"lastRefreshTime": 1489499868,
"machineId": "41253135462145sdsafd",
"createAt": 15625562212552,
"updateAt": 1521252222,
"devId": "0700000000000098",
"hardwareInternetIp": "114.253.35.223",
"licNumberId": 777,
"hardwareIpList": "192.168.1.107"
}
],
"totalPage": 1,
"totalCount": 1
}
}

10. 获取具体机器的软锁许可的最新绑定(解绑)信息

  • 接口地址:

https://openapi.senseyun.com/v2/sv/softLockbindMachineList

  • 参数:
参数名称必选类型默认值描述
licenseGuidstring许可 guid
machineIdstring机器 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataSoftLockBindHistory
  • 示例: 请求内容:
{
"licenseGuid": "6318d834602a472db4b8333acea94573",
"machineId": "6219d834602a472db4b8333acea94573"
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"id": "5d91e1256ee847678269ce5c446b4e36",
"endUserGuid": "ba28b2ef15604f0988c182c335d5ae30",
"offlineExpireTime": 1496152668,
"offlineDays": 77,
"licenseGuid": "dc13cd8886104599b997992b0e3220c7",
"hardwareName": "LIYJ-PC",
"hardwareMacList": "6C-71-D9-DE-15-E9",
"createAt": 15212454224412,
"bindStatus": 1,
"hardwareUserName": "abc@163.com",
"lastRefreshTime": 1489499868,
"machineId": "asdfae14255202",
"devId": "0700000000000098",
"hardwareInternetIp": "114.253.35.223",
"licNumberId": 777,
"hardwareIpList": "192.168.1.107",
"updateAt": 1520150454452
}
}

11. 获取具体机器的软锁许可的绑定历史信息(包含解绑信息)

  • 接口地址:

https://openapi.senseyun.com/v2/sv/softLockbindMachineHistory

  • 参数:
参数名称必选类型默认值描述
licenseGuidstring许可 guid
machineIdstring机器 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData16

Data16

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
bindListSoftLockBindHistory[]绑定列表
  • 示例: 请求内容:
{
"licenseGuid": "6318d834602a472db4b8333acea94573",
"machineId": "6219d834602a472db4b8333acea94573"
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"bindList": [
{
"id": "5d91e1256ee847678269ce5c446b4e36",
"endUserGuid": "ba28b2ef15604f0988c182c335d5ae30",
"offlineExpireTime": 1496152668,
"offlineDays": 77,
"licenseGuid": "dc13cd8886104599b997992b0e3220c7",
"hardwareName": "LIYJ-PC",
"hardwareMacList": "6C-71-D9-DE-15-E9",
"historyCreateAt": "2017-01-14 17:44:49",
"bindStatus": 1,
"hardwareUserName": "abc@163.com",
"lastRefreshTime": 1489499868,
"machineId": "asdfeeeejkj555",
"devId": "0700000000000098",
"ceateAt": 152552255,
"updateAt": 1533536266336,
"hardwareInternetIp": "114.253.35.223",
"licNumberId": 777,
"hardwareIpList": "192.168.1.107"
}
],
"totalPage": 1,
"totalCount": 1
}
}

12. 解绑软锁许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/softLockUnbind

  • 参数:
参数名称必选类型默认值描述
bindIdstring绑定记录 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"bindId": "5d91e1256ee847678269ce5c446b4e36"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

13. 获取指定许可的当前使用状态

  • 接口地址:

https://openapi.senseyun.com/v2/sv/licenseUseInfo

  • 参数:
参数名称必选类型默认值描述
licenseIdnumber许可 ID
licenseFormnumber许可形式: 1-云锁, 2-软锁
userAccountstring用户账号
  • 注意事项:
  1. 输入参数 userAccount 对于普通用户是指添加用户时的邮箱或手机号, 对于影子账号是指添加影子账号时返回的 userAccount 字段值;
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataLicenseUseInfo

LicenseUseInfo

字段名称类型描述
isUsedboolean是否已使用
isExpiredboolean是否已过期
expiredTimenumber许可过期时间, UTC 时间戳(秒)
startTimenumber许可开始时间, UTC 时间戳(秒)
endTimenumber许可结束时间, UTC 时间戳(秒)
spanTimenumber时间跨度(天)
firstUseTimenumber仅云锁支持 可首次使用时间, UTC 时间戳(秒)
usedCountnumber仅云锁支持 已使用次数, 仅当设置了许可使用次数时才返回
remainderCountnumber仅云锁支持 剩余使用次数, -1 代表无设置
licBindLimitnumber仅软锁支持 同时绑定设备数
licBindMaxLimitnumber仅软锁支持 累积绑定设备数
licBindCountnumber仅软锁支持 已绑定设备数
firstBindTimenumber仅软锁支持 首次绑定时间, UTC 时间戳(秒)
  • 示例: 请求内容:
{
"licenseId": "325",
"licenseForm": 2,
"userAccount": "addf904@qq.com"
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"isExpired": false,
"expiredTime": 1563614455000,
"startTime": 1562478545500,
"endTime": 1592478545300,
"spanTime": 30,
"isUsed": true,
"firstBindTime": 1563614155000,
"licBindMaxLimit": 100,
"licBindLimit": 20,
"licBindCount": 5
}
}

14. 获取账号许可使用情况

  • 接口地址:

https://openapi.senseyun.com/v2/sv/getAccountLicenseUsage

  • 说明: 获取指定用户账号下的所有许可 ID 的实际使用情况.

  • 参数:

参数名称必选类型默认值描述
userAccountstring用户账号
currentPagenumber1当前页, 从 1 开始
pageSizenumber10每页数量, 取值范围: [1, 100]
  • 注意事项:
  1. 输入参数 userAccount 对于普通用户是指添加用户时的邮箱或手机号, 对于影子账号是指添加影子账号时返回的 userAccount 字段值;
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataData17

Data17

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
licensesAccountLicenseUsage[]

AccountLicenseUsage

字段名称类型描述
licenseIdnumber许可 ID
productNamestring产品名称
licenseFormnumber许可形式, 1-云锁, 2-软锁
isUsedboolean是否已使用
isForeverboolean是否永久许可
isExpiredboolean是否已过期
expiredTimenumber许可过期时间, UTC 时间戳(秒)
startTimenumber许可开始时间, UTC 时间戳(秒)
endTimenumber许可结束时间, UTC 时间戳(秒)
spanTimenumber时间跨度(天)
counternumber使用次数
firstUseTimenumber仅云锁支持 许可首次使用时间, UTC 时间戳(秒)
remainderCountnumber仅云锁支持 剩余使用次数
licBindLimitnumber仅软锁支持 同时绑定设备数
licBindMaxLimitnumber仅软锁支持 累积绑定设备数
licBindCountnumber仅软锁支持 已绑定设备数
firstBindTimenumber仅软锁支持 首次绑定时间, UTC 时间戳(秒)
  • 示例: 请求内容:
{
"userAccount": "zhangsan@163.com",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"data": {
"licenses": [
{
"licBindLimit": 5,
"licBindMaxLimit": 5,
"licBindCount": 1,
"licBindMaxCount": 1,
"bindingCount": 1,
"maxBound": 5,
"maxBinding": 5,
"licenseForm": 2,
"spanTime": 180,
"expiredTime": 1555141552,
"isUsed": true,
"productName": "计算器",
"isForever": false,
"boundCount": 1,
"firstBindTime": 1539589552,
"isExpired": false,
"licenseId": 888
},
{
"licBindLimit": 5,
"licBindMaxLimit": 5,
"licBindCount": 0,
"licBindMaxCount": 1,
"bindingCount": 0,
"maxBound": 5,
"maxBinding": 5,
"licenseForm": 2,
"spanTime": 5,
"expiredTime": 1540727868,
"isUsed": true,
"productName": "绘图",
"isForever": false,
"boundCount": 1,
"firstBindTime": 1540295868,
"endTime": 1572537599,
"isExpired": true,
"licenseId": 999
},
{
"licenseForm": 1,
"spanTime": 100,
"isUsed": false,
"productName": "计算器",
"isForever": false,
"isExpired": false,
"licenseId": 888
}
],
"totalPage": 1,
"totalCount": 3
},
"desc": "成功"
}

15. 使用 C2D 反查许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/findBoundSoftLicenseByC2d

  • 说明: 获取指定用户账号下的所有许可 ID 的实际使用情况.

  • 参数: 请将 C2D 内容作为请求的 body 直接传入

  • 注意事项:

  1. 由 Virbox 用户工具导出的 C2D 文件具有时效性, 默认时效是 24 小时, 超过便失效, 因 此在调用该接口时请确保得到的 C2D 文件是最新导出的文件, 否则接口会返回相应的错误
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataAccountSoftLicenseC2dLookupResult[]

AccountSoftLicenseC2dLookupResult

字段名称类型描述
accountstring用户账号
descstring备注信息
templateNamestring模板名称
productNamestring产品名称
licenseIdnumber许可 ID
isForeverboolean是否永久
startTimestring许可开始时间(yyyy-MM-dd HH:mm:ss)
endTimestring许可结束时间(yyyy-MM-dd HH:mm:ss)
createTimestring许可签发时间(yyyy-MM-dd HH:mm:ss)
  • 示例: 请求内容:
{
"version": 3,
"c2dType": 1,
"pcName": "DESKTOP-S9216",
"os": "MicrosoftWindows10(build9200)x64",
"ip": "1.2.3.4",
"mac": "AA-AA-AA-AA-AA-AA",
"machineId": "72365cc425626ccd8b8f3bd6a23ad78db3f55cbfb2d7787fe28c4497c5b6155c",
"reqData": "AgAAALuyTWEkbiT1Ccy6GpGLyUJXXVuIFz3baZW6t1nSx9/tUSCPzIv4rcKbzeYnbgaOJI2mGycwLACETor1k3zH33yaKEPXwcszdPqQuSu9mND/8gjC/GEgrMtksVKG7RGIlKh8x1c61TLhXHICzHTR5basZFD7tJDhLJFKCrOmFudb32enBpp8H9QNkjFSo0EZDWV5IoElDkwxcOBFY+OygtQt6MyqxGZ9ND5Q4MdqC5/xPOL7jswV02IRCCE7Vb3M+WpqePIEAO4X0MHCNhZvpInG5hN3z98lDBg08u/iSbyQdwIFKHEVP1be74+P58UiuVwMdIgHl59P5E5b/KZnZVTTRgf5+5n7eHrl9uZezM+kXmD0jLIv4gC+42dvLJV7mwdjZe8hS99IgNPyoswedJ/6vKHdklQuoLgQed3RIVFAqnrw3PtrfqmsfjRhaFGpqPlMfAcUG2dmkN0njNaXxmI=",
"slv2": {
"version": 1,
"protocol": 2147483649,
"ssVer": "2.4.0.54681",
"from": "72365cc425626ccd8b8f3bd6a23ad78db3f55cbfb2d7787fe28c4497c5b6155c",
"hwfp": "AwAAAJhJSFXIQBBxdJPyzPbj/1qFNntGrQW98NP00pY2BqmYSrRiuCIkEImlAt4mxFrV/Qjg/aKdbZS4PKwzhDOPMWFy2LbQCcyT1vYsq9/E6oP8k6EEtzJDifuAv+1OrxDEAbo/tgdXvRj3ajWP3BcixLvz4tiYclkOh7kn1LFD7ZyhFkIFeu8R6Df2+QsmLzkPYwTkfkg3cYXPl29jzL3NnphTJer2toFg0LqUceOG8eCD9XtJ+LDvraL0mAlxfG6snBTOyh2lGk/aWVdTtKedmcPOuIxD9c6O0F9LriXHlVQogGaqLcmoQN23IfAlsCmrcL/BB+0SGQWEFpvL85zAWXVuWH6fV8mmAVKVe9l9QxABdMdIY2n6jp6UztKMu1pph5MoJVbpjiTyTjc4fL61fjo+UQx37FN5VRLiPw7Mp1LikqISQkcRvIlyUMI/D9qommShZIg3pqAB2YuNYY7Hw+EkX50KOHFmHAK8t0ecilrs5LFATm5itpgsAbKtTRSnRQ==",
"info": "AQAAAL70frHR3tO60mkgA9WYjwXjEGiphHSWwWe8gYYTdLBpil9X4gwgfja9fDamS//ouMVoUMalNAdeclXYrnvqgl6KxE5S00mPPuhVtPpwIq5gkGOGeR54kXEEYa82ebhrYs3fG12BeOPHFmwQYGOUrm/mD42blcrMFqce8hqZedxZokDg81bjqCkqCTdkHMpluylDtReVAT6FDTzrKSKU9qxu3BD1BTFdRXZO6m8Mkby65tIgmKFjbsHe/WqWTJwyQhkWUzC1/NGfgzOKqSnIYih0X3A4czvgEi63PoHyS+UUXVH8snBwceijY5jfihYJQogDWRjvtfWaLLW8i0RtWUM6js5oIlUyOU2IgAgNG/eqTFXIv2qAU0ZS4cXlmP9CR6uiXlPhL6dxMQboGzhatWZnVzzM0wQV1tsYzLt9zQ6Wn4gVAmzRxcw4IUfkX4oCEzCsFCr3cYdIZz2vcQAIYVUfIEGArkM2TNj0gv11xe+MzF4QnMu7scdX4s/OWlTJyAXTcjoL1WvBrUQaa9BSOBFXXc+MqqZN9Re7MhclrzZJlOQp3NdklbH7P+O31k8jf84m1UoU99QFn9FLmaCPxXsbQSZHRsDZdyoxoVUVPcB3CpV7i9mtW2cEGkdgXU7ecg=="
}
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": [
{
"account": "autotest@qq.com",
"desc": "许可测试",
"templateName": "OpenApi 2.0 – 许可测试",
"productName": "测试产品",
"licenseId": 125478,
"isForever": false,
"startTime": "2022-09-28 00:00:52",
"endTime": "2022-10-05 00:00:52",
"createTime": "2022-09-28 00:00:53"
}
]
}

16. 锁定许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/lockLicense

  • 说明: 锁定指定的许可. 锁定成功后, 云锁许可将不能继续使用, 软锁许可在最多一个离线时长后将不能继续使用

  • 参数:

参数名称必选类型默认值描述
userAccountstring用户账号
licenseFormnumber许可形式: 1-云锁 2-软锁
licenseIdnumber许可 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"userAccount": " cloudetest@cloud.com",
"licenseForm": 1,
"licenseId": 125478
}

响应内容:

{
"code": 0,
"desc": "成功"
}

17. 解锁许可

  • 接口地址:

https://openapi.senseyun.com/v2/sv/unlockLicense

  • 说明: 解锁指定的许可

  • 参数:

参数名称必选类型默认值描述
userAccountstring用户账号
licenseFormnumber许可形式: 1-云锁 2-软锁
licenseIdnumber许可 ID
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
  • 示例: 请求内容:
{
"userAccount": " cloudetest@cloud.com",
"licenseForm": 1,
"licenseId": 125478
}

响应内容:

{
"code": 0,
"desc": "成功"
}

八. 云签硬件锁升级包接口

1. 签发添加许可升级包

  • 接口地址:

https://openapi.senseyun.com/v2/sv/devicelicense/addlic

  • 参数:
参数名称必选类型默认值描述
pinstring填写您在平台设置的 PIN 码.
如果您还处于试用阶段, 请使用默认的试用 PIN 码: aoW8aUNgPNFK8r32UwLnAp3P2zvU232i
deviceIdstring芯片序列号
shellNumberstring外壳号
deviceCertstring设备证书的 Base64 字符串
licenseIdnumber许可 ID. 必须是平台上已有的产品.
forceboolean是否强制升级
升级策略:
强制升级时, 若锁内无此许可, 则添加; 若有此许可, 则强制覆盖;
不强制升级时, 若锁内无此许可, 则添加; 若有此许可, 则报错
isForeverboolean是否永久
versionnumber0许可版本. 取值范围: [0, 4294967295]
startTimenumber许可起始时间, UTC 时间戳(秒)
endTimenumber许可结束时间, UTC 时间戳(秒)
counternumber许可使用次数
spannumber许可时间跨度, 从未来的某个时间开始试用的秒数.
concurrentnumber最大用户数. 取值范围: [0, 65535]; 如果不设置或设为 0, 表示不限制用户数
concurrentTypestring并发限制类型. 取值可选: process/winUserSession/disable
process 以 Windows 进程限制, winUserSession 以 Windows 会话限制, disable 表示关闭并发限制.
modulearray子模块列表
romobject许可只读区. 有 3 个属性: data, offset, resize. data 为数据区 hex 字符串; offset 为偏移量; resize 表示重置数据区大小, 取值范围: [数据区长度, 65535]. 当 resize 为 0 时, data 和 offset 将被忽略
rawobject许可读写区. 有 3 个属性: data, offset, resize. data 为数据区 hex 字符串; offset 为偏移量; resize 表示重置数据区大小, 取值范围: [数据区长度, 65535]. 当 resize 为 0 时, data 和 offset 将被忽略
pubobject许可公开区. 有 3 个属性: data, offset, resize. data 为数据区 hex 字符串; offset 为偏移量; resize 表示重置数据区大小, 取值范围: [数据区长度, 65535]. 当 resize 为 0 时, data 和 offset 将被忽略
licDescstring许可描述信息, 最长 32 个字符
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataobject硬件锁许可数据包
  • 示例: 请求内容:
{
"pin": "1234567890qazwsx",
"deviceId": "9733c80100070205106100030022000a",
"force": true,
"shellNumber": "200200000089",
"licenseId": "273",
"deviceCert": "xxxxxxxxx",
"isForever": false,
"concurrent": 3,
"concurrentType": "winUserSession",
"version": 1,
"module": [ 1, 2, 3 ],
"startTime": 123,
"endTime": 123456789,
"counter": 3,
"span": 2,
"rom": {
"data": "1234",
"offset": 0,
"resize": 2
},
"raw": {
"offset": 0,
"resize": 0
},
"pub": {
"data": "234567",
"resize": 3
},
"licDesc": "addlic"
}

响应内容:

{
"desc": "成功",
"code": 0,
"data": {
......
}
}

2. 签发更新许可升级包

  • 接口地址:

https://openapi.senseyun.com/v2/sv/devicelicense/updatelic

  • 参数:
参数名称必选类型默认值描述
pinstring填写您在平台设置的 PIN 码.
如果您还处于试用阶段, 请使用默认的试用 PIN 码: aoW8aUNgPNFK8r32UwLnAp3P2zvU232i
deviceIdstring芯片序列号
shellNumberstring外壳号
deviceCertstring设备证书的 Base64 字符串
licenseIdnumber许可 ID. 必须是平台上已有的产品.
isForeverboolean是否永久
versionobject许可版本. 有两个属性: op, value. op 可选值为 set/inc/dec, set 为设置许可版本为 value 值, inc 为在已有许可版本上增加 value 值, dec 为在已有许可版本上减少 value 值. value 取值范围: [0, 4294967295]
startTimeobject许可起始时间, 有两个属性: op, value. op 可选值为 set/inc/dec/disable, set 为设置许可开始时间为 value 值, inc 为在已有许可开始时间上增加 value 值, dec 为在许可开始时间上减少 value 值, disable 为不限制许可开始时间; value 为 UTC 时间戳秒数
endTimeobject许可结束时间, 有两个属性: op, value. op 可选值为 set/inc/dec/disable, set 为设置许可结束时间为 value 值, inc 为在已有许可结束时间上增加 value 值, dec 为在许可结束时间上减少 value 值, disable 为不限制许可结束时间; value 为 UTC 时间戳秒数
counterobject许可使用次数, 有两个属性: op, value. op 可选值为 set/inc/dec/disable, set 为设置许可使用次数为 value 值, inc 为在已有许可使用次数上增加 value 值, dec 为在已有许可使用次数上减少 value 值, disable 为不限制许可使用次数. value 取值范围: [0, 4294967295]
spanobject许可时间跨度, 有两个属性: op, value. op 可选值为 set/inc/dec/disable, set 为设置许可时间跨度为 value 值, inc 为在已有许可时间跨度上增加 value 值, dec 为在已有许可时间跨度上减少 value 值, disable 为不限制许可时间跨度. value 单位为秒
concurrentnumber最大用户数. 取值范围: [0, 65535]; 如果不设置或设为 0, 表示不限制用户数
concurrentTypestring并发限制类型. 取值可选: process/winUserSession/disable
process 以 Windows 进程限制, winUserSession 以 Windows 会话限制, disable 表示关闭并发限制.
modulearray子模块列表
romobject许可只读区. 有 3 个属性: data, offset, resize. data 为数据区 hex 字符串; offset 为偏移量; resize 表示重置数据区大小, 取值范围: [数据区长度, 65535]. 当 resize 为 0 时, data 和 offset 将被忽略
rawobject许可读写区. 有 3 个属性: data, offset, resize. data 为数据区 hex 字符串; offset 为偏移量; resize 表示重置数据区大小, 取值范围: [数据区长度, 65535]. 当 resize 为 0 时, data 和 offset 将被忽略
pubobject许可公开区. 有 3 个属性: data, offset, resize. data 为数据区 hex 字符串; offset 为偏移量; resize 表示重置数据区大小, 取值范围: [数据区长度, 65535]. 当 resize 为 0 时, data 和 offset 将被忽略
licDescstring许可描述信息, 最长 32 个字符
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataobject硬件锁许可数据包
  • 示例: 请求内容:
{
"pin": "1234567890qazwsx",
"deviceId": "9733c80100070205106100030022000a",
"shellNumber": "200200000089",
"licenseId": "273",
"deviceCert": "xxxxxx",
"isForever": false,
"concurrent": 3,
"concurrentType": "winUserSession",
"version": {
"op": "set",
"value": 10
},
"module": [
1,
2,
3
],
"startTime": {
"op": "set",
"value": 123
},
"endTime": {
"op": "inc",
"value": 123
},
"counter": {
"op": "inc",
"value": 5
},
"span": {
"op": "disable"
},
"rom": {
"data": "1234",
"offset": 0,
"resize": 2
},
"raw": {
"offset": 0,
"resize": 0
},
"pub": {
"data": "234567",
"resize": 3
},
"licDesc": "updatelic"
}

响应内容:

{
"desc": "成功",
"code": 0,
"data": {
......
}
}

3. 签发删除许可升级包

  • 接口地址:

https://openapi.senseyun.com/v2/sv/devicelicense/dellic

  • 参数:
参数名称必选类型默认值描述
pinstring填写您在平台设置的 PIN 码.
如果您还处于试用阶段, 请使用默认的试用 PIN 码: aoW8aUNgPNFK8r32UwLnAp3P2zvU232i
deviceIdstring芯片序列号
shellNumberstring外壳号
deviceCertstring设备证书的 Base64 字符串
licenseIdnumber许可 ID. 必须是平台上已有的产品.
forceboolean是否强制升级
升级策略:
强制升级时, 若锁内有此许可, 删除; 若锁内无此许可, 返回成功
不强制升级时, 若锁内有此许可, 删除; 若无此许可, 则报错
licDescstring许可描述信息, 最长 32 个字符
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataobject硬件锁许可数据包
  • 示例: 请求内容:
{
"pin": "1234567890qazwsx",
"deviceId": "9733c80100070205106100030022000a",
"licenseId": "273",
"shellNumber": "200200000089",
"licDesc": "del",
"deviceCert": "xxxxxx",
"force": true
}

响应内容:

{
"desc": "成功",
"code": 0,
"data": {
......
}
}

4. 签发控制许可升级包

  • 接口地址:

https://openapi.senseyun.com/v2/sv/devicelicense/ctrllic

  • 参数:
参数名称必选类型默认值描述
pinstring填写您在平台设置的 PIN 码.
如果您还处于试用阶段, 请使用默认的试用 PIN 码: aoW8aUNgPNFK8r32UwLnAp3P2zvU232i
deviceIdstring芯片序列号
shellNumberstring外壳号
deviceCertstring设备证书的 Base64 字符串
ctrlTypenumber控制包类型, 见下文
startTimenumber锁内许可开始时间, UTC 时间戳(秒), 仅用于 "限时使用所有许可" 类型
endTimenumber锁内许可开始时间, UTC 时间戳(秒), 仅用于 "限时使用所有许可" 类型
licDescstring许可描述信息, 最长 32 个字符

ctrlType

类型描述
1锁定所有许可锁定硬件用户锁内所有许可, 升级后, 硬件用户锁内所有许可将处于锁定不可用状态
2解锁所有许可解锁硬件用户锁内所有许可, 升级后, 硬件用户锁内所有许可将恢复到锁定前状态
3限时使用所有许可将硬件用户锁设置为限时使用锁, 升级后, 硬件用户锁内所有许可只有在设置时间段内有效, 过期将不能再继续使用锁内所有许可
4解除限时解除硬件用户锁的限时性, 升级后, 硬件用户锁内所有许可状态将恢复到限时之前
5删除所有许可删除硬件用户锁内所有许可, 升级后, 硬件用户锁内所有许可将被删除
  • 响应:
字段名称类型描述
codenumber状态码
descstring结果描述
dataobject硬件锁许可数据包
  • 示例: 请求内容:
{
"pin": "1234567890qazwsx",
"shellNumber": "200200000089",
"licDesc": "lockalllic",
"deviceId": "9733c80100070205106100030022000a",
"deviceCert": "xxxx",
"ctrlType": 3,
"startTime": 123,
"endTime": 1234
}

响应内容:

{
"desc": "成功",
"code": 0,
"data": {
......
}
}

九. 授权码管理接口

1. 生成授权码

  • 接口地址 https://openapi.senseyun.com/v2/sv/issueLicenseKey

  • 参数

参数名称必选类型默认值描述
platformnumber7系统平台.
7-传统(Windows/x86 Linux/MacOS)
24-智能(Android/Arm Linux)
licenseModenumber0扣费方式.
0- 账户余额 1-赠送许可 2-套餐许可.
当许可类型不是 PPM (即 licCategory ≠ 3)时, 必须设置此参数
pricingModestring对于账户余额, 取值如下: "daily"-按天, "yearly"-按年, "once"-一次性;
对于赠送许可或 PPM, 无需设置;
对于套餐许可, 指定使用某个套餐时, 设置为对应套餐的序列号, 自动匹配套餐时, 设置为 "auto"
licBindLimitnumber同时绑定设备数. 取值范围: [1, 65535].
许可类型为单机许可时, 必须设置此参数; 否则, 将忽略此参数
licBindMaxLimitnumber累积绑定设备数. 取值范围: [0, 65535]
设置为 0 时表示不限制; 默认值等于同时绑定设备数.
许可类型为集团许可或 PPM 时, 将忽略此参数.
templateNamestring模板名称, 仅用于平台展示. 长度限制: [1, 64]
userNamestring备注名称
phonestring手机号
emailstring电子邮箱
remarkstring备注
contractNostring合同号
numbernumber1批量生成授权码数量, 取值范围: [1, 100]
licCategorynumber1许可类型:
1-单机许可, 2-集团许可, 3-PPM
如果取值为 2 或者 concurrent 参数 > 0, 都表示集团许可
offlineDaysnumber0强制认证周期, 单位: 天
取值范围: [0, 180]
设置为 0 表示不开启强制认证功能
c2dOverduenumber1C2D 文件有效期, 单位: 天
取值范围: [1, 90]
d2cOverduenumber1D2C 文件有效期, 单位: 天
取值范围: [1, 90]
当许可类型为 PPM 时, 将忽略此参数
tagIdsarray标签 ID 列表
borrowingIssueLicenseKeyBorrowingProperties在线借阅相关参数
advAttrsIssueLicenseKeyAdvAttr[]许可条款列表

IssueLicenseKeyBorrowingProperties

参数名称必选类型默认值描述
enablebooleanfalse是否启用在线借阅相关功能
borrowingNumnumber最大借阅许可数
forciblyReturnNumnumber强制回收许可数, 不传表示不启用强制回收功能
borrowingManagerNumnumber最大借阅管理员数
allowBindingLicenseKeybooleantrue是否允许绑定授权码

IssueLicenseKeyAdvAttr

参数名称必选类型默认值描述
licenseIdnumber许可 ID, 取值范围: [1, 4294967295], 且必须在开发者中心的产品管理中存在
licenseVernumber0许可版本, 取值范围: [0, 4294967295]
isForverboolean是否永久许可
startTimenumber起始时间, UTC 时间戳(秒)
endTimenumber结束时间, UTC 时间戳(秒)
spanTimenumber时间跨度, 单位: 天
取值范围: [1, 18250]
concurrentnumber0并发用户数, 取值范围: [0, 65535]
此值 > 0 代表集团许可
concurrentTypestring并发类型:
会话: "win_user_session", 进程: "process", 集团许可必须设置此参数
modulearray子模块列表, 模块值可选范围: [1, 64]
lanBorrowingIssueLicenseKeyLanBorrowingProperties集团借阅相关属性
romstring许可只读区, hex 字符串, 数据原始长度 < 65536
rawstring许可读写区, hex 字符串, 数据原始长度 < 65536
pubstring许可公开区, hex 字符串, 数据原始长度 < 65536
dataZonePadModenumber1数据区编辑模式. 1-文件模式, 2-Key/Value 模式
kvSeparatorstring:Key/Value 分隔符, 数据区编辑模式为 Key/Value 时启用, 长度为 1
kvConnectorstring;Key/Value 连接符, 数据区编辑模式为 Key/Value 时启用, 长度为 1
rawResizenumber重置读写区大小. 取值范围: [读写区数据大小, 65535]

IssueLicenseKeyLanBorrowingProperties

参数名称必选类型默认值描述
enablebooleanfalse是否启用集团借阅相关功能
borrowingNumnumber最大借出点数
durationnumber最长借阅时间(小时), 不传表示不限制借阅时间
  • 说明
  1. 字段 licenseId 许可 ID 必须是在平台产品管理中添加的许可 ID;
  2. licenseMode 设置为 1 时(即赠送许可), 字段 pricingMode 可以不提供;
  3. isForever 设置为 false 时(即非永久许可), 那么以下字段至少需要设置一个:endTimespan;
  4. 如果设置了 startTimeendTime, 那么要求 startTime 必须小于等于 endTime;
  5. 高级属性中的 module 字段, 需要确保其中每个模块 ID 都在对应产品中进行了配置, 否则在平台(WEB)上查看授权码许可的模块时会标识出"该模块已在产品中删除"字样, 但不会影响许可的模块使用;
  6. 当使用套餐方式发布授权码许可时, 如果套餐是按量的许可套餐, 那么将会从套餐中扣除 N 个许可量, 其中 N 等于授权码中许可 ID 的个数;
  7. 设置自动匹配套餐(licenseMode 为 2, 且 pricingMode 为 auto)时, 按照许可条款自动匹配可用的套餐;优先匹配快要过期或剩余许可数较少的套餐.
  8. 当前系统平台 platform 字段, 进行了两类系统隔离, 即传统系统平台与智能系统平台的授权码是不能交叉使用的, 只能用于对应的系统平台;
  9. concurrent 字段设置为大于 0 时(即集团许可), 必须设置并发方式 concurrentType 字段, 不同并发方式的区别:会话:即以软件运行机器的个数进行数量限制, 进程:即以软件启动的个数进行数量限制, 数量限制为 concurrent 字段的值;
  10. 并发数字段 concurrent 和 同时绑定设备数字段 licBindLimit 同时设置时可以达到负载均衡的效果;
  11. 字段 c2dOverdue 表示用户端生成的 C2D(硬件指纹)文件的有效期为 N 天, 即自用户端生后, 该 C2D 文件在 N 天以内有效, N 天以后再使用该 C2D 文件从云平台兑换授权码时会提示过期;
  12. 字段 d2cOverdue 表示经由平台端兑换得到的 D2C(授权码升级包)文件的有效期为N 天, 即自平台端生成后, 该 D2C 文件在 N 天以内有效, N 天以后再使用该 D2C 文件导入到用户端时会提示过期;
  13. 字段 rawResize 表示设置读写区的有效长度, 当软件运行时可能会写入比预设的数据区内容更多的数据时, 则需要对读写区内容进行扩容占位, 该字段值应设置的尽可能符合实际所需, 以提高运行时读写效率, 默认占位字节为 0x00. 例如, 预设的读写区内容为HelloWorld, 如果软件在运行时向读写区写入 01234567890 时将报错, 因为预设的读写区的有效长度为 10(HelloWorld 字符串的长度为 10);此时, 如果设置了 rawResize = 15, 则预设的读写区的有效长度便会被设置为 15(此时读写区实际内容为 HelloWorld 加 5 个0x00 占位字节), 此时再写入 01234567890 时将是正常的.
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataData18一些许可信息, 成功时返回

Data18

字段名称类型描述
costnumber许可预估费用
licenseKeysarray成功生成的授权码列表
successnumber成功生成的授权码数量
  • 示例

请求内容:

{
"licenseForm": 2,
"platform": 7,
"licenseMode": 0,
"pricingMode": "daily",
"userName": "展会赠送",
"licBindLimit": 12,
"number": 2,
"c2dOverdue": 1,
"d2cOverdue": 1,
"tagIds": [ 1, 2 ],
"advAttrs": [
{
"licenseId": 20181105,
"licenseVer": 1,
"isForever": false,
"startTime": 1541663610,
"endTime": 1544255610,
"spanTime": 60,
"concurrent": 5,
"concurrentType": "process",
"module": [ 1, 3, 5 ],
"rom": "12",
"raw": "1234",
"pub": "123456"
},
{
"licenseId": 20181106,
"licenseVer": 2,
"isForever": false,
"startTime": 1541663610,
"endTime": 1544255610,
"spanTime": 50,
"concurrent": 5,
"concurrentType": "process",
"module": [ 2, 4, 6 ],
"rom": "34",
"raw": "3456",
"pub": "345678"
}
]
}

响应内容:

{
"code": 0,
"data": {
"cost": 40,
"licenseKeys": [
"Y053-7E1K-SNL3-KYAY",
"KT6E-2J26-RT6X-AUB8"
],
"success": 2
},
"desc": "成功"
}

2. 更新授权码

  • 接口地址 https://openapi.senseyun.com/v2/sv/updateLicenseKey

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
userNamestring备注名称, 不传入则不作修改
phonestring手机号, 不传入则不作修改
emailstring邮箱地址, 不传入则不作修改
remarkstring备注, 不传入则不作修改
contractNostring合同号, 不传入则不作修改
pricingModestring订阅模式
对于账户余额, 取值如下:
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可或 PPM, 无需传入
对于套餐许可, 取值为对应套餐的序列号
licBindLimitobject同时绑定设备数, 不传则不作修改
有两个属性: op, value, op 可选值为 set/inc/dec, set 为设置同时绑定设备数为 value 值, inc 为在已有绑定数上增加 value 值, dec 为在已有绑定数上减少 value 值, value 为机器数, 取值范围: [1, 65535]
当许可类型为集团或 PPM 时, 将忽略此参数
licBindMaxLimitobject累积绑定设备数, 不传则不作修改
有两个属性: op, value, op 可选值为 set/inc/dec, set 为设置累积绑定设备数为 value 值, inc 为在已有绑定数上增加 value 值, dec 为在已有绑定数上减少 value 值, value 为机器数, 取值范围: [0, 65535], 0 表示不限制;
当许可类型为集团或 PPM 时, 将忽略此参数
offlineDaysnumber强制认证周期, 单位: 天
取值范围: [0, 180]
设置为 0 表示不开启强制认证功能
c2dOverduenumberC2D 文件有效期, 单位: 天
取值范围: [1, 90]
d2cOverduenumberD2C 文件有效期, 单位: 天
取值范围: [1, 90]
当许可类型为 PPM 时, 将忽略此参数
tagIdsarray标签 ID 列表, 不传则不作修改, 传空列表则清空标签
borrowingUpdateLicenseKeyBorrowingProperties在线借阅相关参数
advAttrsUpdateLicenseKeyAdvAttr[]许可条款列表

UpdateLicenseKeyBorrowingProperties

参数名称必选类型默认值描述
enableboolean是否启用在线借阅相关功能. 不传则保持当前状态
borrowingNumnumber最大借阅许可数. 不传则不修改
forciblyReturnNumobject强制回收许可数. 不传则不修改
有两个属性: op, value, op 可选值为 set/disable, set 为设置强制回收许可数为 value 值, disable 为禁用强制回收功能
borrowingManagerNumnumber最大借阅管理员数量. 不传则不修改
allowBindingLicenseKeyboolean是否允许绑定授权码. 不传则不修改

UpdateLicenseKeyAdvAttr

参数名称必选类型默认值描述
licenseIdnumber许可 ID
licenseVerobject许可版本, 不传则不作修改
有两个属性: op, value, op 可选值为 set/inc/dec, set 为设置许可版本为 value 值, inc 为在已有许可版本上增加 value 值, dec 为在已有许可版本上减少 value 值, value 为许可版本号
isForeverboolean是否永久许可. 不传则不作修改; 如果将永久许可改为非永久许可, 需要同时传入 endTimespanTime 参数
endTimeobject许可结束时间, 不传则不作修改
有两个属性: op, value, op 可选值为 set/inc/dec, set 为设置结束时间为 value 值, inc 为在已有结束时间上增加 value 值, dec 为在已有结束时间上减少 value 值, value 为 UTC 时间戳(秒)
spanTimeobject许可时间跨度, 不传则不作修改
有两个属性: op, value, op 可选值为 set/inc/dec, set 为设置时间跨度为 value 值, inc 为在已有时间跨度上增加 value 值, dec 为在已有时间跨度上减少 value 值, value 为时间跨度天数, 取值范围: [1, 18250]
concurrentnumber并发用户数, 取值范围: [0, 65535]
为 0 代表单机许可, 大于 0 代表集团许可
concurrentTypestring并发类型:
会话: "win_user_session", 进程: "process", 集团许可必须设置此参数
modulearray子模块列表, 值可选范围: [1, 64], 传入空列表, 表示清空模块选择
lanBorrowingUpdateLicenseKeyLanBorrowingProperties集团借阅相关参数
romobject许可只读区, 不传则不作修改
有两个属性: op, data, op 可选值为 set/clear; set 表示设置数据区, clear 表示清空数据区. data 为数据区的 hex 字符串
rawobject许可读写区, 不传则不作修改
有三个属性: op, data, resize, op 可选值为 set/clear; set 表示设置数据区, clear 表示清空数据区. data 为数据区的 hex 字符串; resize 表示重置读写区大小
pubobject许可公开区, 不传则不作修改
有两个属性: op, data, op 可选值为 set/clear; set 表示设置数据区, clear 表示清空数据区. data 为数据区的 hex 字符串
dataZonePadModenumber数据区编辑模式. 1-文件模式, 2-Key/Value 模式
kvSeparatorstringKey/Value 分隔符, 数据区编辑模式为 Key/Value 时启用, 长度为 1
kvConnectorstringKey/Value 连接符, 数据区编辑模式为 Key/Value 时启用, 长度为 1

UpdateLicenseKeyLanBorrowingProperties

参数名称必选类型默认值描述
enableboolean是否启用集团借阅. 不传则保持当前状态
borrowingNumnumber最大借阅点数, 不传则不修改
durationobject最长借阅时间(小时), 不传则不修改
有两个属性: op, value, op 可选值为 set/disable, set 为设置最长借阅时间为 value 值, disable 为不限制最长借阅时间
  • 注意事项:
  1. 字段 pricingMode 表示订阅模式, 目前只能在扣费方式为账户余额(即 licenseMode 为 0)时修改, 只允许从按天或按年修改为一次性. 按此修改时, 更新所需费用会减去已支付的部分费用.
  2. 对于字段 endTimespanTime, 如果原许可未设置, 则会忽略这两项更新;
  3. 对于设置了 op 值, 而未设置 value 值或者 value 值被设置为空的则该项设置将被忽略;
  4. 高级属性数据区 op 值设置为 clear 时, data 值将被忽略; 当 op 值设置为 set 而 data 值未设置或者被设置为空时, 则该数据区设置将被忽略;
  5. 高级属性 module 字段设置为空数组 [] 时表示清空对于许可的 64 模块选择; 此外, 请确保每个模块 ID 都在对应产品中进行了配置, 否则在平台(WEB)上查看授权码许可的模块时会标识出"该模块已在产品中删除"字样, 但不会影响许可的模块使用;
  6. 在许可有效期内可以免费更新 12 次, 超过 12 次后需要购买许可更新次数包, 每更新一次扣除一次, 智能许可没有这样的限制;
  7. 该接口不允许更新并发用户数限制字段 concurrent 的取值是由 0 变更为非 0 或者由非 0 变更为 0;当并发数限制字段 concurrent 的取值大于 0 时, 仅能进行数值增减操作, 以及更新并发类型字段 concurrentType 的取值(会话/进程);
  8. 字段 c2dOverdue 表示用户端生成的 C2D (硬件指纹)文件的有效期为 N 天, 即自用户端生成后, 该 C2D 文件在 N 天以内有效, N 天以后再使用该 C2D 文件从云平台兑换授权码时会提示过期;
  9. 字段 d2cOverdue 表示经由平台端兑换得到的 D2C(授权码升级包)文件的有效期为 N 天, 即自平台端生成后, 该 D2C 文件在 N 天以内有效, N 天以后再使用该 D2C 文件导入到用户端时会提示过期;
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataUpdateLicenseKeyBriefInfo一些许可信息, 成功时返回

UpdateLicenseKeyBriefInfo

字段名称类型描述
licenseKeystring授权码
userNamestring备注名称
phonestring手机号
emailstring邮箱
remarkstring备注
contractNostring合同编号
licenseFormnumber许可形式, 授权码只能是软锁, 即值为 2
platformnumber系统平台
7: 传统(Windows/x86 Linux/MacOS)
24: 智能(Android/ARM Linux)
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestring订阅模式
对于账户余额, 取值如下
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 此字段无实际意义
对于套餐许可, 取值为对应套餐的序列号
licBindLimitnumber同时绑定设备数
licBindMaxLimitnumber累积绑定设备数
borrowingEnabledboolean是否启用在线借阅相关功能
borrowingNumnumber最大借出许可数
forciblyReturnNumnumber强制回收许可数, 若未启用强制回收, 无此属性
borrowingManagerNumnumber最大借阅管理员数
allowBindingLicenseKeyboolean是否允许绑定授权码
costnumber本次更新所需费用
c2dOverduenumberC2D 有效期
d2cOverduenumberD2C 有效期
advAttrsLicenseKeyAdvAttrResp[]许可条款

LicenseKeyAdvAttrResp

字段名称类型描述
licenseIdnumber许可 ID
productNamestring产品名称
licenseVernumber许可版本
isForeverboolean是否永久许可
hasStartTimeboolean是否有开始时间
startTimestring许可开始时间(yyyy-MM-dd HH:mm:ss)
hasEndTimeboolean是否有结束时间
endTimestring许可结束时间(yyyy-MM-dd HH:mm:ss)
hasSpanTimeboolean是否有时间跨度
spanTimenumber时间跨度(天)
concurrentnumber并发用户数限制, 为 0 表示单机许可
concurrentTypestring并发类型
会话: win_user_session
进程: process
lanBorrowingEnabledboolean是否启用集团借阅
lanBorrowingNumnumber集团借阅: 最大借出点数
lanBorrowingDurationnumber集团借阅: 最大借阅时长(小时)
若不限制借阅时长, 无此属性
modulearray子模块列表
romstring许可只读区, hex 字符串
rawstring许可读写区, hex 字符串
pubstring许可公开区, hex 字符串
  • 示例

请求内容:

{
"licenseKey": "Y053-7E1K-SNL3-KYAY",
"userName": "张三",
"email": "zhangsan@163.com",
"phone": "18812345678",
"licBindLimit": {
"op": "inc",
"value": 1
},
"licBindMaxLimit": {
"op": "inc",
"value": 1
},
"advAttrs": [
{
"licenseId": 1000,
"endTime": {
"op": "set",
"value": 1576307930
},
"rom": {
"op": "set",
"data": "1234567890"
},
"raw": {
"op": "clear"
}
},
{
"licenseId": 2000,
"licenseVer": {
"op": "inc",
"value": 1
},
"module": [ 1, 2, 3, 4, 5 ]
}
]
}

响应内容:

{
"code": 0,
"data": {
"userName": "张三",
"isForever": false,
"licenseKey": "Y053-7E1K-SNL3-KYAY",
"pricingMode": "yearly",
"phone": "18812345678",
"email": "zhangsan@163.com",
"c2dOverdue": 1,
"d2cOverdue": 1,
"licBindLimit": 2,
"licBindMaxLimit": 2,
"cost": 30,
"licenseMode": 0,
"licenseForm": 2,
"platform": 7,
"advAttrs": [
{
"licenseId": 1000,
"licenseVer": 13,
"hasStartTime": true,
"startTime": "2018-12-04 00:00:00",
"hasEndTime": true,
"endTime": "2019-12-14 15:18:50",
"hasSpanTime": true,
"spanTime": 30,
"concurrent": 5,
"concurrentType": "process",
"rom": "1234567890",
"module": [],
"pub": "567890",
"productName": "计算器"
},
{
"licenseId": 2000,
"licenseVer": 14,
"hasStartTime": true,
"startTime": "2018-12-04 00:00:00",
"hasEndTime": true,
"endTime": "2018-12-08 15:53:30",
"hasSpanTime": true,
"spanTime": 30,
"concurrent": 5,
"concurrentType": "process",
"rom": "524F4D212121",
"module": [ 1, 2, 3, 4, 5 ],
"raw": "524157212121",
"pub": "505542212121",
"productName": "绘图"
}
]
},
"desc": "成功"
}

3. 删除授权码

  • 接口地址 https://openapi.senseyun.com/v2/sv/deleteLicenseKey

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"licenseKey": "KT6E-2J26-RT6X-AUB8"
}

响应内容:

{
"desc": "OK",
"code": 0
}

4. 搜索授权码

  • 接口地址 https://openapi.senseyun.com/v2/sv/findLicenseKeys

  • 参数

参数名称必选类型默认值描述
keywordstring备注名称/手机号/邮箱, 支持模糊查找
startCreateTimenumber最小授权码创建时间, UTC 时间戳(秒)
endCreateTimenumber最大授权码创建时间, UTC 时间戳(秒)
startActiveTimenumber最小授权码绑定时间, UTC 时间戳(秒)
endActiveTimenumber最大授权码绑定时间, UTC 时间戳(秒)
currentPagenumber1当前页数, 从 1 开始
pageSizenumber10每页数量
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataData19

Data19

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
rowsLicenseKeyBriefInfo[]

LicenseKeyBriefInfo

字段名称类型描述
licenseKeystring授权码
userNamestring备注名称
phonestring手机号
emailstring邮箱
remarkstring备注
contractNostring合同编号
licenseFormnumber许可形式, 授权码只能是软锁, 即值为 2
statusnumber授权码状态
1-正常
2-正常(已更新)
5-已锁定
15-审批中
16-已拒绝
platformnumber系统平台
7: 传统(Windows/x86 Linux/MacOS)
24: 智能(Android/ARM Linux)
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestring订阅模式
对于账户余额, 取值如下
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 此字段无实际意义
对于套餐许可, 取值为对应套餐的序列号
licBindLimitnumber同时绑定设备数
licBindMaxLimitnumber累积绑定设备数
borrowingEnabledboolean是否启用在线借阅相关功能
borrowingNumnumber最大借出许可数
forciblyReturnNumnumber强制回收许可数, 若未启用强制回收, 无此属性
borrowingManagerNumnumber最大借阅管理员数
allowBindingLicenseKeyboolean是否允许绑定授权码
createTimestring创建时间(yyyy-MM-dd HH:mm:ss)
exchangeTimestring绑定时间(yyyy-MM-dd HH:mm:ss)
offlineDaysnumber强制认证周期(天)
c2dOverduenumberC2D 有效期
d2cOverduenumberD2C 有效期
passwordstring授权码密码
licCategorynumber许可类型
1-单机许可
2-集团许可
3- PPM
advAttrsLicenseKeyAdvAttrBriefInfo[]许可条款

LicenseKeyAdvAttrBriefInfo

字段名称类型描述
licenseIdnumber许可 ID
productNamestring产品名称
licenseVernumber许可版本
hasStartTimeboolean是否有开始时间
startTimestring许可开始时间(yyyy-MM-dd HH:mm:ss)
hasEndTimeboolean是否有结束时间
endTimestring许可结束时间(yyyy-MM-dd HH:mm:ss)
hasSpanTimeboolean是否有时间跨度
spanTimenumber时间跨度(天)
concurrentnumber并发用户数限制, 为 0 表示单机许可
concurrentTypestring并发类型
会话: win_user_session
进程: process
lanBorrowingEnabledboolean是否启用集团借阅
lanBorrowingNumnumber集团借阅: 最大借出点数
lanBorrowingDurationnumber集团借阅: 最大借阅时长(小时)
若不限制借阅时长, 无此属性
  • 示例

请求内容:

{
"keyword": "张三",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"data": {
"totalPage": 1,
"totalCount": 2,
"rows": [
{
"createTime": "2018-12-17 10:30:39",
"email": "zhangsan@163.com",
"licBindLimit": 1,
"licBindMaxLimit": 1,
"licenseForm": 2,
"licenseKey": "KW7X-7MLC-RFS7-WCXP",
"licenseMode": 0,
"phone": "18812345678",
"platform": 7,
"pricingMode": "yearly",
"advAttrs": [
{
"licenseId": 1000,
"productName": "计算器",
"isForever": false,
"hasStartTime": true,
"startTime": "2018-12-17 10:30:34",
"hasEndTime": true,
"endTime": "2019-12-17 10:30:34",
"hasSpanTime": false
},
{
"licenseId": 2000,
"productName": "绘图",
"isForever": false,
"hasStartTime": true,
"startTime": "2018-12-17 10:30:34",
"hasEndTime": true,
"endTime": "2019-12-17 10:30:34",
"hasSpanTime": false
}
],
"userName": "张三",
"c2dOverdue": 1,
"d2cOverdue": 1
},
{
"createTime": "2018-12-17 10:26:23",
"email": "zhangsan@163.com",
"licBindLimit": 1,
"licBindMaxLimit": 1,
"licenseForm": 2,
"licenseKey": "2761-RS38-FAPJ-T1WZ",
"licenseMode": 0,
"phone": "18812345678",
"platform": 7,
"pricingMode": "yearly",
"advAttrs": [
{
"licenseId": 3000,
"productName": "记事本",
"isForever": false,
"hasStartTime": false,
"hasEndTime": true,
"endTime": "2019-12-17 10:26:18",
"hasSpanTime": true,
"spanTime": 30,
"concurrent": 5,
"concurrentType": "process"
}
],
"userName": "张三",
"c2dOverdue": 1,
"d2cOverdue": 1
}
]
},
"desc": "成功"
}

5. 获取授权码详情

  • 接口地址 https://openapi.senseyun.com/v2/sv/getLicenseKeyDetail

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataLicenseKeyInfo

LicenseKeyInfo

字段名称类型描述
licenseKeystring授权码
userNamestring备注名称
phonestring手机号
emailstring邮箱
remarkstring备注
contractNostring合同编号
licenseFormnumber许可形式, 授权码只能是软锁, 即值为 2
statusnumber授权码状态
1-正常
2-正常(已更新)
5-已锁定
15-审批中
16-已拒绝
platformnumber系统平台
7: 传统(Windows/x86 Linux/MacOS)
24: 智能(Android/ARM Linux)
licenseModenumber扣费方式
0-账户余额
1-赠送许可
2-套餐许可
pricingModestring订阅模式
对于账户余额, 取值如下
daily - 按天
yearly - 按年
once - 一次性
对于赠送许可, 此字段无实际意义
对于套餐许可, 取值为对应套餐的序列号
licBindLimitnumber同时绑定设备数
licBindMaxLimitnumber累积绑定设备数
borrowingEnabledboolean是否启用在线借阅相关功能
borrowingNumnumber最大借出许可数
forciblyReturnNumnumber强制回收许可数, 若未启用强制回收, 无此属性
borrowingManagerNumnumber最大借阅管理员数
allowBindingLicenseKeyboolean是否允许绑定授权码
createTimestring创建时间(yyyy-MM-dd HH:mm:ss)
exchangeTimestring绑定时间(yyyy-MM-dd HH:mm:ss)
offlineDaysnumber强制认证周期(天)
c2dOverduenumberC2D 有效期
d2cOverduenumberD2C 有效期
passwordstring授权码密码
licCategorynumber许可类型
1-单机许可
2-集团许可
3- PPM
advAttrsLicenseKeyAdvAttrResp[]许可条款
  • 示例

请求内容:

{
"licenseKey": "Y053-7E1K-SNL3-KYAY"
}

响应内容:

{
"code": 0,
"data": {
"licBindLimit": 2,
"licBindMaxLimit": 2,
"licenseMode": 0,
"licenseForm": 2,
"advAttrs": [
{
"licenseId": 1000,
"licenseVer": 13,
"productName": "计算器",
"isForever": false,
"hasStartTime": true,
"startTime": "2018-12-04 00:00:00",
"hasEndTime": true,
"endTime": "2019-12-14 15:18:50",
"hasSpanTime": true,
"spanTime": 30,
"concurrent": 5,
"concurrentType": "process",
"rom": "1234567890",
"module": [],
"pub": "567890"
},
{
"licenseId": 2000,
"licenseVer": 14,
"productName": "绘图",
"isForever": false,
"hasStartTime": true,
"startTime": "2018-12-04 00:00:00",
"hasEndTime": true,
"endTime": "2019-12-14 15:18:50",
"hasSpanTime": true,
"spanTime": 30,
"concurrent": 5,
"concurrentType": "process",
"rom": "524F4D212121",
"module": [ 1, 2, 3, 4, 5 ],
"raw": "524157212121",
"pub": "505542212121"
}
],
"userName": "张三",
"licenseKey": "Y053-7E1K-SNL3-KYAY",
"pricingMode": "yearly",
"phone": "18812345678",
"platform": 7,
"email": "zhangsan@163.com",
"c2dOverdue": 1,
"d2cOverdue": 1,
"createTime": "2018-12-03 12:24:36",
"exchangeTime": "2018-12-04 09:31:08",
"tags": [
{
"id": 1,
"name": "标签 1"
},
{
"id": 2,
"name": "标签 2"
}
]
},
"desc": "成功"
}

6. 获取授权码的绑定列表

  • 接口地址 https://openapi.senseyun.com/v2/sv/getLicenseKeyBindList

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
currentPagenumber1当前页数, 从 1 开始
pageSizenumber10每页数量
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataData20

Data20

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
rowsLicenseKeyBindBriefInfo[]绑定设备信息列表

LicenseKeyBindBriefInfo

字段名称类型描述
softNostring软锁号
machineIdstring机器 ID
terminalNamestring终端名称
firstBindTimestring首次绑定时间(yyyy-MM-dd HH:mm:ss)
lastBindTimestring最近绑定时间(yyyy-MM-dd HH:mm:ss)
lastOpIpstring最近绑定操作的公网 IP
opFromnumber操作来源:
1-SS 在线
2-SS 离线
3-用户许可中心
4-OpenAPI
  • 示例

请求内容:

{
"licenseKey": "Y053-7E1K-SNL3-KYAY",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"data": {
"totalPage": 1,
"totalCount": 1,
"rows": [
{
"createTime": "2018-11-08 17:52:24",
"licenseKeyGuid": "9c993b3880f64ec588a818510ea723c3",
"machineId": "e14a4fd64833b3497f64c0c960f6cf7ab7bb101bade5c5344b370ef097cc987c",
"softNo": "SC0003000000001",
"terminalId": "e14a4fd64833b3497f64c0c960f6cf7ab7bb101bade5c5344b370ef097cc987c",
"terminalName": "LIHP",
"updateTime": "2018-11-08 17:52:24"
}
]
},
"desc": "成功"
}

7. 兑换授权码

  • 接口地址 https://openapi.senseyun.com/v2/sv/licenseKeyExchange

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
c2dstring由 Virbox 用户工具导出的 C2D 内容, 注意 C2D 文件本身是可读文本, 直接读取无需任何转换
  • 注意事项:
  1. 由 Virbox 用户工具导出的 c2d 文件具有时效性, 默认时效是 24 小时, 超过便失效, 因此在调用该接口时请确保得到的 c2d 文件是最新导出的文件, 否则接口会返回相应的错误
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
datastring兑换到的授权码许可升级包
  • 注意事项:
  1. 由该接口兑换得到的授权码许可升级包具有时效性, 默认时效是 24 小时, 超过便失效, 因此请在时效内将得到的授权码许可升级包通过 Virbox 用户工具导入, 否则导入时返回相应的错误
  • 示例

请求内容:

{
"licenseKey": "AWBZ-GHYL-JWGH-2FHN",
"c2d": "{\"version\":3,\"c2dType\":1,\"pcName\":\"DESKTOP-TIJTJOI\",\"os\":\"Windows64bit\",\"ip\":\"192.168.101.1\",\"mac\":\"00-50-56-C0-00-08\",\"machineId\":\"289b8e528ef436d431183e1a5e2d9ca606597b4dbdf3f626352b965a886e0416\",\"reqData\":\"AgAAABp9o8d36E7EIN1WMapH0WfS9jSpekOL2nf3PBLZDQHI5TKo1J9BnH4YmUYuyp328dxd8hHfW0OeCtdxDTYHbeuoKFvUV65ekeCTT8WgDVEmAPAwT6PkLVgwxxD+GQqtvTtxRdF5tDiJMCI17QD4a2Vfnte4esIet0EyyFHgHweUOV7SsemSGQ/VaxQKJt144ajrBdhsUGqbOCGtaHbf3jhqlfjZmwoJNbxtnPrwjvt23TCrKax2GK0Jxh2MY1xrPgIWStfNN22EV3wrnTbrnYR3H23klB3ivJUEOHgEElfnDG0YJu2OtmW5SmHUrQ1wrfW+Dtgg5ESocwRQRKM2TBErX0ewA5UALCnLL8TLtlajpoS8xyvXdH01lncHSAhXqLF5IZKwaXpS/MNLKRGN45nSN6oTisAN7pHb4b+lT6yRsH1L2S7bzfvuh9mZBp5nuFLTPy2nlMgrhPzpkp/F1vY=\",\"slv2\":{\"version\":1,\"protocol\":2147483649,\"ssVer\":\"2.2.0.38326\",\"from\":\"289b8e528ef436d431183e1a5e2d9ca606597b4dbdf3f626352b965a886e0416\",\"hwfp\":\"AQAAAL+eDr2CoU8XmfKmrn7Z4KSGjMvOxBtyxPyH46U+faQkvg0DD41BUdiqS3k/V7b/hGc/eJ0pn+24aB9eEGn1aMw6r3dSH4Jprn6cZFRkJnXIPFJqp+SOwAvjq916pZed8m1MIjS+97vqvlpHJn5JRb9dSGo7WRbLaBVGZYzcjfWTYTs1KbrlyS/nvUl042gEhZKg1d8VzEJkMrJeTLImj9vHQGWIRUMddH/uwafS+yw7Ykq9vICPKnaNnr+7VOqIEkYiaFo0sQGBUZQgT+pRiH/eTUMrvf+3EQzpg6osSu6jm41J1UNeJHfxNw8qdgxPNrFk9DBLHo2xcxxYp0cwAYqsmZBI7eO0Kre8k3fPdCmqAjDXJsJzCSnr2S/hlwlLlkwJ6aS72tIZTkxOa9E+M0wC87+c7EvvarJhwfuPgtz/xolAkPMFJ9pYBB44VyDoM7MdowIImHuk4i7CrujSZS4CK3ww2J0JiGvLgj/CW+AEyJ0790NPm8Tl2fgbIFvizg==\",\"info\":\"AQAAAKO4VFY/7V191hpqik+o4kgeAeO9KKr46iViY2xPpHaM++IDejZnNtv9QzP85cAiy8ZqpHilklGA6mZaoo+GOgvOM2tL3K7YsFhlvXqRFcaUq1Uk+ehcYBk8qpVDD0rg6Nh4MIF2zFTcQX3QI/B2j9b98fAkbMRlDuZ7ZeuMafm+STAUt2MM31zxf60ZC3ZBf2pTjJQF2/As6LuymPenQ4yGJ2vug4VLValLk+biSl5Cw3LulCivHmgXIa3ru+V1TeWkBRi7rjn8PwENw03TEx40roluVp9QhcbWcY+tQVi0xYac1PexQRDJ1noKIfvntoO9S0X247ySk8gAQsUKWB1IHbukd57GNMVdyXRj6BrXr1RyNInuqvUqdPkMbQ1zvCHxRGZHPcbvhErknFWbANKSxQUGCtKuwyuao0z0nlOhc56TTbQQYzS4DbDm3ZyYctHDLAvqGK/q6IF3AzQ4bQNAZvKtl0XURQd9E+Pyn6zjYKT9yyGwtG6+PfeD1o9P93lLdFC5HnsUe9b9yYrNA6O1wOtYPsCHLzE6sUz5zM2L\"}}"
}

响应内容:

{
"code": 0,
"data": "....(D2C 升级包)",
"desc": "成功"
}

8. 获取授权码使用情况

  • 接口地址 https://openapi.senseyun.com/v2/sv/getLicenseKeyUsage

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataLicenseKeyUsage

LicenseKeyUsage

字段名称类型描述
isUsedboolean是否已使用
isExpiredboolean是否已过期
expiredTimenumber许可过期时间, UTC 时间戳(秒)
startTimenumber许可开始时间, UTC 时间戳(秒)
endTimenumber许可结束时间, UTC 时间戳(秒)
spanTimenumber时间跨度(天)
licBindLimitnumber同时绑定设备数
licBindCountnumber已绑定设备数
licBindMaxLimitnumber累积绑定设备数
licBindMaxCountnumber已累积设备数
firstBindTimenumber首次绑定时间, UTC 时间戳(秒)
  • 示例

请求内容:

{
"licenseKey": "AWBZ-GHYL-JWGH-2FHN"
}

响应内容:

{
"code": 0,
"data": {
"bindingCount": 1,
"maxBound": 1,
"maxBinding": 1,
"expiredTime": 1567526399,
"isUsed": true,
"isForever": false,
"boundCount": 1,
"firstBindTime": 1566976362,
"startTime": 1566921600,
"endTime": 1567526399,
"isExpired": true
},
"desc": "成功"
}

9. 授权码解绑

  • 接口地址 https://openapi.senseyun.com/v2/sv/licenseKeyUnbind

  • 说明 通过解绑 C2D 文件完成对应授权码的设备解绑, 成功解绑后将归还一个同时绑定设备数

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
c2dstring由 Virbox 用户工具-授权码在线激活, 通过 "离线解绑" 导出的 C2D 文件内容, 注意 C2D 文件内容本身是可读文本, 直接读取无需做任何转换
  • 注意事项:
  1. 由 Virbox 用户工具导出的 c2d 文件具有时效性, 默认时效是 24 小时, 超过便失效, 因此在调用该接口时请确保得到的 c2d 文件是最新导出的文件, 否则接口会返回相应的错误
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"licenseKey": "AWBZ-GHYL-JWGH-2FHN",
"c2d": "{\"version\":3,\"c2dType\":1,\"pcName\":\"DESKTOP-TIJTJOI\",\"os\":\"Windows1064bit\",\"ip\":\"192.168.101.1\",\"mac\":\"00-50-56-C0-00-08\",\"machineId\":\"289b8e528ef436d431183e1a5e2d9ca606597b4dbdf3f626352b965a886e0416\",\"reqData\":\"AgAAABp9o8d36E7EIN1WMapH0WfS9jSpekOL2nf3PBLZDQHI5TKo1J9BnH4YmUYuyp328dxd8hHfW0OeCtdxDTYHbeuoKFvUV65ekeCTT8WgDVEmAPAwT6PkLVgwxxD+GQqtvTtxRdF5tDiJMCI17QD4a2Vfnte4esIet0EyyFHgHweUOV7SsemSGQ/VaxQKJt144ajrBdhsUGqbOCGtaHbf3jhqlfjZmwoJNbxtnPrwjvt23TCrKax2GK0Jxh2MY1xrPgIWStfNN22EV3wrnTbrnYR3H23klB3ivJUEOHgEElfnDG0YJu2OtmW5SmHUrQ1wrfW+Dtgg5ESocwRQRKM2TBErX0ewA5UALCnLL8TLtlajpoS8xyvXdH01lncHSAhXqLF5IZKwaXpS/MNLKRGN45nSN6oTisAN7pHb4b+lT6yRsH1L2S7bzfvuh9mZBp5nuFLTPy2nlMgrhPzpkp/F1vY=\",\"slv2\":{\"version\":1,\"protocol\":2147483649,\"ssVer\":\"2.2.0.38326\",\"from\":\"289b8e528ef436d431183e1a5e2d9ca606597b4dbdf3f626352b965a886e0416\",\"hwfp\":\"AQAAAL+eDr2CoU8XmfKmrn7Z4KSGjMvOxBtyxPyH46U+faQkvg0DD41BUdiqS3k/V7b/hGc/eJ0pn+24aB9eEGn1aMw6r3dSH4Jprn6cZFRkJnXIPFJqp+SOwAvjq916pZed8m1MIjS+97vqvlpHJn5JRb9dSGo7WRbLaBVGZYzcjfWTYTs1KbrlyS/nvUl042gEhZKg1d8VzEJkMrJeTLImj9vHQGWIRUMddH/uwafS+yw7Ykq9vICPKnaNnr+7VOqIEkYiaFo0sQGBUZQgT+pRiH/eTUMrvf+3EQzpg6osSu6jm41J1UNeJHfxNw8qdgxPNrFk9DBLHo2xcxxYp0cwAYqsmZBI7eO0Kre8k3fPdCmqAjDXJsJzCSnr2S/hlwlLlkwJ6aS72tIZTkxOa9E+M0wC87+c7EvvarJhwfuPgtz/xolAkPMFJ9pYBB44VyDoM7MdowIImHuk4i7CrujSZS4CK3ww2J0JiGvLgj/CW+AEyJ0790NPm8Tl2fgbIFvizg==\",\"info\":\"AQAAAKO4VFY/7V191hpqik+o4kgeAeO9KKr46iViY2xPpHaM++IDejZnNtv9QzP85cAiy8ZqpHilklGA6mZaoo+GOgvOM2tL3K7YsFhlvXqRFcaUq1Uk+ehcYBk8qpVDD0rg6Nh4MIF2zFTcQX3QI/B2j9b98fAkbMRlDuZ7ZeuMafm+STAUt2MM31zxf60ZC3ZBf2pTjJQF2/As6LuymPenQ4yGJ2vug4VLValLk+biSl5Cw3LulCivHmgXIa3ru+V1TeWkBRi7rjn8PwENw03TEx40roluVp9QhcbWcY+tQVi0xYac1PexQRDJ1noKIfvntoO9S0X247ySk8gAQsUKWB1IHbukd57GNMVdyXRj6BrXr1RyNInuqvUqdPkMbQ1zvCHxRGZHPcbvhErknFWbANKSxQUGCtKuwyuao0z0nlOhc56TTbQQYzS4DbDm3ZyYctHDLAvqGK/q6IF3AzQ4bQNAZvKtl0XURQd9E+Pyn6zjYKT9yyGwtG6+PfeD1o9P93lLdFC5HnsUe9b9yYrNA6O1wOtYPsCHLzE6sUz5zM2L\"}}"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

10. 使用 C2D 反查许可

  • 接口地址 https://openapi.senseyun.com/v2/sv/findBoundLicenseKeyByC2d

  • 说明 通过 C2D 查询该 C2D 对应的机器绑定的授权码

  • 参数 请将 C2D 文件的内容作为 HTTP 请求 body 直接传入

  • 注意事项:

  1. 由 Virbox 用户工具导出的 c2d 文件具有时效性, 默认时效是 24 小时, 超过便失效, 因此在调用该接口时请确保得到的 c2d 文件是最新导出的文件, 否则接口会返回相应的错误
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataData21

Data21

字段名称类型描述
licenseKeysarray该 C2D 对应的机器绑定的所有授权码
  • 示例

请求内容:

{
"version": 3,
"c2dType": 1,
"pcName": "DESKTOP-S9216",
"os": "MicrosoftWindows10(build9200)x64",
"ip": "1.2.3.4",
"mac": "AA-AA-AA-AA-AA-AA",
"machineId": "72365cc425626ccd8b8f3bd6a23ad78db3f55cbfb2d7787fe28c4497c5b6155c",
"reqData": "AgAAALuyTWEkbiT1Ccy6GpGLyUJXXVuIFz3baZW6t1nSx9/tUSCPzIv4rcKbzeYnbgaOJI2mGycwLACETor1k3zH33yaKEPXwcszdPqQuSu9mND/8gjC/GEgrMtksVKG7RGIlKh8x1c61TLhXHICzHTR5basZFD7tJDhLJFKCrOmFudb32enBpp8H9QNkjFSo0EZDWV5IoElDkwxcOBFY+OygtQt6MyqxGZ9ND5Q4MdqC5/xPOL7jswV02IRCCE7Vb3M+WpqePIEAO4X0MHCNhZvpInG5hN3z98lDBg08u/iSbyQdwIFKHEVP1be74+P58UiuVwMdIgHl59P5E5b/KZnZVTTRgf5+5n7eHrl9uZezM+kXmD0jLIv4gC+42dvLJV7mwdjZe8hS99IgNPyoswedJ/6vKHdklQuoLgQed3RIVFAqnrw3PtrfqmsfjRhaFGpqPlMfAcUG2dmkN0njNaXxmI=",
"slv2": {
"version": 1,
"protocol": 2147483649,
"ssVer": "2.4.0.54681",
"from": "72365cc425626ccd8b8f3bd6a23ad78db3f55cbfb2d7787fe28c4497c5b6155c",
"hwfp": "AwAAAJhJSFXIQBBxdJPyzPbj/1qFNntGrQW98NP00pY2BqmYSrRiuCIkEImlAt4mxFrV/Qjg/aKdbZS4PKwzhDOPMWFy2LbQCcyT1vYsq9/E6oP8k6EEtzJDifuAv+1OrxDEAbo/tgdXvRj3ajWP3BcixLvz4tiYclkOh7kn1LFD7ZyhFkIFeu8R6Df2+QsmLzkPYwTkfkg3cYXPl29jzL3NnphTJer2toFg0LqUceOG8eCD9XtJ+LDvraL0mAlxfG6snBTOyh2lGk/aWVdTtKedmcPOuIxD9c6O0F9LriXHlVQogGaqLcmoQN23IfAlsCmrcL/BB+0SGQWEFpvL85zAWXVuWH6fV8mmAVKVe9l9QxABdMdIY2n6jp6UztKMu1pph5MoJVbpjiTyTjc4fL61fjo+UQx37FN5VRLiPw7Mp1LikqISQkcRvIlyUMI/D9qommShZIg3pqAB2YuNYY7Hw+EkX50KOHFmHAK8t0ecilrs5LFATm5itpgsAbKtTRSnRQ==",
"info": "AQAAAL70frHR3tO60mkgA9WYjwXjEGiphHSWwWe8gYYTdLBpil9X4gwgfja9fDamS//ouMVoUMalNAdeclXYrnvqgl6KxE5S00mPPuhVtPpwIq5gkGOGeR54kXEEYa82ebhrYs3fG12BeOPHFmwQYGOUrm/mD42blcrMFqce8hqZedxZokDg81bjqCkqCTdkHMpluylDtReVAT6FDTzrKSKU9qxu3BD1BTFdRXZO6m8Mkby65tIgmKFjbsHe/WqWTJwyQhkWUzC1/NGfgzOKqSnIYih0X3A4czvgEi63PoHyS+UUXVH8snBwceijY5jfihYJQogDWRjvtfWaLLW8i0RtWUM6js5oIlUyOU2IgAgNG/eqTFXIv2qAU0ZS4cXlmP9CR6uiXlPhL6dxMQboGzhatWZnVzzM0wQV1tsYzLt9zQ6Wn4gVAmzRxcw4IUfkX4oCEzCsFCr3cYdIZz2vcQAIYVUfIEGArkM2TNj0gv11xe+MzF4QnMu7scdX4s/OWlTJyAXTcjoL1WvBrUQaa9BSOBFXXc+MqqZN9Re7MhclrzZJlOQp3NdklbH7P+O31k8jf84m1UoU99QFn9FLmaCPxXsbQSZHRsDZdyoxoVUVPcB3CpV7i9mtW2cEGkdgXU7ecg=="
}
}

响应内容:

{
"code": 0,
"desc": "成功",
"data": {
"licenseKeys": [
"Q7D4-5CY5-J6Y0-F2DJ"
]
}
}

11. 锁定授权码

  • 接口地址 https://openapi.senseyun.com/v2/sv/lockLicenseKey

  • 说明 锁定指定的授权码, 锁定后的授权码将不能再进行绑定或在线更新等操作

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
  • 注意事项:
  1. 授权码属于离线许可, 如果在绑定时, 授权码没有设置强制认证, 这个许可在锁定后仍然可以正常使用
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"licenseKey": "AWBZ-GHYL-JWGH-2FHN"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

12. 解锁授权码

  • 接口地址 https://openapi.senseyun.com/v2/sv/unlockLicenseKey

  • 说明 解锁指定的授权码

  • 参数

参数名称必选类型默认值描述
licenseKeystring授权码
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"licenseKey": "AWBZ-GHYL-JWGH-2FHN"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

十. 硬件锁许可管理接口

1. 发布添加硬件锁许可

  • 接口地址 https://openapi.senseyun.com/v2/sv/dlm/issueAddLicense

  • 参数

参数名称必选类型默认值描述
pinstring填写在云平台设置的云控制锁 PIN 码
shellNumberstring外壳号
licenseIdnumber许可 ID, 必须是平台上已有的产品
forceboolean是否强制升级
为 true 时, 若锁内无此许可, 则添加; 若有此许可, 则先删除后添加
为 false 时, 若锁内无此许可, 则添加; 若有此许可, 则报错
isForeverboolean是否永久许可
templateNamestring模板名称, 仅用于平台展示, 与硬件锁模板无关, 最长 64 个字符
versionnumber0许可版本, 取值范围: [0, 4294967295]
startTimenumber许可开始时间, UTC 时间戳(秒)
endTimenumber许可结束时间, UTC 时间戳(秒)
counternumber许可使用次数
spannumber时间跨度(天), 取值范围: [1, 18250]
concurrentnumber0最大并发用户数, 取值范围: [0, 65535]
concurrentTypestringprocess并发类型, 取值可选: process/winUserSession
其中, process 以 Windows 进程限制, winUserSession 以 Windows 会话限制
modulearray子模块列表, 模块取值范围: [1, 64]
romobject许可只读区, 只有一个属性: data, 为数据区内容 hex 字符串
rawobject许可读写区, 有两个属性: data, resize, data 为数据区内容 hex 字符串, resize 为重置读写区大小, 取值范围: [读写区数据长度, 65535]
pubobject许可公开区, 只有一个属性: data, 为数据区内容 hex 字符串
dataZonePadModenumber1数据区编辑模式
1-二进制模式
2-Key/Value 模式
kvSeparatorstring:dataZonePadMode = 2时生效 Key/Value 分隔符, 长度为 1
kvConnectorstring;dataZonePadMode = 2时生效 Key/Value 连接符, 长度为 1
remarkstring备注
contractNostring合同编号
tagIdsarray标签 ID 列表
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"pin": "1234567890qwerty",
"shellNumber": "201600001322",
"licenseId": 10100,
"force": true,
"isForever": false,
"version": 1,
"startTime": 1710989502,
"endTime": 1711075902,
"concurrent": 0,
"concurrentType": "process",
"module": [ 1, 2, 3, 4, 5 ],
"rom": {
"data": "12"
},
"raw": {
"data": "34"
},
"pub": {
"data": "56"
}
}

响应内容:

{
"code": 0,
"desc": "成功"
}

2. 发布更新硬件锁许可

  • 接口地址 https://openapi.senseyun.com/v2/sv/dlm/issueUpdateLicense

  • 参数

参数名称必选类型默认值描述
pinstring填写在云平台设置的云控制锁 PIN 码
shellNumberstring外壳号
licenseIdnumber许可 ID, 必须是平台上已有的产品
isForeverboolean是否永久许可
versionnumber0许可版本, 取值范围: [0, 4294967295]
startTimeobject许可开始时间, 有两个属性: op, value, op 可选值 set/inc/disable, set 为设置开始时间为 value 值, inc 为在已有开始时间基础上增加 value 值, disable 为禁用此项即不限制开始时间; value 为 UTC 时间戳(秒)
endTimeobject许可结束时间, 有两个属性: op, value, op 可选值 set/inc/disable, set 为设置结束时间为 value 值, inc 为在已有结束时间基础上增加 value 值, disable 为禁用此项即不限制结束时间; value 为 UTC 时间戳(秒)
counterobject许可使用次数, 有两个属性: op, value, op 可选值 set/inc/disable, set 为设置使用次数为 value 值, inc 为在已有使用次数基础上增加 value 值, disable 为禁用此项即不限制使用次数, value 为 number
spanobject许可时间跨度, 有两个属性: op, value, op 可选值 set/inc/disable, set 为设置时间跨度为 value 值, inc 为在已有时间跨度基础上增加 value 值, disable 为禁用此项即不设置时间跨度, value 为天数, 取值范围: [1, 18250]
concurrentnumber最大并发用户数, 取值范围: [0, 65535]
concurrentTypestringprocess并发类型, 取值可选: process/winUserSession
其中, process 以 Windows 进程限制, winUserSession 以 Windows 会话限制
modulearray子模块列表, 模块取值范围: [1, 64]
romobject许可只读区, 只有一个属性: data, 为数据区内容 hex 字符串
rawobject许可读写区, 有两个属性: data, resize, data 为数据区内容 hex 字符串, resize 为重置读写区大小, 取值范围: [读写区数据长度, 65535]
pubobject许可公开区, 只有一个属性: data, 为数据区内容 hex 字符串
dataZonePadModenumber1数据区编辑模式
1-二进制模式
2-Key/Value 模式
kvSeparatorstring:dataZonePadMode = 2时生效 Key/Value 分隔符, 长度为 1
kvConnectorstring;dataZonePadMode = 2时生效 Key/Value 连接符, 长度为 1
remarkstring备注
contractNostring合同编号
tagIdsarray标签 ID 列表
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"pin": "1234567890qazwsx",
"shellNumber": "200200000089",
"licenseId": "273",
"isForever": false,
"concurrent": 3,
"concurrentType": "winUserSession",
"module": [ 1, 2, 3 ],
"startTime": {
"op": "set",
"value": 123
},
"endTime": {
"op": "inc",
"value": 123
},
"counter": {
"op": "inc",
"value": 5
},
"span": {
"op": "disable"
},
"rom": {
"data": "1234",
"offset": 0,
"resize": 2
},
"raw": {
"offset": 0,
"resize": 0
},
"pub": {
"data": "234567",
"resize": 3
}
}

响应内容:

{
"code": 0,
"desc": "成功"
}

3. 发布删除硬件锁许可

  • 接口地址 https://openapi.senseyun.com/v2/sv/dlm/issueDeleteLicense

  • 参数

参数名称必选类型默认值描述
pinstring填写在云平台设置的云控制锁 PIN 码
shellNumberstring外壳号
licenseIdnumber许可 ID, 必须是平台上已有的产品
  • 注意事项:
  1. 删除硬件锁许可默认强制删除, 即如果许可不存在也会升级成功
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"pin": "1234567890qazwsx",
"licenseId": "273",
"shellNumber": "200200000089"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

4. 发布清空锁内所有许可

  • 接口地址 https://openapi.senseyun.com/v2/sv/dlm/issueClearAllLicenses

  • 参数

参数名称必选类型默认值描述
pinstring填写在云平台设置的云控制锁 PIN 码
shellNumberstring外壳号
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"pin": "1234567890qazwsx",
"shellNumber": "200200000089"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

5. 获取硬件锁许可详情

  • 接口地址 https://openapi.senseyun.com/v2/sv/dlm/getLicenseDetail

  • 参数

参数名称必选类型默认值描述
shellNumberstring外壳号
currentPagenumber1当前页数, 从 1 开始
pageSizenumber10每页数量
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataData22[]

Data22

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
rowsDongleLicenseDetail[]锁内所有许可信息

DongleLicenseDetail

字段名称类型描述
licGuidstring许可 guid
licenseIdnumber许可 ID
productNamestring产品名称
shellNumberstring外壳号
deviceIdstring芯片序列号
statusnumber许可状态
0-正常
1-被删除
isForeverboolean是否永久许可
startTimeOpTypenumber开始时间操作类型, 具体含义见下文
startTimenumber许可开始时间, 秒
endTimeOpTypenumber结束时间操作类型, 具体含义见下文
endTimestring许可结束时间, 秒
spanTimeOpTypenumber时间跨度操作类型, 具体含义见下文
spanTimenumber时间跨度(天)
counterOpTypenumber使用次数操作类型, 具体含义见下文
counternumber许可使用次数
concurrentnumber并发用户数限制
concurrentOpTypenumber并发用户数操作类型, 具体含义见下文
concurrentTypestring并发类型
会话: winUserSession
进程: process
modulesarray子模块列表
upgradeStatusnumber升级状态
0, 1-未升级
2-升级成功
3-升级失败
4-跳过升级
failedMsgstring若升级失败, 错误描述
licenseVernumber许可版本
romstring许可只读区, hex 字符串
rawstring许可读写区, hex 字符串
pubstring许可公开区, hex 字符串
dataZonePadModenumber数据区编辑模式. 1-文件模式, 2-Key/Value 模式
kvSeparatorstringKey/Value 分隔符, 数据区编辑模式为 Key/Value 时启用, 长度为 1
kvConnectorstringKey/Value 连接符, 数据区编辑模式为 Key/Value 时启用, 长度为 1
rawResizenumber重置读写区大小
createTimenumber创建时间, UTC 时间戳(秒)
updateTimenumber更新时间, UTC 时间戳(秒)
remarkstring备注
contractNostring合同编号
tagsarray标签信息列表

opType

描述
0未设置
1设置
2追加
4不限制
  • 示例

请求内容:

{
"shellNumber": "201600001322",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"data": {
"rows": [
{
"concurrent": 100,
"concurrentOpType": 1,
"concurrentType": "process",
"createTime": 1567061925,
"deviceId": "9733C801000702072C6400120003002D",
"endTime": 1568131199,
"endTimeOpType": 1,
"failedMsg": "成功",
"isForever": false,
"licGuid": "87a6562d34ca4f849c729c098692d2f4",
"licVersion": 0,
"licenseId": 20000,
"modules": [],
"productName": "计算器",
"shellNumber": "201600001322",
"startTime": 1567008000,
"startTimeOpType": 1,
"status": 0,
"updateTime": 1567063631,
"upgradeStatus": 2,
"remark": "备注信息",
"contractNo": "合同编号 1023"
},
{
"concurrent": 0,
"concurrentType": "process",
"createTime": 1564649180,
"deviceId": "9733C801000702072C6400120003002D",
"failedMsg": "成功",
"isForever": false,
"licGuid": "73b67fe6a327412c9684d2fe5e4b7742",
"licVersion": 0,
"licenseId": 10000,
"modules": [],
"productName": "记事本",
"shellNumber": "201600001322",
"status": 1,
"updateTime": 1565075005,
"upgradeStatus": 2,
"tags": [
{
"id": 1,
"name": "标签 1"
},
{
"id": 2,
"name": "标签 2"
}
]
}
],
"totalCount": 2,
"totalPage": 1
},
"desc": "成功"
}

十一. 硬件锁信息管理接口

1. 修改用户锁联系人信息

  • 接口地址 https://openapi.senseyun.com/v2/sv/dm/modifyContact

  • 参数

参数名称必选类型默认值描述
shellNumberstring外壳号
userNamestring用户名称, 最长 64 个字符
telstring电话, 最长 32 个字符
emailstring邮箱, 必须为合法的邮箱地址, 最长 64 个字符
cellphonestring手机号, 必须为合法的手机号码
addressstring联系地址, 最长 128 个字符
tagIdsarray标签 ID 列表
descstring用户锁描述信息, 最长 300 个字符
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"shellNumber": "201600001322",
"userName": "John Doe",
"cellphone": "18600706089",
"email": "15623566@qq.com",
"tel": "010-56730936",
"address": "北京市海淀区西北旺东路 10 号院东区 5 号楼 5 层 510"
}

响应内容:

{
"code": 0,
"desc": "成功"
}

2. 开关用户锁在线自动升级

  • 接口地址 https://openapi.senseyun.com/v2/sv/dm/autoUpgradeSwitcher

  • 参数

参数名称必选类型默认值描述
shellNumberstring外壳号
autoUpgradeboolean是否自动升级
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"shellNumber": "201600001322",
"autoUpgrade": true
}

响应内容:

{
"code": 0,
"desc": "成功"
}

3. 获取用户锁信息

  • 接口地址 https://openapi.senseyun.com/v2/sv/dm/getBriefInfo

  • 参数

参数名称必选类型默认值描述
shellNumberstring外壳号, 支持模糊查找
emailstring邮箱, 支持模糊查找
cellphonestring手机号, 支持模糊查找
userNamestring备注名称, 支持模糊查找
tagIdsarray标签 ID 列表
currentPagenumber1当前页, 从 1 开始
pageSizenumber10每页数量
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataData23

Data23

字段名称类型描述
totalPagenumber总页数
totalCountnumber总条数
rowsDongleBriefInfo[]用户锁记录列表

DongleBriefInfo

字段名称类型描述
deviceIdstring芯片序列号
shellNumberstring外壳号
userNamestring用户名称
cellphonestring手机号
emailstring邮箱
telstring电话
addressstring联系地址
descstring备注信息
produceTimenumber生产时间, UTC 时间戳(秒)
updateTimenumber更新时间, UTC 时间戳(秒)
autoUpgradeboolean是否在线自动升级
tagMessagearray标签信息列表
  • 示例

请求内容:

{
"shellNumber": "201600001322",
"currentPage": 1,
"pageSize": 10
}

响应内容:

{
"code": 0,
"data": {
"rows": [
{
"address": "北京市海淀区西北旺东路 10 号院东区 5 号楼 5 层 510",
"autoUpgrade": false,
"cellPhone": "18600706089",
"desc": "",
"deviceId": "9733C801000702072C6400120003002D",
"email": "15623566@qq.com",
"produceTime": 1521648000,
"shellNumber": "201600001322",
"tagMessage": [
{
"createTime": 1488263583000,
"id": 48,
"name": "黄金客户"
}
],
"tel": "010-56730936",
"updateTime": 1568044800,
"userName": "Jonn Doe"
}
],
"totalCount": 1,
"totalPage": 1
},
"desc": "成功"
}

十二. 标签管理接口

1. 添加标签

  • 接口地址 https://openapi.senseyun.com/v2/sv/addTag

  • 参数

参数名称必选类型默认值描述
namestring标签名称
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataTagId

TagId

字段名称类型描述
idnumber标签 ID
  • 示例

请求内容:

{
"name": "独立开发者"
}

响应内容:

{
"desc": "OK",
"code": 0,
"data": {
"id": 12
}
}

2. 修改标签

  • 接口地址 https://openapi.senseyun.com/v2/sv/updateTag

  • 参数

参数名称必选类型默认值描述
idnumber标签 ID
namestring标签名称
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"id": 234,
"name": "独立开发者"
}

响应内容:

{
"desc": "OK",
"code": 0,
}

3. 删除标签

  • 接口地址 https://openapi.senseyun.com/v2/sv/deleteTag

  • 参数

参数名称必选类型默认值描述
idnumber标签 ID
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
  • 示例

请求内容:

{
"id": 234
}

响应内容:

{
"desc": "OK",
"code": 0,
}

4. 按标签名称查找标签

  • 接口地址 https://openapi.senseyun.com/v2/sv/findTags

  • 参数

参数名称必选类型默认值描述
namestring标签名称
  • 响应
字段名称类型描述
codenumber状态码. 0-成功, 其它值表示失败
descstring错误描述.
dataTag[]标签列表

Tag

字段名称类型描述
idnumber标签 ID
namestring标签名称
createTimenumber创建时间, UTC 时间戳(秒)
  • 示例

请求内容:

{
"name": "独立开发者"
}

响应内容:

{
"desc": "OK",
"code": 0,
"data": [
{
"createTime": 1505273720000,
"id": 576,
"name": "独立开发者"
}
]
}

十三. 附录

  1. 接口授权类错误码
错误码分类描述
0接口授权类调用成功
10001接口授权类Auth fail, 授权失败.
1. 由于SenseAppID/Secret 错误;
2. SenseTimestamp 与服务器时间相差过大;
3. 重复使用 SenseNonce 值
10002接口授权类不支持的 Content-Type
10003接口授权类Traffic over limit. 接口调用频次超出限制. 若您需要调用的频次极高, 请联系深盾技术支持.
10004接口授权类鉴权阶段的未知错误
  1. 产品及模板相关错误码
错误码分类描述
2产品类Demo 开发商只能建一个产品
18产品类产品 id 已经创建过了
29产品类/模板类文件大小超过 64K
300产品类删除产品前先删除该产品下的所有模板
301产品类/模板类产品不存在
400模板类模板不存在
  1. 用户相关错误码
错误码描述
1Param error, 参数错误. 1、参数填写格式不正确; 2、参数漏填; 3、参数非 json 格式.
4Unknown error,由于系统内部原因导致的错误.可能由于系统异常, 调用远端服务异常等原因导致出错报出该错误.
12User Not Exist, 用户不存在.开发者网站根据指定账号查询用户为空, 该账号用户不存在.
15获取开发商信息出错.云平台通过 senseAppID、Secret 获取对应开发商信息失败导致.
101删除影子账号失败. 由于用户中心删除该账号用户失败导致删除影子账号失败.
102修改影子账号密码失败. 由于系统内部未知错误导致修改密码失败.
103Account Type Error,账号类型须为影子账号. 修改用户密码时传入用户账号为普通用户账号, 应传入影子账号, 该方法只能修改影子账号密码.
200User Exist,用户已存在. 用户中心已经存在该用户, 重新换取账号添加用户
  1. 许可相关错误码
错误码描述
0调用成功.
1Param error, 参数错误. 1、参数填写格式不正确; 2、参数漏填; 3、参数非 json 格式.
4Unknown error,由于系统内部原因导致的错误.可能由于系统异常, 调用远端服务异常等原因导致出错报出该错误.
6Online Lic Error, 在线签发许可错误. 调用 developer 服务发布许可时出错报出该错误.
8Demo License Limit, 超过 demo 开发商授权上限. demo 开发商发布授权时最多可发布100 条许可, 超过 100 条就会报出该错误.
12User Not Exist, 用户不存在. 开发者网站根据指定账号查询用户为空, 该账号用户不存在.
15获取开发商信息出错. 云平台通过 SenseAppID、Secret 获取对应开发商信息失败导致.
23该模板的授权方式产品不支持. 模板的授权方式超出产品的授权方式范围, 在产品的授权方式范围内修改模板的授权方式后重发许可即可.
28License Not Exist, 许可不存在. 删除许可时, 查找该许可不存在时报错.
40Template Deleted, 模板不存在或已删除. 发布许可所依赖模板已经被删除, 不能再根据该模板发布许可, 重新选择或新建模板发布许可.
49模板许可形式与填写的许可形式冲突. 调用接口时传入许可形式的参数与传入模板相应的许可形式相冲突, 修改填写的许可形式参数.
507模版不允许在发布许可时临时修改限制, 即添加模板的参数 canModify=false 时, 此错误码只会出现在 "依赖模板发布许可" 接口返回值中
517许可已过期. 更新许可时, 许可已过期则不可更新该许可