讯飞星火api不支持php直接post明文json,因需严格认证:authorization头签名、x-curtime时间戳(5分钟内)、x-param和x-data均须aes-128-cbc+pkcs7加密并base64编码;否则返回401(签名错误)或403(解密失败)。

讯飞星火 API 不支持直接用 PHP 通过简单 请求调用——它要求严格的身份认证( 头)、时间戳签名、以及请求体加密( 必须是 AES-128-CBC 加密后的 Base64 字符串),不是发个 JSON 就能跑通的。
星火接口(如语义理解 或 )不接受明文 JSON。服务端会校验: 头中的 签名、 时间戳是否在 5 分钟内、 是否为合法加密后的参数 JSON、 是否为加密后的业务数据。任意一项失败,就拒收。
- :常见于 签名错误或过期(AppID + AppSecret + CurTime 拼接后 HMAC-SHA256 错误)
- :多因 解密失败(AES 密钥/IV 不匹配,或 JSON 结构不符合星火要求)
- 明文 POST body 会被直接拦截,返回
星火要求 和 都是 AES-128-CBC(PKCS7 填充)+ Base64 编码。PHP 的 默认填充行为和 IV 处理极易出错。
- 密钥()必须是 16 字节 —— 不能直接用 AppSecret 字符串,要
- IV 必须是 16 字节随机值,且每次请求都不同;但加密 和 必须用同一个 IV
- 必须显式指定 并手动 PKCS7 补齐,否则解密失败(星火服务端不兼容 OpenSSL 默认填充)
星火的 是一个固定格式字符串:,其中 是 HMAC-SHA256 签名,不是 JWT。科大讯飞 星火 教程
立即学习“PHP免费学习笔记(深入)”;
- :当前 Unix 时间戳(秒级,不是毫秒)
- :加密后的配置 JSON,例如
- :加密后的业务数据 JSON,例如
- :先拼 ,再 HMAC-SHA256($signStr, $appSecret),最后
IV 和密钥一旦写死、时间戳未同步、或 中缺少 字段,请求就必然失败。星火文档里没明说,但语义理解场景必须设 ,否则当成普通对话处理,结果不一致。
发布者:Ai探索者,转载请注明出处:https://javaforall.net/281999.html原文链接:https://javaforall.net
