开发者文档

棱镜审核系统开放 API 接入指南:注册开通、请求签名、接口列表、Webhook 回调与计费说明

开发概述

棱镜审核系统提供内容安全审核 API(评论 / 媒体 / 合集 / 认证 / 敏感词),覆盖 AI 预审 + 人工终审全流程。通过简单接口调用即可接入主流平台的内容审核能力,并支持 Webhook 实时回调审核结果。

开发前提

  • 完成自助注册(首页「立即开通」),注册即开通并自动分配密钥
  • 已获取 API 密钥:channel_id(渠道标识)与 app_secret(渠道密钥,仅展示一次)
  • 请求需携带 MD5 签名(见「认证授权」),推荐使用服务端调用

接入流程

1

注册开通
获取 channel_id / app_secret

2

生成签名
MD5 参数签名 + 密钥

3

调用接口
提交审核 / 查询结果

4

接收结果
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
signatureMD5 签名(算法见下)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:用量和账单在哪里看?

联系管理员在管理后台「数据中心 → 财务中心」查看用量趋势、月度账单与支付订单,支持支付宝 / 微信支付。