API接入指南
引言
诺瓦云开放平台是诺瓦云开放生态的基础,为用户提供了全面的内容发布、设备管控和监控能力,助力打造智能化的数字信息发布解决方案。
平台集成了 API 文档、在线调试工具等丰富资源,通过这一平台,用户只需编写少量代码,即可快速操作和调用诺瓦云服务,实现对 LED 显示屏的信息发布和监控运维。通过借助丰富的 API 资源,用户可以深度开展系统集成,提升现有 IT 系统的使用效能,从而带来更大的业务价值。
诺瓦云开放平台提供了屏精灵和屏老板两大系统的功能能力:
屏精灵 API 聚焦于信息发布和终端设备节目播放控制。通过 API 接口,用户可以获取播放器列表、播放器状态、播放器运行控制、节目发布控制以及播放日志等信息。
屏老板 API 则专注于终端设备和显示屏的运行状态监控。用户可以通过 API 接口,获取终端设备、显示屏的基本信息和运行状态数据
此外,诺瓦云开放平台还提供了免密跳转到屏精灵/屏老板的接口能力。
对于准备调用诺瓦云平台 API 的开发者而言,了解 API 调用的整个流程并掌握相关的技术细节至关重要。本文档将提供详细的介绍和指导,帮助开发者快速掌握 API 的调用方法,包括请求结构、鉴权认证等关键技术点。通过阅读本文,开发者将能够熟悉调用 API 的完整流程,并具备所需的技术能力,为在诺瓦云平台上开展开发工作做好充分准备。我们希望这份文档能为您提供有价值的参考和帮助。如有任何疑问,欢迎随时与我们沟通交流。
平台功能
- 提供信息发布的接口调用方法,实现对 LED 显示屏的信息发布控制
- 提供监控运维的接口调用方法,实现对 LED 显示屏整体链路上各类设备的运行状态进行监控
- 支持 API 名称检索
- 提供密钥的在线管理功能
- 提供 API 在线调试功能
支持设备范围
- 信发接口支持的设备范围:TU/TB/T卡系列、VPlayer系列
- 监控接口支持的设备范围:MSD/MCTRL系列、V/VX系列、TU/TB/T卡系列、MBOX系列、H系列网口发送卡
接入准备
- 请准备上述支持的设备
- 若使用信发API接口,请将设备绑定在屏精灵系统,可通过屏精灵桌面端软件或远程进行绑定
- 若使用监控API接口,请将设备绑定在屏老板系统,可通过NovaLCT软件进行绑定或从屏精灵导入
- 使用API开放平台之前,请先登录
接入步骤
什么是应用接入秘钥AK/AS
AK:AppKey ID 应用接入键标识,用于标识用户身份。一个用户可以拥有多个AK。
AS:AppKey Secret 应用接入键秘钥,是一个用于验证您拥有该 AppKey 的密码。
AK与AS一一对应,用户使用 AK/AS 生成 API 接口鉴权信息。
如何获取AK/AS
首先注册登录“诺瓦云开放平台”。诺瓦云服务在多个国家和地区独立部署,以确保数据的隔离和安全。为了访问您所在区域的云服务,请选择正确的节点登录。已有屛精灵、屏老板账号的用户可以直接登录。用户登录平台后自动获得AK/AS、API服务域名地址,用户默认拥有基础 API 调用权限。用户通过企业认证后可以获得完整 API 接口调用权限。
诺瓦云服务根据不同的请求路径区分不同的请求。服务域名可在诺瓦开放平台内获取,具体 API 路径请参考 API 接口文档。
- 请求协议:https
- 服务域名示例:openapi-us.vnnox.com ()
- API请求路径示例:/v2/player/list
结合请求协议、API服务域名、具体 API 请求路径,可以拼接为完整请求地址(URL)。
示例:https://openapi-us.vnnox.com/v2/player/list
参数 | 说明 |
---|---|
AppKey | 接入标识。 |
Nonce | 随机字符串(8~64个字符,仅限数字或英文字母) |
CurTime | 当前 UTC 时间戳,从 1970 年 1 月 1 日 0 时 0 分 0 秒开始到现在的秒数。为确保请求的真实性与及时性,客户端与服务端之间的时间戳误差应控制在5分钟以内。超过最大误差视为无效请求。 |
CheckSum | 基于 AK/AS 生成请求签名,详见步骤四。CheckSum = SHA256(AppSecret + Nonce + CurTime) |
CheckSum 可通过将获取的 AppSecret 结合 Nonce 和 CurTime 这两个参数拼接成字符串后再进行 SHA256 哈希计算来生成。CheckSum = SHA256(AppSecret + Nonce + CurTime) |
|
计算生成 CheckSum 后,把值填入上一步的公共请求头中。诺瓦服务端在接收到 API 请求后也会采用同样的方法进行 CheckSum 计算与校验。 |
public class AuthUtils {
public static String generateCheckSum(String appSecret, String nonce, String curTime) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
String input = appSecret + nonce + curTime;
byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
</Accordion>
<Accordion title="Go示例">
```Go
import (
"crypto/sha256"
"encoding/hex"
)
func GenerateCheckSum(appSecret, nonce, curTime string) string {
hash := sha256.Sum256([]byte(appSecret + nonce + curTime))
return hex.EncodeToString(hash[:])
}
def calculate_checksum(app_secret, nonce, cur_time):
input_str = app_secret + nonce + cur_time
checksum = hashlib.sha256(input_str.encode('utf-8')).hexdigest()
return checksum
cur_time = str(int(time.time()))
</Accordion>
<Accordion title="PHP示例">
```php
function generateCheckSum($appSecret, $nonce, $curTime) {
$input = $appSecret . $nonce . $curTime;
return hash('sha256', $input);
}
curl -X GET \
-H 'AppKey: 12345678901234567890123456789012' \
-H 'Nonce: 1a2b3c4d' \
-H 'CurTime: 1688201200' \
-H 'CheckSum: f663157a0881e3345f20d7bcc3ee82d871ec5ac804fff2e5527c396081a8fce2' \
-H 'Content-Type: application/x-www-form-urlencoded' \
https://openapi-us.vnnox.com/v2/player/list?count=10
请求成功示例
HTTP/1.1 200 OK
Content-Type: application/json
......
请求失败示例
HTTP/1.1 401 Unauthorized
Content-Type: application/json
Content-Length: 108
{
"error": {
"code": "INVALID_APPKEY"
"message": "The AppKey provided does not exist in our system"
}
}
业务流程示例
显示屏信息发布业务流程示例
显示屏监控运维业务流程示例