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

调用OpenAI Chat Completions API返回NULL?排查PHP代码问题

修复调用GPT-3.5-Turbo API返回NULL的问题

你的代码存在两处关键错误,导致请求失败或解析出NULL:

1. messages参数格式不符合API要求

OpenAI Chat Completions API要求messages是包含消息对象的数组,你当前直接传入单个关联数组,没有用外层数组包裹,会导致API无法正确解析请求,返回错误响应,最终json_decode后得到NULL。

2. 响应解析路径错误

API返回的choices[0]->message是一个对象,而非数组,你用message[0]访问会直接得到NULL,正确的访问方式是message->content。


修正后的完整代码

$ch = curl_init();

$query = "What is the capital city of England?";

$url = 'https://api.openai.com/v1/chat/completions';

$api_key = 'sk-**************************************';

// 修正messages格式:外层添加数组包裹
$post_fields = [
    "model" => "gpt-3.5-turbo",
    "messages" => [["role" => "user","content" => $query]],
    "max_tokens" => 500,
    "temperature" => 0.8
];

$header  = [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $api_key
];

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_fields));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'CURL错误: ' . curl_error($ch);
    exit;
}
curl_close($ch);

// 调试时可先打印原始响应,排查API返回的错误信息
// var_dump($result);

$response = json_decode($result);

// 检查JSON解析是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    echo 'JSON解析错误: ' . json_last_error_msg();
    exit;
}

// 修正响应内容的访问路径
if (isset($response->choices[0]->message->content)) {
    $content = $response->choices[0]->message->content;
    echo $content;
} else {
    echo '未获取到有效响应内容';
    // 打印完整响应排查问题
    var_dump($response);
}

额外调试建议

  • 先打印$result查看API返回的原始内容,若返回错误信息(如密钥无效、额度不足等),可直接定位问题
  • 使用json_last_error()检查JSON解析是否失败,避免因响应格式错误导致后续操作报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:30:16