拆问:PHP 怎么写、要不要代理、如何区分开发和生产模型。分节给出可引用步骤。
密钥与配置#
仓库提供 .env.example,只写变量名。真实 .env 加入忽略列表。生产用托管密钥注入。模型 ID 也做成配置,避免代码里写死 Astra 把账单打穿。
PHP 本地示例#
$key = getenv('OPENAI_API_KEY');
if ($key === false || $key === '') {
fwrite(STDERR, "Missing OPENAI_API_KEY\n");
exit(1);
}
$payload = json_encode([
'model' => getenv('OPENAI_MODEL') ?: 'gpt-5.6-terra',
'input' => 'Reply with the single word pong.',
], JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://api.openai.com/v1/responses');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $key, 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
echo curl_exec($ch);开发与生产隔离#
不同 Project 的 key 分环境。本地日志不要写完整提示如果其中有用户数据。CI 用受限密钥,只跑合成夹具。网关或公司出口防火墙需放行 api.openai.com,这是网络策略问题,不是在应用里硬编码旁路。
接通之后做什么#
加上 Structured Outputs、工具和评测夹具。把超时和 429 处理放进封装,业务代码只传任务对象。详细脚本模式见同分类下的自动化一文。
要点#
- 密钥与模型 ID 都来自环境。
- 先 ping 再接业务。
- 开发、CI、生产三把钥匙。