401错误主因是API Key未正确注入请求头或环境变量未生效;需先完成实名认证获取密钥,再通过系统变量、.env文件或PHP-FPM配置安全传入,最后用Bearer格式构造HTTPS请求。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果你正在用 PHP 开发一个需要调用 DeepSeek 大模型的项目,但请求始终返回 401 Unauthorized 或空响应,大概率是 API Key 没有正确注入到请求头中,或者环境变量未被 PHP 进程读取——PHP 不会自动加载 .env 文件,也不能直接读取系统级环境变量,除非你显式配置。
获取并安全保存 DeepSeek API Key
这一步必须先完成,否则后续所有配置都无效。密钥只在生成时明文显示一次,关闭弹窗即永久丢失。
访问 DeepSeek 官方开发者平台 → 使用企业邮箱或手机号注册并完成实名认证(个人需上传身份证,企业需营业执照)→ 登录后鼠标悬停右上角头像 → 点击「API Keys」→ 点击「Create new secret key」→ 输入描述性名称(如prod-php-backend,禁止含空格和特殊字符)→ 点击创建 → 【立即复制完整密钥字符串,它以 sk- 开头、共 32 位十六进制字符】 → 存入密码管理器或 HashiCorp Vault;严禁截图、明文存档、硬编码进代码。
注意:若跳过实名认证,控制台将不显示「API Keys」入口,也无法生成密钥。
立即学习“PHP免费学习笔记(深入)”;
在 PHP 项目中配置 API Key 的三种方式
根据部署环境和安全等级选择一种即可,不要混用。本地开发建议用方法一,生产环境强制用方法三。
方法一:通过 $_ENV 或 getenv() 读取系统环境变量(推荐本地开发)
在服务器终端执行:export DEEPSEEK_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" → 确认生效:echo $DEEPSEEK_API_KEY → 在 PHP 脚本中用 getenv('DEEPSEEK_API_KEY') 获取值。
⚠️ 注意:Apache 默认不传递用户级环境变量,若用 Apache 部署,必须在 /etc/apache2/envvars 中追加 export DEEPSEEK_API_KEY="..." ,然后重启 Apache:sudo systemctl restart apache2。
方法二:使用 .env 文件 + vlucas/phpdotenv 扩展(适合轻量项目)
执行 composer require vlucas/phpdotenv → 在项目根目录新建 .env 文件,写入一行:DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx → 在入口文件(如 index.php)顶部添加:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);<br>$dotenv->load();<br>$apiKey = $_ENV['DEEPSEEK_API_KEY'] ?? '';
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
这一步操作起来很简单,直接把文件拖进去就行。但请确保 .env 文件不在 Web 可访问路径下(如不能放在 /var/www/html/ 根目录),否则会被直接下载泄露密钥。
方法三:Nginx/FPM 级环境变量注入(生产环境唯一安全方式)
编辑 PHP-FPM 的 pool 配置文件(通常为 /etc/php/*/fpm/pool.d/www.conf)→ 在 [www] 段落下新增一行:env[DEEPSEEK_API_KEY] = sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx → 保存后执行 sudo systemctl restart php*-fpm → PHP 脚本中即可用 getenv('DEEPSEEK_API_KEY') 安全读取。
这是唯一能防止密钥被 PHP 错误页面、日志或调试工具意外输出的方式。其他方式在高并发或异常堆栈中存在泄露风险。
构造合法请求头发起调用
DeepSeek API 强制要求 HTTPS 协议与标准 Bearer 认证格式,任意字段缺失或大小写错误都会触发 401。
第一步:确认已获取有效密钥,并通过上述任一方式存入变量 $apiKey。
第二步:构建请求头数组,【Authorization 字段必须严格为 "Bearer " + 半角空格 + 密钥,缺一不可】:
$headers = [<br> "Authorization: Bearer " . $apiKey,<br> "Content-Type: application/json"<br>];
第三步:使用 cURL 发起 POST 请求,目标 URL 为 https://api.deepseek.com/v1/chat/completions,请求体为标准 JSON,例如:
$data = json_encode([<br> "model" => "deepseek-v4-pro",<br> "messages" => [[<br> "role" => "user",<br> "content" => "你好"<br> ]]<br>]);
第四步:设置 cURL 参数,启用 SSL 验证(生产环境不可禁用):
$ch = curl_init();<br>curl_setopt($ch, CURLOPT_URL, "https://api.deepseek.com/v1/chat/completions");<br>curl_setopt($ch, CURLOPT_POST, true);<br>curl_setopt($ch, CURLOPT_POSTFIELDS, $data);<br>curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);<br>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br>curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 必须为 true<br>$response = curl_exec($ch);<br>curl_close($ch);


















