php调用纳米ai api需确保密钥完整复制(sk-/nano-开头)、认证头正确(bearer)、请求体结构合规;401错查密钥,400错查messages数组格式与字段完整性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你想在PHP项目里调用纳米AI的搜索、对话或MCP工具能力,但卡在API Key怎么塞进代码里、请求发不出去、返回401或400错误上——问题不在模型,而在认证头没对、Body结构错位、密钥复制不全这三处硬伤。
获取并验证纳米AI API Key
登录 纳米AI开发者平台 → 进入「API管理」→ 点击「创建新密钥」→ 勾选 nano-search、nano-chat 至少一项权限 → 生成后【必须立即复制整串密钥,关闭页面后无法再次查看】。
打开记事本,粘贴密钥,检查开头是否为 sk- 或 nano-;若以 pk_ 开头,说明你复制的是前端公钥,需返回控制台重新生成服务端私钥。
用cURL发送基础POST请求(无依赖)
第一步:确认PHP环境已启用 curl 扩展(运行 php -m | grep curl 验证)。
第二步:新建 nanocall.php,写入以下代码:
<?php <br>$apiUrl = 'https://api.nano-ai.com/v1/chat/completions';<br>$apiKey = 'sk-xxxxxxxxxxxxxxxxxxxxxxxx'; // 替换为你的真实密钥<br>$data = [<br> 'model' => 'nano-banana-2',<br> 'messages' => [['role' => 'user', 'content' => '你好']]<br>];<br><br>$ch = curl_init();<br>curl_setopt($ch, CURLOPT_URL, $apiUrl);<br>curl_setopt($ch, CURLOPT_POST, true);<br>curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));<br>curl_setopt($ch, CURLOPT_HTTPHEADER, [<br> 'Content-Type: application/json',<br> 'Accept: application/json',<br> 'Authorization: Bearer ' . $apiKey<br>]);<br>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br>$response = curl_exec($ch);<br>if (curl_error($ch)) {<br> die('cURL error: ' . curl_error($ch));<br>}<br>curl_close($ch);<br><br>$result = json_decode($response, true);<br>if (isset($result['error'])) {<br> echo 'API error: ' . $result['error']['message'];<br>} else {<br> echo $result['choices'][0]['message']['content'] ?? 'no content';<br>}<br>?>
执行 php nanocall.php,若输出“你好”,说明密钥、URL、Header、Body四者全部对齐;若报401,重点检查密钥是否完整复制;若报400,检查 messages 是否为索引数组、role 和 content 字段是否存在。
用Guzzle构建可维护的API客户端
方法一:用Composer安装Guzzle(推荐)
运行 composer require guzzlehttp/guzzle,然后新建 NanoAIClient.php:
<?php <br>require 'vendor/autoload.php';<br><br>use GuzzleHttp\Client;<br><br>class NanoAIClient {<br> private $client;<br> private $apiKey;<br><br> public function __construct($apiKey) {<br> $this->apiKey = $apiKey;<br> $this->client = new Client([<br> 'base_uri' => 'https://api.nano-ai.com/',<br> 'headers' => [<br> 'Authorization' => 'Bearer ' . $apiKey,<br> 'Content-Type' => 'application/json'<br> ]<br> ]);<br> }<br><br> public function chat($prompt) {<br> $response = $this->client->post('v1/chat/completions', [<br> 'json' => [<br> 'model' => 'nano-banana-2',<br> 'messages' => [['role' => 'user', 'content' => $prompt]]<br> ]<br> ]);<br> return json_decode($response->getBody(), true);<br> }<br>}<br><br>$nano = new NanoAIClient('sk-xxxxxxxxxxxxxxxxxxxxxxxx');<br>$result = $nano->chat('解释量子退火原理');<br>echo $result['choices'][0]['message']['content'] ?? '';<br>?>
方法二:直接复用已有Guzzle实例(适合已集成其他API的项目)
确保你的全局Guzzle Client已预设好 base_uri 和 headers,只需在调用时传入完整URL和JSON参数,无需重复配置认证头。
处理常见报错与安全加固
遇到 context length exceeded 错误?这不是Key问题,而是你传入的 messages 数组累计token超限。删减历史对话轮次,或启用纳米AI客户端内置的「✂️精简上下文」功能后再提取纯文本重发。
密钥绝不能硬编码在PHP文件中。把 sk-xxx 放进 .env 文件:NANO_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx,再用 getenv('NANO_API_KEY') 或 vlucas/phpdotenv 加载。
生产环境必须关闭 CURLOPT_SSL_VERIFYPEER 的禁用设置——本地调试时加 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) 可绕过证书校验,但上线前务必删除这一行,否则存在中间人攻击风险。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











