Midjourney无官方PHP SDK,不可直接调用;唯一可行方案是PHP作为后端接收提示词并存入数据库,由Python Discord Bot轮询执行/imagine命令,再回调PHP更新状态并下载图片。

Midjourney没有官方PHP SDK,别白费劲写封装
Midjourney 不提供公开 API,也没有授权第三方 SDK。所有“PHP 调用 Midjourney”的方案,本质都是模拟 Discord 客户端行为——通过 WebSocket 或 HTTP 轮询抓取 Discord 消息。这不仅违反 Discord Terms of Service,而且极易被封号或限流。官方明确禁止自动化交互生成图像,/imagine 命令只能在 Discord 客户端手动触发。
想用 PHP 触发图像生成?必须走 Discord Bot 中间层
可行路径只有一条:自己部署一个 Discord Bot,监听用户指令(如 !imagine a cat),再由 Bot 在指定频道执行 /imagine 命令。PHP 本身无法直接操作 Discord 的 Slash Command,但可以作为后端接收 Webhook 或 HTTP 请求,然后调用 curl 向你的 Bot 发送控制指令(比如写入 Redis 队列、发消息到管理频道)。关键点:
- Bot 必须有
Send Messages和Use Slash Commands权限 - PHP 不负责发图,只负责“下命令”:把提示词存进
redis://localhost:6379/imagine_queue,Bot 侧轮询消费 - Discord 对消息频率有限制,连续调用
/imagine可能触发429 Too Many Requests - 返回图像 URL 需解析 Bot 监听到的
message_create事件,提取附件中的url字段(形如https://cdn.discordapp.com/attachments/.../image.png)
常见错误:用 cURL 直接 POST 到 discord.com/api
有人尝试构造 POST /api/v9/interactions 请求模拟 Slash Command,结果总是 401 Unauthorized 或 400 Bad Request。原因很直接:
- Discord 的交互请求必须带有效
Authorizationheader(即用户 token),而用户 token 属于敏感凭据,绝不能硬编码进 PHP - 请求体需包含加密签名字段
data、nonce、guild_id、channel_id,且nonce必须唯一,重复会失败 - 浏览器同源策略和 CORS 会拦截前端 JS 直连;PHP 后端若未正确设置
Referer和User-Agent,也会被拒绝 - Discord 会校验请求来源 IP 是否与登录设备历史匹配,服务器 IP 突然发起大量请求会被风控
真正能落地的最小可行方案
放弃“PHP 直连 Midjourney”,转为轻量协作架构:
立即学习“PHP免费学习笔记(深入)”;
- 用户通过 PHP 表单提交提示词 → 存入
mysql表jobs(status=‘pending’) - 一个 Python 脚本(用
discord.py)定时查库,发现新记录就执行interaction.send(content='/imagine prompt: ...') - Bot 监听该频道的图片消息,提取 URL 后回调 PHP 接口
/api/complete?job_id=123&url=... - PHP 更新数据库状态并通知前端(如通过
eventsource或轮询/api/status?id=123)
这个结构里,PHP 只管业务逻辑和状态流转,不碰 Discord 协议细节。最容易被忽略的是:Discord 图片链接默认有 24 小时过期时效,如果要长期展示,得在回调后立刻用 PHP file_get_contents() 下载并保存到本地存储。



















