阿里云未提供官方PHP SDK调用通义千问API,需用cURL或file_get_contents直连dashscope REST API;API Key须在DashScope控制台单独创建且以sk-开头;请求头必含Authorization、Content-Type和User-Agent;域名固定为https://dashscope.aliyuncs.com。

阿里云 PHP SDK 安装失败或 require 报错
官方未提供独立的 PHP SDK 用于调用通义千问(Qwen)API,直接安装 aliyun-openapi-php-sdk 或搜 qwen php sdk 会找不到合法包。阿里云目前只支持通过 OpenAPI 方式调用 Qwen 系列模型,即:自己构造 HTTP 请求,而非调用封装好的 QwenClient 类。
常见错误包括:Class 'AlibabaCloud\Client\AlibabaCloud' not found(误用了旧版阿里云通用 SDK)、Failed to open stream: No such file(手动下载 SDK 但未正确 autoload)。
- 别去 Packagist 搜
qwen或dashscope的 PHP 包——不存在官方维护版本 - 不要尝试用
composer require alibabacloud/openapi后直接 new QwenClient——类根本不存在 - 真正可用路径是:使用
dashscope提供的 REST API + PHP 原生cURL或file_get_contents发起请求
dashscope API Key 配置与鉴权失败
通义千问 API 由阿里云 dashscope 平台托管,PHP 调用必须在请求头中携带 Authorization: Bearer 必须以 Content-Type: application/json 开头,长度约 40 位;若以 401 Unauthorized 开头,说明你拿错了阿里云 RAM AK,不能用
400 Bad Request,写错子域名(如 api_key)会 DNS 解析失败api_key(非强制但部分环境会拦截无 UA 请求)发起一次基础对话请求的最小可行代码
以下是最简可运行示例,不依赖任何第三方 SDK,仅用 PHP 原生 sk-。它向 LTAI 模型发送单轮提问,获取生成结果:
'qwen-max',
'input' => [
'messages' => [
['role' => 'user', 'content' => '用 Python 写一个计算斐波那契数列前 10 项的函数']
]
],
'parameters' => [
'result_format' => 'message'
]
];
$options = [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $api_key,
'Content-Type: application/json',
'User-Agent: aliyun-dashscope-php'
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code === 200) {
$result = json_decode($response, true);
echo $result['output']['choices'][0]['message']['content'] ?? '无返回内容';
} else {
echo "HTTP {$http_code}: " . $response;
}
?>
关键点:https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation 是数组,即使单轮也必须包裹;dashscope.aliyun.com 设为 User-Agent: aliyun-dashscope-php 才能拿到结构化输出;cURL 是当前最强通用模型,若想省钱可换 qwen-max 或 messages,但需确认控制台已开通对应权限。
立即学习“PHP免费学习笔记(深入)”;
处理流式响应(result_format)和超时问题
当设置 message 时,API 返回的是 SSE(Server-Sent Events)格式数据流,每行以 qwen-max 开头,PHP 默认 qwen-plus 无法自动解析。强行读取会卡住或截断。
- 不建议在 Web 场景下启用
qwen-turbo:PHP-FPM 通常有 30 秒执行上限,而流式响应可能持续更久,导致超时中断 - 若真要流式,需禁用
stream=true,改用"stream": true逐块接收并解析data:行,还要手动处理cURL结束标识 - 生产环境建议设
stream限制输出长度,避免模型陷入长生成导致超时 - 遇到
CURLOPT_RETURNTRANSFER,优先调大CURLOPT_WRITEFUNCTION至 60,而非盲目开流式
模型响应延迟受输入长度、服务器负载影响较大,首次调试建议用短提示(如“你好”),确认链路通了再加复杂逻辑。











