必须使用主账号的AccessKey ID和Secret,子账号需额外授权qwen:InvokeModel权限并精确指定模型ARN;签名需按RFC 2104 HMAC-SHA256规范,X-Date用UTC时间且误差≤15分钟,Content-Type和Accept必须为application/json(不带charset),model名称须与百炼控制台完全一致。

AccessKey ID 和 Secret 必须用主账号的,子账号会 403
通义千问 API 的鉴权依赖阿里云 RAM 系统,但不是所有 AccessKey 都能调用。常见错误是用了子账号(尤其是带权限策略限制的)生成的 AccessKeyId 和 AccessKeySecret,请求直接返回 403 Forbidden 或 InvalidAccessKeyId.NotFound。
实操建议:
- 登录阿里云控制台 → 进入「AccessKey 管理」→ 确认你用的是「主账号」创建的密钥(子账号密钥需额外授权
qwen:InvokeModel权限,且策略中必须显式允许目标模型,比如acs:qwen:*:*:qwen-max) - 如果必须用子账号,授权策略模板里不能只写
qwen:* *,要精确到具体模型 ARN,否则鉴权失败 -
AccessKeyId是 20 位字母数字组合(如AKIAXXXXXXXXXXXXXXXX),AccessKeySecret是 40 位字符串,注意不要混入空格或换行
Authorization header 的签名格式必须严格按 RFC 2104 HMAC-SHA256
通义千问不接受简单 Bearer Token,必须用阿里云标准的 Signature 签名机制。PHP 里最容易出错的是拼接待签名字符串(StringToSign)时漏掉换行、参数顺序错、或没对 URL 编码。
关键点:
立即学习“PHP免费学习笔记(深入)”;
- StringToSign 固定为四行:HTTP 方法 + \n + Content-MD5(空则填空字符串)+ \n + Content-Type(如
application/json)+ \n + X-Date(ISO8601 格式,如20240515T123456Z) -
X-Date必须用 UTC 时间,且与服务器时间误差不能超过 15 分钟,PHP 推荐用gmdate('Ymd\THis\Z') - 签名密钥是
ACS+AccessKeySecret,不是原始 secret;最终 Authorization header 形如:acs <code>AccessKeyId:base64_hmac_sha256_signature
Content-Type 和 Accept 必须设为 application/json
即使 POST 的是纯文本 prompt,API 也强制要求 Content-Type: application/json,否则返回 415 Unsupported Media Type。同时 Accept: application/json 也不能省略,否则可能触发默认 XML 响应导致 JSON 解析失败。
示例 PHP cURL 设置片段:
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Accept: application/json',
'X-Date: ' . gmdate('Ymd\THis\Z'),
'Authorization: acs ' . $accessKeyId . ':' . $signature
]);
注意:Content-Type 值里不能有多余空格,也不能写成 application/json; charset=utf-8 —— 官方文档明确要求不带 charset 参数。
模型名称(model)必须用官方注册名,别写错大小写和连字符
请求体里的 model 字段不是随便起的,必须和阿里云百炼控制台里开通的模型名称完全一致。常见错误包括把 qwen-max 写成 Qwen-Max、qwen_max 或 qwenmax,结果报错 InvalidParameter.ModelName。
当前主流可用模型名(区分大小写,含连字符):
-
qwen-max(最强,延迟高) -
qwen-plus(平衡型) -
qwen-turbo(快,成本低) -
qwen2.5-7b-instruct(开源版,需单独开通)
调用前务必去「百炼控制台 → 模型服务 → 已开通模型」页确认名称,复制粘贴最安全。
实际跑通的关键,往往卡在 X-Date 时区偏差、AccessKeySecret 被意外 trim 掉末尾等细节上,而不是逻辑本身。



















