使用 curl 扩展向 minimax api 发送 post 请求,在 header 中携带 authorization 令牌,body 中指定 model、prompt 和 response_mode 参数即可生成图片。api 默认采用流式响应(streaming),php 需要逐块读取并拼接 base64 数据,最后解码保存为文件。

如何构建包含认证和参数的请求体
请求必须包含 API Key 鉴权信息,并在 JSON Body 中明确指定模型名称 H3-Image、提示词以及非流式响应模式。设置 response_mode=blocking 可以简化 PHP 端的处理逻辑,避免手动解析 SSE 事件流,直接获取完整的 JSON 响应对象。

<?php $apiKey = 'your_api_key_here';
$url = 'https://api.minimax.chat/v1/images/generations';
$data = [
'model' => 'H3-Image',
'prompt' => '一只穿着宇航服的猫在月球表面',
'response_mode' => 'blocking',
'size' => '1024x1024'
];
$headers = [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$result = json_decode($response, true);
echo 'Success: ' . $result['data'][0]['url'] ?? 'No URL';
} else {
echo 'Error: ' . $response;
}
如何处理流式响应中的 Base64 数据
当不指定或显式设置 response_mode=sse 时,API 会返回 Server-Sent Events (SSE) 格式的数据。PHP 需要使用 curl 的 CURLOPT_WRITEFUNCTION 回调函数来实时接收数据块,过滤出以 data: 开头的行,提取其中的 Base64 字符串并累积,最终通过 base64_decode 还原二进制图像数据。

<?php $apiKey = 'your_api_key_here';
$url = 'https://api.minimax.chat/v1/images/generations';
$data = [
'model' => 'H3-Image',
'prompt' => '赛博朋克风格的城市夜景',
'response_mode' => 'sse',
'size' => '1024x1024'
];
$headers = [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $string) use (&$imageData) {
$lines = explode("\n", $string);
foreach ($lines as $line) {
if (strpos($line, 'data:') === 0) {
$jsonStr = substr($line, 5);
$json = json_decode($jsonStr, true);
if (isset($json['data'][0]['b64_json'])) {
$imageData .= $json['data'][0]['b64_json'];
}
}
}
return strlen($string);
});
// 初始化变量
$imageData = '';
$response = curl_exec($ch);
curl_close($ch);
if (!empty($imageData)) {
$binaryData = base64_decode($imageData);
file_put_contents('output.png', $binaryData);
echo 'Image saved.';
} else {
echo 'No image data received.';
}
API 返回的具体字段结构是什么
无论采用哪种响应模式,成功时的 JSON 根节点均包含 data 数组。该数组中的每个对象代表一张生成的图片,主要包含 url(图片访问链接)和 b64_json(Base64 编码的图像数据)。开发者应根据实际网络环境和需求选择下载 URL 或直接解码 Base64 数据。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











