You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用OpenAI API提示未提供API密钥问题求助

解决OpenAI API调用提示未提供API密钥的问题

你遇到的错误提示看似矛盾,实际是由两个关键问题导致的:

  • API端点错误:你使用的https://api.openai.com/v1/engines/davinci/jobs是旧版批量任务接口,当前用于文本补全的正确端点应为https://api.openai.com/v1/completions。旧接口的认证逻辑与参数要求不同,会导致密钥无法被正确识别。
  • 请求头格式错误:WordPress的wp_remote_post要求headers参数为键值对数组,而非字符串数组。你当前的写法会使头信息无法被正确解析,Authorization头自然无法被OpenAI服务器接收。

以下是修正后的完整代码:

$api_key = "sk-U3B.........7MiL";
$query = "How are you?";

// 修正为正确的文本补全端点
$url = "https://api.openai.com/v1/completions";

// 改为键值对格式的请求头
$headers = array(
    "Content-Type" => "application/json",
    "Authorization" => "Bearer " . $api_key
);

$data = array(
    "model" => "text-davinci-003", // 需指定完整的模型名称
    "prompt" => $query,
    "max_tokens" => 100,
    "temperature" => 0.5
);

$response = wp_remote_post( $url, array(
    'headers' => $headers,
    'body' => json_encode( $data ),
    'method' => 'POST', // 显式指定请求方法,避免自动判断出错
    'timeout' => 30 // 增加超时时间,适配API响应时长
) );

if ( is_wp_error( $response ) ) {
    echo "Error communicating with OpenAI API: " . $response->get_error_message();
} else {
    $response_body = json_decode( $response['body'] );
    if (isset($response_body->choices[0]->text)) {
        echo trim($response_body->choices[0]->text);
    } else {
        // 打印错误详情便于排查
        var_dump($response_body);
    }
}

额外说明:

  • 必须指定完整的model参数值,比如text-davinci-003,不能仅写davinci;
  • 显式声明请求方法为POST,避免WordPress根据请求内容自动判断时出现异常;
  • 增加超时时间,OpenAI API响应可能需要数秒,默认超时可能导致请求中断。

内容的提问来源于stack exchange,提问作者sw123456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:35:20