PHP 怎么接 AI 生图 API?甜甜圈API 的 Guzzle 写法(含 Laravel 队列)

做电商后台、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 。

相关推荐
rolt1 小时前
[鉴赏]摇身一变鼓吹软件工程-01-Allen Holub
ai·软件工程·uml·敏捷开发
强哥聊算力1 小时前
《算力江湖·DeepSeek》第四集:DeepSeek如何改变中国算力的采购逻辑?
大数据·运维·人工智能·ai·gpu算力
xcLeigh1 小时前
GitHub Copilot Workspace:从 Issue 到 PR 的 AI 全流程开发体验
人工智能·ai·github·copilot·issue·isuse
codigger1 小时前
别再手动催 AI 干活了:一文读懂 Loop Engineering(循环工程)
ai·程序员·编程语言·#人工智能
前沿在线2 小时前
广交会上的人机乒乓:一颗小球,量出具身智能的落地深浅 | 前沿在线
人工智能·ai·前沿在线
Solange__2 小时前
城市更新方案怎么用AI生成3D街区预演?从底图、体块到公众网页展示
人工智能·游戏·3d·ai·自然语言处理·1024程序员节·关卡设计
在世修行2 小时前
智学文枢:理科分析引擎
python·ai·pyside·理科教学
ShiMetaPi2 小时前
182X 模型转换详解:从 PC 模型到板端 NPU 运行全流程
ai·边缘计算·rk3588·rk1820·rk1828
物联网老王2 小时前
第05篇-Agent 连不上工具?MCP 就是那根“USB-C”
开发语言·人工智能·ai·aigc·ai编程
Maydaycxc4 小时前
gentic RPA 深度解析|AI Agent 与 RPA 混合架构、落地痛点、选型要点
人工智能·ai·自动化·rpa