从 0 到 1 接入商业海报生成接口:高清商用海报、品牌宣传海报、电商新媒体海报全流程与代码示例

简介: 本文拆解商业海报生成接口的两段式异步调用:POST /skills_poster/create 提交宫格、画幅、参考图与设计需求并返回 task_id,GET /skills_poster/query 轮询至 status=SUCCESS 取回海报地址。覆盖高清商用海报、品牌宣传海报、电商新媒体海报三类典型投放场景,含 cURL、Python、Node.js 示例、字段表、三层错误排查路径与上线自检清单。基于公开接口文档整理,未做真实请求实测。

从 0 到 1 接入商业海报生成接口:高清商用海报、品牌宣传海报、电商新媒体海报全流程与代码示例

本文基于公开接口文档整理,未对接口做真实请求实测,文中返回示例均为结构示例(字段与类型以官方文档为准)。集成前请自行验证。

一、技术简介

AI 商业海报生成接口是一类「参考图 + 文字需求 → 成片海报」的图像生成服务。它的调用形态不是一次请求直接拿图,而是异步任务模式:先提交一次生成任务拿到 task_id,再用 task_id 轮询任务状态,直到状态变为成功并取回海报地址。

与「文生图」裸模型相比,这类封装接口在服务端串了一条固定的处理流水线:

阶段 作用 对应产物
意图校验与参数解析 解析用途、风格、配色、版式等需求,校验宫格与画幅参数 结构化设计意图 structured_intent、校验后参数 validated_params
提示词专业优化 把口语化需求补齐为正、反向提示词 optimized_prompt、negative_prompt
启动高清生图 以参考图为视觉基底启动图像生成 生成任务状态
轮询生成状态 跟踪生成进度,直到出图 海报地址 poster_image_url
视觉质检诊断 对成片做合规与质量评分,输出缺陷清单 quality_report、defect_list

对调用方来说,这些阶段是「一次提交、一次查询」,不需要自己编排中间步骤;但理解这条链路,有助于判断超时、缺字段、成片不合规等问题出在哪一段。

两步异步调用时序:创建任务 → 轮询查询 → 取回海报地址

二、能力概览

2.1 两个端点

端点 方法 用途 关键入参
/skills_poster/create POST 创建海报生成任务,返回 task_id 请求体 JSON
/skills_poster/query GET 按 task_id 查询任务状态与结果 Query 参数 task_id

两个端点同域,鉴权方式一致:请求头携带 Authorization: APPCODE <appcode>。

2.2 排版与画幅

接口把「一套需求出多版」做成了参数化能力:

参数 取值 说明
grid_num 1 / 2 / 4 1=单幅;2=双格(2 宫格);4=四宫格(2×2)。传入非法值会被自动降级为 1
aspect_ratio 1:1 / 3:4 / 4:3 / 16:9 / 9:16 成品宽高比;不传时默认 3:4

常见的组合是:电商主图用 1:1 单幅,小红书/朋友圈竖版用 3:4 或 9:16 单幅,产品对比或「一图多卖点」用 grid_num=4 + 1:1。

宫格排版与画幅组合:单幅、双格、四宫格 × 五种画幅

2.3 参考图驱动

reference_image 是这条流水线的「视觉锚点」,支持人像、实物产品、风景、品牌 LOGO。它的作用不是简单的图生图,而是让服务端先解析参考图的主体、色调与构图(visual_base_analysis),再与文字需求融合。因此,参考图选得准,成片风格就更容易收敛。

三、适用场景

场景 典型诉求 建议参数
电商主图 / 活动海报 商品主体不变,替换背景与文案 grid_num=1,1:1,参考图取商品白底或场景图
品牌宣传主视觉 保持品牌调性一致,批量出多尺寸 grid_num=1,按投放位置分别用 1:1 / 3:4 / 16:9
新媒体竖版投放 小红书、朋友圈、短视频封面 grid_num=1,3:4 或 9:16,参考图取人像或场景
多卖点对比 / 产品矩阵 一套需求出多版式 grid_num=2 或 4,1:1
非设计岗自助出图 运营、市场同学按模板批量产出 固定 prompt 骨架 + 变量替换

需要提醒的是:这类接口适合有明确参考物、需求可被文字描述清楚的场景;如果连视觉方向都没有,先把需求写成「用途 + 风格 + 配色 + 版式 + 场景」,出图命中率会明显不同。

四、接入流程

4.1 开通与鉴权

  1. 在云市场开通该接口服务,得到 AppCode;
  2. 请求头统一携带 Authorization: APPCODE <appcode>(不要把 AppCode 写进前端代码或提交到仓库,建议放在服务端环境变量);
  3. 确认可用的调用额度后,再开始联调。
Authorization: APPCODE 你的AppCode
Content-Type: application/json

4.2 五步接入路径

步骤 要做的事 验收点
1 准备一张参考图,放到可公网访问的地址 匿名 GET 能直接打开,无防盗链、无登录态
2 按「用途+风格+配色+版式+场景」写好 prompt 一段话能让人复述出画面结构
3 POST /skills_poster/create,拿到 task_id 返回 showapi_res_code=0 且 task_id 非空
4 GET /skills_poster/query?task_id=... 轮询 建议 1–2 秒一次,直到 status=SUCCESS
5 取 flow_result.output.poster_image_url 落地 图片可下载,尺寸与 aspect_ratio 一致

接入流程:准备参考图 → 构造请求 → 创建任务 → 轮询 → 落库

4.3 一个容易踩的点:参考图地址

reference_image 在文档里标注为「海报核心基底参考图 URL」,同时又标 type: base64。这意味着两种传法都可能被接受(URL 或 Base64 数据)。实践上建议优先用公网 URL:

  • URL 方式请求体小,日志里也不会出现超长字符串;
  • 若你的图片在私有存储里,可先上传到对象存储并签发临时可读链接;
  • 无论哪种方式,都不要传 localhost、内网地址或需要 Cookie 才能访问的链接——服务端取不到图,任务大概率在第一步就失败。

五、调用示例与返回结构

5.1 构造请求体

字段 类型 必填 说明
grid_num integer 是 宫格排版枚举:1=单幅,2=双格,4=四宫格;非法值自动降级为 1
prompt string 是 海报用途、视觉风格、投放场景、主辅配色、版式布局、整体氛围、材质肌理、光影质感、文字排版要求
reference_image string 是 参考图 URL(人像 / 实物产品 / 风景 / 品牌 LOGO)
aspect_ratio string 否 画幅比例,默认 3:4
{
   
  "grid_num": 1,
  "prompt": "新品宣传海报,极简奶油风,低饱和暖米色配色,柔和漫射光,充足留白,适配竖版社媒投放",
  "reference_image": "https://your-cdn.example.com/ref/product.jpg",
  "aspect_ratio": "3:4"
}

5.2 cURL 创建任务

curl -X POST 'https://poster.market.alicloudapi.com/skills_poster/create' \
  -H 'Authorization: APPCODE 你的AppCode' \
  -H 'Content-Type: application/json' \
  -d '{
    "grid_num": 1,
    "prompt": "新品宣传海报,极简奶油风,低饱和暖米色配色,柔和漫射光,充足留白,适配竖版社媒投放",
    "reference_image": "https://your-cdn.example.com/ref/product.jpg",
    "aspect_ratio": "3:4"
  }'

创建成功时返回的结构(示例返回,字段含义以官方文档为准):

{
   
  "showapi_res_code": 0,
  "showapi_res_error": "",
  "showapi_res_id": "6a70xxxxx",
  "showapi_res_body": {
   
    "ret_code": 0,
    "remark": "success",
    "task_id": "1234_6a7xxxxxxxxxxxxxxxxxxxxx",
    "flow_id": "6a38xxxxxxxxxxxxxxxxxxxxxx",
    "flow_name": "海报生成",
    "query_info": {
   
      "long_term_query": {
   
        "endpoint": "查询接入点",
        "param": {
    "task_id": "1234_6a7xxxxxxxxxxxxxxxxxxxxx" },
        "desc": "适用于长期查询,查询有效期 3 天"
      },
      "short_term_query": {
   
        "preview_url": "https://your-cdn.example.com/preview/xxxx",
        "query_status_url": "https://your-cdn.example.com/query/xxxx",
        "desc": "短期可视化预览,有效期 1 小时"
      }
    }
  }
  }
}

要点:

  • 业务是否受理看 showapi_res_code,任务是否建成功看 showapi_res_body.ret_code,两者都为 0 才算成功;
  • task_id 形如 前缀_十六进制串,原样保留,不要做 trim、切片或 URL 解码之外的任何处理;
  • query_info.long_term_query 明确写了「查询有效期 3 天」——任务结果不是永久可查,出图后应立刻把地址落到自己的存储里。

5.3 查询任务

curl -X GET 'https://poster.market.alicloudapi.com/skills_poster/query?task_id=1234_6a7xxxxxxxxxxxxxxxxxxxxx' \
  -H 'Authorization: APPCODE 你的AppCode'

查询响应(结构示例,已省略中间步骤的大段分析内容):

{
   
  "showapi_res_code": 0,
  "showapi_res_error": "",
  "showapi_res_body": {
   
    "status": "SUCCESS",
    "remark": "",
    "flow_name": "海报生成",
    "steps_num": 6,
    "progress": 100,
    "flow_result": {
   
      "input": {
   
        "reference_image": "https://your-cdn.example.com/ref/product.jpg",
        "prompt": "新品宣传海报,极简奶油风……",
        "aspect_ratio": "3:4"
      },
      "output": {
   
        "generated_prompt": "(专业优化后的完整正向提示词)",
        "visual_base_analysis": "(参考图主体、色调、光影的解析结论)",
        "poster_image_url": "https://your-cdn.example.com/output/poster.png"
      },
      "step_1_visual_analyzer": {
    "result": {
    "data": {
    "result": "……" } } },
      "step_2_prompt_architect": {
    "result": {
    "data": {
    "result": "……" } } },
      "step_3_print_prompt": {
    "result": {
    "data": {
    "result": "……" } } }
    }
  }
}
字段 类型 说明
showapi_res_body.status string 任务状态,成功为 SUCCESS,失败为 FAILED
showapi_res_body.remark string 成功时为空;失败时给出错误说明
showapi_res_body.progress number 进度百分比,可用于进度条
showapi_res_body.steps_num number 本次流水线的步骤数
flow_result.input object 回显本次请求的三个入参,便于核对
flow_result.output.poster_image_url string 最终海报地址,落库就取这个字段
flow_result.output.generated_prompt string 实际用于生图的提示词,可留作复现与调优依据
flow_result.output.visual_base_analysis string 参考图的视觉解析结论
flow_result.step_* object 各阶段明细(意图解析、提示词架构等),调试时按需读取

5.4 Python 版完整调用(创建 + 轮询)

import os
import time
import requests

APPCODE = os.environ["POSTER_APPCODE"]          # 不要硬编码在代码里
BASE = "https://poster.market.alicloudapi.com"
HEADERS = {
   "Authorization": f"APPCODE {APPCODE}"}

payload = {
   
    "grid_num": 1,
    "prompt": "新品宣传海报,极简奶油风,低饱和暖米色配色,柔和漫射光,充足留白,适配竖版社媒投放",
    "reference_image": "https://your-cdn.example.com/ref/product.jpg",
    "aspect_ratio": "3:4",
}

# 1) 创建任务
resp = requests.post(f"{BASE}/skills_poster/create", json=payload, headers=HEADERS, timeout=30)
data = resp.json()
if data.get("showapi_res_code") != 0 or data.get("showapi_res_body", {
   }).get("ret_code") != 0:
    raise RuntimeError(f"创建失败: {data}")

task_id = data["showapi_res_body"]["task_id"]
print("task_id:", task_id)

# 2) 轮询查询(建议 1~2 秒一次,给出总超时上限)
deadline = time.time() + 300
poster_url = None
while time.time() < deadline:
    q = requests.get(f"{BASE}/skills_poster/query", params={
   "task_id": task_id},
                     headers=HEADERS, timeout=30).json()
    body = q.get("showapi_res_body", {
   })
    status = body.get("status")
    print("status:", status, "progress:", body.get("progress"))

    if status == "SUCCESS":
        poster_url = body.get("flow_result", {
   }).get("output", {
   }).get("poster_image_url")
        break
    if status == "FAILED":
        raise RuntimeError(f"生成失败: {body.get('remark')}")

    time.sleep(2)

if not poster_url:
    raise TimeoutError("轮询超时,任务仍未完成")

print("poster:", poster_url)
# 3) 立刻转存到自己的存储,避免结果过期后取不到

5.5 Node.js 版本(仅创建 + 查询一次)

const APPCODE = process.env.POSTER_APPCODE;
const BASE = "https://poster.market.alicloudapi.com";
const headers = {
    Authorization: `APPCODE ${
     APPCODE}`, "Content-Type": "application/json" };

async function main() {
   
  const createRes = await fetch(`${
     BASE}/skills_poster/create`, {
   
    method: "POST",
    headers,
    body: JSON.stringify({
   
      grid_num: 1,
      prompt: "新品宣传海报,极简奶油风,低饱和暖米色配色,柔和漫射光,充足留白,适配竖版社媒投放",
      reference_image: "https://your-cdn.example.com/ref/product.jpg",
      aspect_ratio: "3:4",
    }),
  });
  const createJson = await createRes.json();
  const taskId = createJson.showapi_res_body.task_id;

  const queryRes = await fetch(`${
     BASE}/skills_poster/query?task_id=${
     encodeURIComponent(taskId)}`, {
    headers });
  const queryJson = await queryRes.json();
  console.log(queryJson.showapi_res_body.status, queryJson.showapi_res_body.flow_result?.output?.poster_image_url);
}

main().catch((e) => console.error(e));

返回结构:创建阶段只拿 task_id,查询阶段才拿到成片地址

六、调试方法与示例返回

这一节讲怎么测,不涉及实测结果。

6.1 先测创建,再测查询

  1. 用最小请求体调创建:只填 grid_num、prompt、reference_image,不传 aspect_ratio,验证默认 3:4 是否生效;
  2. 创建返回里核对三件事:showapi_res_code=0、ret_code=0、task_id 非空;
  3. 复制 task_id 手工调查询,观察 status 与 progress 的变化;
  4. 拿到 poster_image_url 后,用浏览器直接打开验证可访问性(很多「图片打不开」其实是地址过期或防盗链,不是接口问题)。

6.2 参数怎么填

想验证的点 怎么填 看什么
默认画幅 不传 aspect_ratio 成片是否为 3:4
非法宫格降级 grid_num=3 是否被处理为单幅,结果是否仍返回成功
画幅是否生效 分别用 1:1、16:9 成片宽高比是否与入参一致
参考图是否被采用 换一张风格差异大的参考图 visual_base_analysis 是否随之变化
需求表达是否够细 同一张参考图,粗/细两版 prompt generated_prompt 的补全程度与成片差异

6.3 返回怎么读

  • status 是唯一判断任务终态的字段:SUCCESS 与 FAILED 是终态,其余都按「进行中」处理;
  • progress 只用于展示,不要拿它做完成判定;
  • flow_result.output.poster_image_url 是结果地址,只在这一层取图,不要去 step_* 里翻中间图;
  • flow_result.input 会回显你的三个入参,可作为「请求是否被正确处理」的自证材料;
  • 失败时 remark 是唯一有信息量的字段,step_status_list(如有)只包含执行到的阶段。

七、调用限制与规范

维度 现状 工程建议
任务结果有效期 文档标注长期查询有效期 3 天,短期可视化查询 1 小时 出图后即刻转存,不依赖接口地址长期可用
单次耗时 生成属于重计算,创建后需要轮询 轮询间隔 1–2 秒,总超时给到分钟级;不要同步等待
并发 以账号额度为准 用队列 + 限流器控制并发,避免瞬时打满
参数容错 非法 grid_num 自动降级为 1 服务端先做枚举白名单校验,别把错误留给下游
参考图 需公网可访问 上传对象存储 + 临时签名链接,不用内网地址
结果判定 依赖 status 不要用 progress 或 HTTP 200 直接判成功

几条落地规范:

  1. 幂等:同一次业务请求不要重复创建任务,用业务单号做幂等键,命中则复用已有 task_id;
  2. 重试:只重试「创建阶段的网络错误 / 5xx」,生成失败(FAILED)不要盲目重试,先看 remark;
  3. 降级:轮询超时后不要继续无限等,落一条待补偿记录,由后台任务续查;
  4. 缓存:同一组(参考图 + 需求 + 参数)可做结果缓存,避免重复消耗;
  5. 监控:记录 task_id、status、progress 终值、耗时与失败原因,便于定位是哪一阶段出的问题。

八、能力边界与免责

  • 不做真实性校验:生成的画面与文案是模型产出,涉及产品参数、售价、资质、功效等对外宣称时,必须由业务方复核后再投放;
  • 文字渲染有不确定性:海报内中文长句、生僻字、密集小字可能出现字形异常,重要文案建议在后期工具里二次排版;
  • 参考图版权:上传人像、LOGO、产品图前,确认你拥有使用权或已获得授权;
  • 合规责任在使用方:广告法、平台投放规则、行业特殊规定(医疗、金融、教育等)由使用方负责,接口只提供图像生成能力;
  • 结果不保证可复现:同参数多次调用,成片存在差异,这属于生成式模型的固有特性。

九、错误码排查

接口文档未单独列出业务错误码表,排查按两层走:

层级 字段 常见取值 处理方式
网关 / 平台层 showapi_res_code 非 0 多半是鉴权、额度、参数格式问题;先看 showapi_res_error
业务受理层 showapi_res_body.ret_code 非 0 任务未被受理,读 remark
任务执行层 showapi_res_body.status FAILED 生成没跑完,读 remark 定位阶段

常见现象与定位思路:

现象 大概率原因 排查顺序
返回 401 / 鉴权失败 Authorization 头缺失或格式不对 确认是 APPCODE <值>,不是 Bearer,也不是 appkey= 查询参数
ret_code 非 0 必填字段缺失、reference_image 取不到 检查三个必填项、参考图能否匿名访问
一直 progress 不动 生成排队或参考图解析失败 换一张更小、更清晰的参考图重试
SUCCESS 但地址打不开 结果地址过期或防盗链 出图后即刻转存,别过几天再取
成片构图与预期差距大 prompt 信息不足或与参考图冲突 补「用途 + 版式 + 配色 + 场景」,必要时换参考图

错误排查路径:平台层 → 受理层 → 执行层

十、技术 FAQ

Q1:这个接口是同步返回图片吗?
不是。创建接口只返回 task_id,必须再调查询接口轮询,直到 status=SUCCESS 才拿到 poster_image_url。

Q2:为什么创建成功后还要查询两次以上?
生成属于重计算任务,创建只代表任务已入队。轮询间隔建议 1–2 秒,progress 可用于展示进度,但终态判断只看 status。

Q3:grid_num 传 3 会报错吗?
不会报错,非法值会被自动降级为 1(单幅)。但建议调用方自己先做枚举校验,避免静默降级带来预期偏差。

Q4:不传 aspect_ratio 会怎样?
默认按 3:4 出图。需要方形或宽屏时显式传入 1:1、16:9 等值。

Q5:reference_image 能传 Base64 吗?
文档把该字段标为 base64 类型,同时又描述为「参考图 URL」,实际以官方文档为准。稳妥做法是传公网可访问的 URL。

Q6:参考图有什么要求?
需公网可直接访问,主体清晰、无水印遮挡。人像、实物产品、风景、品牌 LOGO 都可以作为基底。

Q7:任务结果能保存多久?
文档标注长期查询有效期为 3 天,短期可视化预览为 1 小时。不要把接口返回的图片地址当永久地址用。

Q8:怎么判断任务失败?
showapi_res_body.status 为 FAILED,失败原因在 remark;此时 flow_result 里可能只有部分产物,不应直接用于投放。

Q9:同一份需求能出多个版式吗?
可以,但需要多次调用:单幅用 grid_num=1;双格 / 四宫格分别用 2 / 4。一次调用只对应一种排版。

Q10:调用额度怎么控制?
按账号额度计算,长文本 prompt 与高分辨率成片会带来更高消耗。工程上建议做结果缓存与队列限流,prompt 保持精简但信息完整。

Q11:生成的图能直接商用吗?
接口提供的是图像生成能力,是否可商用取决于你的参考图授权、画面内容合规性与投放平台规则,需业务方自行复核。

Q12:报「图片地址无法访问」怎么办?
确认链接是 https、无需登录态、未开启防盗链、有效期足够长;私有存储请先转成带签名的临时链接。

十一、内容小结

  • 形态是异步任务:POST /skills_poster/create 拿 task_id,GET /skills_poster/query 轮询到 status=SUCCESS,再从 flow_result.output.poster_image_url 取图。
  • 四个入参决定成片:grid_num(1/2/4)、prompt(需求描述)、reference_image(视觉基底)、aspect_ratio(默认 3:4)。
  • 三个判断层级要分清:showapi_res_code(平台)、ret_code(受理)、status(执行)。
  • 三条工程红线:AppCode 只放服务端、结果即刻转存、任务创建做幂等。
  • 本文所有返回示例均为结构示例,实际字段与取值请以官方文档为准。

整体接入清单:参数、时序、判定字段、落地要点

相关文章
|
8天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
3484 34
|
7天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
|
2天前
|
云安全 人工智能 安全
|
8天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1566 5
|
云安全 安全 网络安全
|
8天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
|
21天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
3730 55
|
13天前
|
人工智能 JSON Linux
【保姆级】ComfyUI部署教程(下载+安装+配置+工作流,2026最新)
ComfyUI 是一款开源节点式AI生成工具,支持图像、视频、音频及3D内容创作。通过拖拽连线组合模型加载、提示词、采样等节点,构建可复用、易修改的工作流,兼容SD1.5、SDXL、Flux、Qwen Image等主流模型。