EventHub
CITV 开放接口
CITV 开放给客户的业务接口定义与接入说明
CITV 开放接口
本文档定义了 CITV 向客户开放的合规业务接口,用于商户注册、内容管理等场景。
一、接口概要
1. 接口调用方
- 客户方调用 CITV 开放的接口
- 调用前需完成身份认证和授权
2. 接口地址 BaseUrl
由 CITV 提供正式环境地址
范例:https://eh.citv.cc/api/v2
3. 接口一览
| 名称 | 接口 | 请求方式 | 说明 |
|---|---|---|---|
| 商户注册 | /biz/merchants/register | POST | SaaS 化商户注册接口 |
二、签名规则
1. 签名生成方式
按照固定格式拼接以下参数生成签名源串:
key- CITV 颁发的接口密钥(Secret),由 CITV 在分配 appid 时一并提供t- 当前时间戳(Unix 时间戳,秒级,10 位数字)
签名源串拼接格式:
key + t签名源串示例:
citv_secret_abc1231744567890对签名源串进行 MD5 加密处理:
- 将源串转换为 UTF-8 字节数组
- 使用 MD5 算法计算哈希值
- 将哈希值转换为 16 进制字符串表示(小写)
TypeScript 示例
import crypto from "crypto";
/**
* 生成 CITV 开放接口请求签名
* @param key - CITV 颁发的接口密钥
* @param timestamp - 当前时间戳(秒级)
* @returns 签名值(32 位小写十六进制字符串)
*/
function generateSign(key: string, timestamp: number): string {
// 拼接签名源串:key + t
const signString = `${key}${timestamp}`;
// 计算 MD5 并转换为小写十六进制字符串
return crypto
.createHash("md5")
.update(signString, 'utf8')
.digest("hex")
.toLowerCase();
}
// 使用示例
const key = "citv_secret_abc123";
const timestamp = Math.floor(Date.now() / 1000); // 秒级时间戳
const sign = generateSign(key, timestamp);2. 请求说明
请求时需在请求体中携带 sign 和 t 字段:
sign- 签名值,sign = MD5(key + t)t- 当前时间戳(秒级,10 位数字)
3. 错误处理
当鉴权失败时,服务端会返回统一格式的错误响应:
{
"success": false,
"message": "错误描述",
"code": "错误码"
}常见错误码说明:
| 错误码 | 说明 |
|---|---|
| INVALID_APPID | appid 无效或不存在 |
| INVALID_SIGN | 签名验证失败 |
| INVALID_PARAMETER | 请求参数错误 |
| SERVER_ERROR | 服务器内部错误 |
三、接口列表
1. SaaS 化商户注册接口
描述: 用于在 CITV 平台注册,修改 SaaS 化商户,调用成功后可获得商户最新的 contentId
请求方式: POST
请求路径: /biz/merchants/register
请求参数
| 参数名 | 类型 | 必填 | 描述 |
|---|---|---|---|
| appid | string | 是 | 应用唯一标识,由 CITV 分配 |
| provider | string | 是 | 云服务商类型:tx = 腾讯云volc = 火山引擎volc-saas = 火山引擎 SaaS 化直播 |
| merchantId | string | 是 | 商户唯一标识 |
| ak | string | 是 | 云服务商的 Access Key |
| sk | string | 是 | 云服务商的 Secret Key |
| t | number | 是 | 当前时间戳(Unix 时间戳,秒级,10 位数字),用于签名验证 |
| sign | string | 是 | 请求签名,sign = MD5(key + t),其中 key 为 CITV 颁发给该 appid 的接口密钥,t 为当前时间戳(秒级) |
签名生成
本接口使用统一的签名算法,详见「二、签名规则」。
请求示例
{
"appid": "app_1234567890",
"provider": "volc-saas",
"merchantId": "mch_1234567890",
"ak": "your_access_key",
"sk": "your_secret_key",
"t": 1744567890,
"sign": "生成的签名值"
}响应参数
| 参数名 | 类型 | 描述 |
|---|---|---|
| contentId | string | 商户最新 ContentId,由 CITV 颁发,用于转发火山引擎 SaaS 直播时 providers[].contentId 的携带 |
| createdAt | string | 注册时间(ISO 8601 格式) |
响应示例
{
"isok": true,
"msg": "",
"code": 0,
"dataObj": {
"contentId": "83633_394_h5_mix",
"createdAt": "2026-04-13T10:00:00.000Z"
}
}注意事项
- 调用时机:每次商户新增或修改时都需要调用「商户注册接口」
- AK/SK 保留:旧的
ak和sk会保留,用以查询相关 VOD 等录像服务 - contentId 使用:每次火山引擎 SaaS 商户开播的消息中需要携带
contentId - 每次注册都会颁发新的
contentId