开发者文档
棱镜审核系统开放 API 接入指南:注册开通、请求签名、接口列表、Webhook 回调与计费说明
开发概述
棱镜审核系统提供内容安全审核 API(评论 / 媒体 / 合集 / 认证 / 敏感词),覆盖 AI 预审 + 人工终审全流程。通过简单接口调用即可接入主流平台的内容审核能力,并支持 Webhook 实时回调审核结果。
开发前提
- 完成自助注册(首页「立即开通」),注册即开通并自动分配密钥
- 已获取 API 密钥:channel_id(渠道标识)与 app_secret(渠道密钥,仅展示一次)
- 请求需携带 MD5 签名(见「认证授权」),推荐使用服务端调用
接入流程
注册开通
获取 channel_id / app_secret
生成签名
MD5 参数签名 + 密钥
调用接口
提交审核 / 查询结果
接收结果
Webhook 实时回调 / 轮询兜底
API 简介
Base URL
https://prismapi.tengxiangtech.com/index.php?c=Prg&a={接口名}
启用伪静态后可直接使用短路径:/Prg/{接口名}。所有业务接口默认使用 POST(form-urlencoded 或 JSON 均可),签名鉴权参数随请求一并提交。
返回格式
{ "code": 0, "message": "success", "data": { ... } }
// code=0 表示成功;非 0 为业务错误码,message 给出原因
通用错误码
| 错误码 | 含义 | 处理建议 |
|---|---|---|
| 400 | 缺少必要参数 | 按提示补齐参数 |
| 401 | 鉴权失败(签名错误/渠道禁用/请求过期/随机数重复) | 检查签名算法、渠道状态与服务器时钟 |
| 429 | 超出调用频率限制(配额) | 降低频率或联系商务提升配额 |
| 500 | 服务端异常 | 稍后重试,仍失败请联系我们 |
认证授权(签名算法)
除公开接口(getPublicAuditRules)外,所有接口必须携带以下 4 个鉴权参数:
| 参数 | 说明 | 示例 |
|---|---|---|
| channel_id | 渠道标识(注册时获取) | CH202609071200001234 |
| timestamp | 当前 Unix 时间戳(秒),与服务器相差超过 5 分钟拒绝 | 1778400000 |
| nonce | 随机字符串(防重放,5 分钟内同一 nonce 不可重复) | a1b2c3d4e5f6 |
| signature | MD5 签名(算法见下) | 9f2c...(32位小写) |
签名算法(MD5)
1. 合并请求参数:GET 参数 + POST 参数(含业务参数与 channel_id/timestamp/nonce)
2. 删除 signature 字段
3. 其余参数按参数名 ASCII 码从小到大排序(ksort)
4. 拼接成字符串:key1=value1&key2=value2&...(每项以 & 结尾)
5. 末尾追加:app_secret={你的渠道密钥}
6. signature = md5(拼接后的完整字符串) // 32 位小写
注意:业务参数也参与签名(防篡改),且密钥以 app_secret= 形式拼在末尾,不是单独拼接。
API 接口列表
接口路径:/Prg/{接口名}(或 ?c=Prg&a={接口名}),除标注外均需签名鉴权。
| 接口 | 说明 | 核心参数 |
|---|---|---|
| submitComment | 提交评论审核 | content, content_type, parent_id, related_id, related_type, is_anonymous |
| getCommentStatus | 查询评论审核结果 | comment_id |
| submitMediaAudit | 提交媒体(视频/音频/图文)审核 | main_title, content_url, cover_url, content_type, category, tags, pub_time, platform 等(详见示例) |
| getMediaAuditStatus | 查询媒体审核结果 | content_id(MED-xxx) |
| submitCollection | 提交合集审核 | name, description, submit_user_id |
| getCollectionStatus | 查询合集审核结果 | collection_id |
| submitCertification | 提交创作者认证审核 | cert_type, realname, id_number, company_name, id_photo_front 等 |
| getCertificationStatus | 查询认证审核结果 | apply_id |
| checkSensitiveWord | 内容敏感词检测 | content, level |
| submitSensitiveWord | 提交自定义敏感词 | word, word_type, level, match_mode, replace_str, status |
| getSensitiveWords | 敏感词库列表 | page, pageSize |
| submitReport | 提交内容举报 | reported_id, reported_type, report_reason, report_user_id |
| getReportStatus | 查询举报处理结果 | report_id |
| getUserReports | 我的举报列表 | reportUserId, page, pageSize |
| getPublicAuditRules | 公开审核规则(免鉴权) | applyType |
Webhook 回调
审核结果可实时推送到你的服务器,无需轮询。在管理后台「开发者中心 → 回调配置」中填写回调地址与签名密钥并启用即可。
| 项目 | 说明 |
|---|---|
| 请求方式 | POST,Body 为 JSON,携带业务数据 |
| 签名 | 请求头 X-Prism-Signature: HMAC-SHA256(body, secret),收到后务必验签 |
| 触发时机 | 评论/合集 AI 预审完成、媒体终态判定(通过/失败)、人工审核通过/拒绝 |
| 应答要求 | 收到后请返回 HTTP 200 并输出纯文本 success |
| 重试策略 | 失败按 1min / 5min / 30min / 2h / 12h 退避重试,5 次仍失败标记永久失败(可在回调配置页查看投递记录) |
回调 Body 示例
{ "event": "comment_ai_preview", "tenant_id": 1, "comment_id": "C20260907001",
"audit_status": 1, "ai_preview_result": "通过", "ai_confidence": 0.98 }
计费说明
计费方式
按量计费
每千次 API 调用 X 元(按租户配置单价)
出账周期
月度账单
每月 1 日生成上月账单,财务中心可查
支付方式
支付宝 / 微信
扫码或跳转收银台,支持对账与退款
首次注册赠送试用配额(60 次/分钟限流、10 万条审核数据),超出可联系商务调整单价或提升配额。
示例代码
以下示例演示「生成签名 + 提交评论审核」完整调用(三语言等价):
PHP
$channelId = 'CH202609071200001234'; // 注册获取
$appSecret = '你的渠道密钥';
$apiUrl = 'https://prismapi.tengxiangtech.com/index.php?c=Prg&a=submitComment';
$params = [
'channel_id' => $channelId,
'timestamp' => time(),
'nonce' => md5(uniqid(mt_rand(), true)),
'content' => '这是一条测试评论',
'content_type' => 1,
];
ksort($params); // 按参数名ASCII排序
$str = '';
foreach ($params as $k => $v) $str .= "{$k}={$v}&";
$str .= "app_secret={$appSecret}"; // 末尾拼接密钥
$params['signature'] = md5($str); // MD5签名
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($ch);
Python
import hashlib, time, uuid, requests
channel_id = 'CH202609071200001234'
app_secret = '你的渠道密钥'
url = 'https://prismapi.tengxiangtech.com/index.php?c=Prg&a=submitComment'
params = {
'channel_id': channel_id,
'timestamp': str(int(time.time())),
'nonce': uuid.uuid4().hex,
'content': '这是一条测试评论',
'content_type': '1',
}
sign_str = ''.join(f'{k}={params[k]}&' for k in sorted(params))
sign_str += f'app_secret={app_secret}'
params['signature'] = hashlib.md5(sign_str.encode('utf-8')).hexdigest()
resp = requests.post(url, data=params)
print(resp.json())
JavaScript / Node.js
const crypto = require('crypto');
const CHANNEL_ID = 'CH202609071200001234';
const APP_SECRET = '你的渠道密钥';
function sign(params) {
const keys = Object.keys(params).sort(); // 按参数名ASCII排序
let str = keys.map(k => `${k}=${params[k]}&`).join('');
str += `app_secret=${APP_SECRET}`; // 末尾拼接密钥
return crypto.createHash('md5').update(str).digest('hex');
}
const params = {
channel_id: CHANNEL_ID,
timestamp: Math.floor(Date.now() / 1000),
nonce: crypto.randomBytes(8).toString('hex'),
content: '这是一条测试评论',
content_type: 1,
};
params.signature = sign(params);
fetch('https://prismapi.tengxiangtech.com/index.php?c=Prg&a=submitComment', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams(params),
}).then(r => r.json()).then(console.log);
常见问题
Q:返回 401「签名验证失败」怎么办?
① 确认 app_secret 拼在末尾且格式为 app_secret=xxx;② 确认参与签名的参数与请求参数完全一致(含业务参数);③ 确认服务器时间误差在 5 分钟内;④ 确认渠道处于启用状态。
Q:nonce 可以复用吗?
不可以。同一渠道 5 分钟内 nonce 必须唯一,建议用 UUID 或随机串,否则会被判定为重放请求。
Q:审核结果什么时候能拿到?
AI 预审通常在秒级返回;若配置了 Webhook 会实时推送,同时可调用查询接口兜底。人工审核结果同样通过 Webhook 或查询接口获取。
Q:App Secret 丢了怎么办?
密钥仅注册时展示一次。遗失请联系管理员在管理后台重置渠道密钥(重置后旧密钥立即失效)。
Q:用量和账单在哪里看?
联系管理员在管理后台「数据中心 → 财务中心」查看用量趋势、月度账单与支付订单,支持支付宝 / 微信支付。