php OpenAI API错误:“您未提供API密钥,您需要使用承载身份验证在授权标头中提供API密钥”

avkwfej4  于 2023-02-18  发布在  PHP
关注(0)|答案(1)|浏览(828)

我正在创建一个PHP脚本来访问Open Ai的API,以提出查询并获得响应。
我收到以下错误:
您未提供API密钥。您需要使用承载身份验证在授权标头中提供API密钥(即授权:您的钥匙持有人)
...但我以为我在第一个变量中提供了API密钥?
下面是我的代码:

$api_key = "sk-U3B.........7MiL";

$query = "How are you?";

$url = "https://api.openai.com/v1/engines/davinci/jobs";

// Set up the API request headers
$headers = array(
    "Content-Type: application/json",
    "Authorization: Bearer " . $api_key
);

// Set up the API request body
$data = array(
    "prompt" => $query,
    "max_tokens" => 100,
    "temperature" => 0.5
);

// Use WordPress's built-in HTTP API to send the API request
$response = wp_remote_post( $url, array(
    'headers' => $headers,
    'body' => json_encode( $data )
) );

// Check if the API request was successful
if ( is_wp_error( $response ) ) {
    // If the API request failed, display an error message
    echo "Error communicating with OpenAI API: " . $response->get_error_message();
} else {
    // If the API request was successful, extract the response text
    $response_body = json_decode( $response['body'] );
    //$response_text = $response_body->choices[0]->text;
    var_dump($response_body);
    // Display the response text on the web page
    echo $response_body;
elcex8rz

elcex8rz1#

所有Engines endpoints都已弃用。

这是正确的Completions endpoint

https://api.openai.com/v1/completions

工作示例

如果您在CMD中运行php test.php,OpenAI API将返回以下完成:
字符串(23)“
这确实是一次考验”

测试.php

<?php
    $ch = curl_init();

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

    $api_key = '<OPENAI_API_KEY>';

    $post_fields = '{
        "model": "text-davinci-003",
        "prompt": "Say this is a test",
        "max_tokens": 7,
        "temperature": 0
    }';

    $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, $post_fields);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error: ' . curl_error($ch);
    }
    curl_close($ch);

    $response = json_decode($result);
    var_dump($response->choices[0]->text);
?>

相关问题