做电商后台、CMS 的项目里 PHP 存量很大,但 AIGC 接口 的 PHP 示例特别少。其实不需要任何 SDK------甜甜圈API (dashengfenshen.cn)兼容 OpenAI 的 chat/completions 协议,Guzzle 直接调就行。
一、接口信息
| 项 | 值 |
|---|---|
| Base URL | https://dashengfenshen.cn |
| 接口 | POST /v1/chat/completions |
| 鉴权 | Authorization: Bearer {你的API密钥} |
二、最小实现
<?php
namespace App\Services;
use GuzzleHttp\Client;
class TtqImage
{
private Client $http;
public function __construct()
{
$this->http = new Client([
'base_uri' => 'https://dashengfenshen.cn',
// 生图慢,超时必须给足。Guzzle 默认 timeout=0(不超时),
// 网络一抖请求会永久挂住,把 php-fpm 的进程占死
'timeout' => 120,
'connect_timeout' => 10,
]);
}
public function generate(string $prompt, string $model = 'nano-banana-pro'): array
{
$res = $this->http->post('/v1/chat/completions', [
'headers' => ['Authorization' => 'Bearer ' . env('TTQ_API_KEY')],
'json' => [
'model' => $model,
'messages' => [['role' => 'user', 'content' => $prompt]],
],
]);
return json_decode((string) $res->getBody(), true);
}
}
密钥放 .env,别硬编码进代码、更别提交进仓库。
三、别在 HTTP 请求里同步等
生图接口动辄十几秒,同步等会把 php-fpm 的进程池占满------并发一上来整站都卡。丢进队列:
// app/Jobs/GenerateImage.php
class GenerateImage implements ShouldQueue
{
public $timeout = 180; // 必须 > 接口超时,否则任务先被杀
public $tries = 3;
public $backoff = [10, 30]; // 指数退避,别固定间隔
public function __construct(public int $taskId, public string $prompt) {}
public function handle(TtqImage $api): void
{
$data = $api->generate($this->prompt);
Task::where('id', $this->taskId)->update([
'status' => 'done',
'result' => json_encode($data),
]);
}
public function failed(\Throwable $e): void
{
Task::where('id', $this->taskId)->update(['status' => 'failed', 'error' => $e->getMessage()]);
}
}
控制器只管接单:
public function create(Request $r)
{
$task = Task::create(['status' => 'pending', 'prompt' => $r->input('prompt')]);
GenerateImage::dispatch($task->id, $r->input('prompt'));
return response()->json(['taskId' => $task->id]); // 立刻返回
}
前端拿 taskId 轮询状态即可。三个容易踩的:队列 timeout 要大于接口超时 、失败要写 failed() 回调 (不然任务永远停在 pending)、.env 改完记得 php artisan config:clear。
四、模型怎么选
| 模型代码 | 说明 | 消耗 |
|---|---|---|
nano-banana2 |
Flash 级,跑量首选 | 8 积分/次 |
nano-banana-pro |
Pro 级,支持 1K/2K/4K | 10 积分/次 |
gpt-image-2 |
细节质感好,适合终稿 | 按次计费 |
ttq-cutout |
抠图出白底图 | 10 积分/次 |
Veo 3.1 视频生成 / Sora 2 |
生视频 | 120 / 130 积分/次 |
换模型只改 model 字符串,方法签名都不用动。
五、小结
PHP 接AI绘画API 的要点:Guzzle 的 timeout 一定要设、生图丢队列别同步等、队列超时要大于接口超时、密钥走 .env。
甜甜圈API (dashengfenshen.cn)的 OpenAI 兼容协议让 PHP 完全不需要 SDK。模型全 、价格便宜 (积分制明码标价)、并发高 、出图快 、稳定。文档地址:https://dashengfenshen.cn 。