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 。

相关推荐
Query*10 小时前
深入浅出LangGraph【一】_基础篇
python·ai·langchain
张忠琳11 小时前
【hermes-agent】Hermes Agent 自我进化原理之一
ai·agent·hermes
Ai-_Man11 小时前
您您这可以把Grok的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑
Harzerr11 小时前
AI行业日报|2026-10-04:5个热点事件
ai·行业动态·技术趋势
汤姆yu12 小时前
Gemini 4 Argon模型综述:技术、能力与实际使用指南
网络·安全·web安全·ai·大模型
搭贝12 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
老A的AI实验室12 小时前
Cyber Weekly #84
人工智能·ai·llm·agi·genai
lie..12 小时前
30天从零开始学AI应用开发(Day 18):文档切分与检索优化:RAG 效果好坏的分水岭
人工智能·ai·大模型
小此方13 小时前
LangChain/LangGraph(二)大模型接入篇一:API接入,从API Key到API请求报文,使用Apifox完成大模型接口调用
ai·langchain
Harzerr13 小时前
AI行业日报|2026-10-05:5个热点事件
ai·行业动态·技术趋势