贝利信息

PHP怎样对接数美AI内容安全_传文本调检测模型获分级【准法】

日期:2026-01-12 00:00 / 作者:看不見的法師
数美文本检测唯一可用接口是/v4/text/scene;需POST提交UTF-8 JSON,指定scene、控制单次≤20条且每条≤5000字符;签名含nonce、时间戳和固定格式原文;返回结果中result.level和result.label需分级解析;SSL报错应配CA证书而非禁用校验。

数美 API 接口选哪个?/v4/text/scene 是当前文本检测唯一可用路径

数美 AI 内容安全服务对文本的检测,目前只开放 /v4/text/scene 这一个标准接口。旧版 /v3/text 已下线,调用会返回 404 Not Found410 Gone;别被文档残留或过期示例误导。

该接口支持多场景(如评论、私信、弹幕),需在请求体中显式传 "scene": "comment" 等值;不传或传错会导致 scene_not_support 错误。

PHP 怎么发带签名的请求?重点在 Authorization 头和 nonce 生成

数美要求所有请求头携带 Authorization,格式为:SM2-HMAC-SHA256 Credential=xxx, SignedHeaders=content-type;host;x-sm-auth-nonce;x-sm-auth-timestamp, Signature=xxx。PHP 自己拼太容易出错,建议封装签名函数。

关键点不是算法本身,而是三个易错细节:

$secretKey = 'your_secret_key_here';
$accessKey = 'your_access_key_here';
$nonce = bin2hex(random_bytes(8));
$timestamp = round(microtime(true) * 1000);
$body = json_encode([
    'texts' => ['测试文本内容'],
    'scene' => 'comment'
]);
$payloadHash = hash('sha256', $body);
$canonicalRequest = "POST\n/v4/text/scene\n\ncontent-type:application/json;host:as.dun.163.com;x-sm-auth-nonce:{$nonce};x-sm-auth-timestamp:{$timestamp}\n{$payloadHash}";
$signature = hash_hmac('sha256', $canonicalRequest, $secretKey);
$authHeader = "SM2-HMAC-SHA256 Credential={$accessKey}, SignedHeaders=content-type;host;x-sm-auth-nonce;x-sm-auth-timestamp, Signature={$signature}";

返回结果怎么解析分级?重点关注 result.levelresult.label

数美返回的 JSON 中,每个文本结果嵌套在 result 字段下,不是顶层字段。常见误读是直接取 $res['level']——实际路径是 $res['result'][0]['level'](数组第一项)。

level 值为数字:0=正常,1=嫌疑,2=确定违规;但法务合规真正依赖的是 label(字符串),例如 "politics""porn""ad"。不同 label 对应不同处置策略,不能只看 level。

cURL 报 SSL certificate problem 怎么办?别关校验,改 CA 路径

本地开发环境(尤其 Windows + XAMPP / WAMP)常因 PHP cURL 缺失可信 CA 证书而报错 SSL certificate problem: unable to get local issuer certificate。禁用 CURLOPT_SSL_VERIFYPEER 是危险操作,生产环境绝对禁止。

正确做法是下载最新 CA 包并配置 PHP:

配对的证书路径会导致请求根本发不出去,错误信息却藏在 curl_error($ch) 里,不主动检查就以为是 API 问题。