接入指南

海报设计器接入文档

将传思网海报设计器嵌入到您的网站,让您的用户在线创作海报。共四步:申请 API Key → 用 ApiKey 换取 Poster 服务 Token → 通过 iframe 嵌入设计器并传入 Token → 渲染海报生成图片。

1注册账号并申请 API Key

调用海报设计器与渲染接口前,需要一个有效的 API Key,请按以下步骤获取:

1
注册传思网账号
访问注册页面创建您的账号;如已有账号请直接登录。
2
登录控制台
进入「控制台 → API Key 管理」页面。
3
创建 API Key
点击「新建 API Key」,填写一个便于识别的名称后保存,系统将生成一个以 cs_ 开头的 Key。同一个 ApiKey 可用于换取所有服务(Poster / OCR / ASR / TTS)的 Token,无需按服务分别申请。
4
账户充值(如需)
确保账户余额充足,海报保存时按账户实际配置扣费;余额不足将无法保存。
请妥善保管 API Key:API Key 等同于您的账户凭证,请保存在您自己的服务端,仅用于换取短期有效的 Token;不要在前端代码或公开页面中明文硬编码 ApiKey。

2换取 Poster 服务 Token

海报设计器与渲染接口均使用 Token 作为请求凭证。Token 由 ApiKey 配合服务类型换取,有效期 1 小时,且只能用于对应服务类型的接口。请在您的服务端调用此接口换取 Token,再将 Token 下发到嵌入页面或前端。

POST https://<传思网域名>/api/auth/access-token

请求体(JSON)

字段 必填 类型 说明
apiKey string 您在步骤 1 中申请的 API Key(cs_ 开头)。
serviceType string 服务类型,用于约束 Token 适用范围。可选值:Poster / OCR / ASR / TTS。海报场景请固定传 Poster

请求体示例:

json
{
  "apiKey": "cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "serviceType": "Poster"
}

响应体(JSON)

字段 类型 说明
data.tokenstring32 位字母数字 Token,作为后续接口的鉴权凭证。
data.serviceTypestringToken 对应的服务类型(与请求一致)。
data.expiresAtstringToken 过期时间,ISO 8601 UTC 格式。
data.expiresInnumber剩余有效秒数,新签发时为 3600。
json
{
  "success": true,
  "data": {
    "token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
    "serviceType": "Poster",
    "expiresAt": "2026-05-17T11:30:00.0000000Z",
    "expiresIn": 3600
  }
}
Token 复用规则:同一个 ApiKey + 同一个 serviceType 在 Token 未过期时会直接返回当前未过期的 Token,不会重复签发。您可放心在每次需要时调用此接口,无需自己缓存(如有需要也可在客户端按 expiresAt 缓存以减少调用次数)。
服务类型隔离:Poster Token 只能调用海报相关接口;调用 OCR/ASR/TTS 接口请分别用 serviceType=OCR/ASR/TTS 换取对应 Token。

curl 示例

bash
curl -X POST https://your-webapi.com/api/auth/access-token \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "serviceType": "Poster"
  }'

3嵌入海报设计器

设计器入口地址

设计器为一个独立的 H5 页面,可通过 iframe 嵌入到您的网站,也可以使用 window.open 在新窗口中打开。

URL https://<您的域名>/poster/index.html
打开设计器后,需要通过 postMessage 向其发送一条 INIT_DESIGNER_DATA 消息,把您在步骤 2 换取的 Token、画布尺寸、保存回调地址等参数告诉设计器。设计器收到消息后才会进入可编辑状态。

消息协议

字段 必填 类型 说明
type string 固定值 "INIT_DESIGNER_DATA"
timestamp number 消息时间戳,建议传入 Date.now()
source string 消息来源标识,方便您在调试日志中识别(如您的应用名)
data object 初始化数据对象,详见下方「data 字段说明」

data 字段说明

字段 必填 类型 说明
token string 步骤 2 换取的 Poster 服务 Token(32 位字母数字字符串)。设计器加载时无需校验,仅在用户点击「保存」时由传思网服务端校验有效性与服务类型。
saveApiUrl string 您自己的海报保存接口完整 URL。用户在设计器中点击「保存」时,传思网服务端会将该海报数据落库后产生的 posterId 通过 POST 提交到该地址。
templateId string 业务侧自定义的模板 ID,设计器不解析,仅在保存时回传给您的 saveApiUrl,便于关联业务记录。
canvasSize object 画布尺寸 { width: number, height: number },单位 px。常用:375×667(手机海报)、800×1200(竖版海报)、1080×1920(抖音)。
canvasBackgroundColor string 画布背景色,CSS 颜色格式(如 #ffffff),默认白色。
title string 模板标题,展示在设计器顶部。
description string 模板描述,作为业务备注随保存请求回传。
extraData object 业务自定义扩展字段,对象结构由您自行定义。设计器不会解析,仅原样回传给您的保存接口。
dataSourceFields object 数据源字段映射,{ 字段Key: 显示名 }。配置后,设计器中文本元素可以绑定这些字段,便于您在保存后用真实数据替换占位(如订单号、用户姓名)。
presetElements array 预置在画布上的元素列表,数组中每一项为一个元素对象(支持 text/image 等类型),用于让用户基于预设布局进行二次编辑。

presetElements 元素结构(参考)

字段 类型 说明
typestring元素类型:text / image
x / ynumber元素左上角坐标(px)
width / heightnumber元素宽高(px)
contentstring文本类型时为文字内容,图片类型时为图片地址
textStyleobject文本样式:{ fontSize, color, textAlign, fontWeight }

完整接入示例

以下示例演示了如何用 iframe 嵌入设计器,并在加载完成后传入初始化参数:

html
<!-- 1. 嵌入设计器 iframe -->
<iframe id="posterDesigner"
  src="https://your-domain.com/poster/index.html"
  style="width:100%; height:100vh; border:none;">
</iframe>

<script>
  const iframe = document.getElementById('posterDesigner');

  // 2. iframe 加载完成后发送初始化数据
  iframe.addEventListener('load', () => {
    iframe.contentWindow.postMessage({
      type: 'INIT_DESIGNER_DATA',
      timestamp: Date.now(),
      source: 'my-app',
      data: {
        // === 必填 ===
        token: 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6',
        saveApiUrl: 'https://your-api.com/poster/save',

        // === 画布配置 ===
        templateId: 'order_poster_001',
        canvasSize: { width: 800, height: 1200 },
        canvasBackgroundColor: '#ffffff',
        title: '订单海报',
        description: '用于订单分享的海报模板',

        // === 业务扩展 ===
        extraData: {
          orderId: 'ORD20260516001',
          shopId: 'shop_8888'
        },

        // === 数据源字段(设计器中文本可绑定) ===
        dataSourceFields: {
          userName: '用户姓名',
          phone:    '手机号码',
          orderNo:  '订单号',
          amount:   '订单金额'
        },

        // === 预设元素(可选) ===
        presetElements: [
          {
            type: 'text',
            x: 50, y: 50, width: 700, height: 60,
            content: '欢迎使用海报设计器',
            textStyle: { fontSize: 32, color: '#222', textAlign: 'center' }
          }
        ]
      }
    }, '*');
  });
</script>
使用 window.open 打开新窗口的方式:调用 const w = window.open('https://your-domain.com/poster/index.html'),等设计器页面加载完成(建议延时 1~2 秒,或监听设计器返回的 ready 消息)后,调用 w.postMessage(payload, '*') 即可,参数与 iframe 方式完全一致。

saveApiUrl 接口规约(您需要实现的接口)

用户在设计器中点击「保存」后,传思网服务端会先把海报报文落库到 WebAPI 海报数据表(生成一个随机字符串 posterId),然后按以下规约把 posterId POST 提交到您配置的 saveApiUrl请按此规约在您自己的服务端实现该接口,用于记录这条海报与您业务的关联关系(例如把 posterId 存到您自己的订单表里)。

POST <您配置的 saveApiUrl>

请求头

Header Value
Content-Typeapplication/json; charset=utf-8

请求体(JSON)

字段 类型 说明
posterId string 本次保存生成的海报 ID(32 位随机字母数字字符串)。请把它与您的业务记录关联保存,后续渲染海报时需要用它向传思网渲染接口换取海报内容。
token string 本次保存对应的 Poster 服务 Token(即您在前端 postMessage.data.token 中传入的值),用于您侧识别业务来源 / 租户。
timestamp string 请求发出时间,ISO 8601 UTC 格式(如 2026-05-16T10:30:00.0000000Z),可用于幂等校验或防重放。

请求体示例:

json
{
  "posterId": "a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuV",
  "token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "timestamp": "2026-05-16T10:30:00.0000000Z"
}

响应格式

传思网服务端依据如下规则判定您的接口是否成功:

  • HTTP 状态码必须为 2xx,否则一律视为失败;
  • 若响应体为 JSON 且包含 success: false,也视为失败,message 字段会被记录到消费记录的备注中;
  • 响应体可以为空,或返回任意自定义结构;推荐使用以下统一格式以便排错。

推荐响应(成功):

json
{
  "success": true,
  "message": "ok"
}

推荐响应(失败):

json
{
  "success": false,
  "message": "业务订单不存在"
}
接口实现注意事项:
• 请确保 saveApiUrl外网可访问的完整 URL(含协议头),生产环境推荐使用 HTTPS;
• 接口必须支持 POST 方法、接收 application/json 请求体;
• 建议接口处理时长控制在 10 秒以内,避免上游超时;
• 海报原始内容由传思网托管在 WebAPI 数据库中,您只需保存 posterId,后续可通过下方「渲染接口」拉取并生成图片。

参考实现(Node.js / Express)

javascript
app.post('/poster/save', express.json(), async (req, res) => {
  const { posterId, token, timestamp } = req.body;

  // 1. 基础校验
  if (!posterId || !token) {
    return res.json({ success: false, message: '参数缺失' });
  }

  // 2. 把 posterId 关联到您的业务记录(例如订单、用户、活动)
  await db.savePosterRef({
    posterId,
    token,
    receivedAt: timestamp,
    // 业务字段:orderId / userId / 等
  });

  // 3. 返回结果
  return res.json({ success: true });
});

4渲染海报(生成图片)

当您需要把保存好的海报真正渲染成图片(例如分享、下载、打印)时,无需自己调接口、无需关心海报数据结构,只需在您的网页引入我们提供的 poster-generator-umd.js,调用 PosterGenerator.render(...) 并传入 token + posterId + 业务参数,即可直接拿到海报图片(base64 dataURL)。

1)引入 SDK

在您的页面 <head><body> 末尾引入:

JS https://<传思网域名>/poster/poster-generator-umd.js
html
<script src="https://your-webapi.com/poster/poster-generator-umd.js"></script>

该 SDK 已内置渲染接口调用与 Canvas 绘图逻辑,仅需引入这一个脚本

2)调用 SDK 生成图片

PosterGenerator.render(options) 返回 Promise<string>,resolve 后即为可直接放入 <img src> 的 base64 图片地址。

参数 必填 类型 说明
token string 步骤 2 换取的 Poster 服务 Token。海报必须属于该 Token 关联 ApiKey 所归属的用户,否则返回无权访问。
posterId string 保存时返回给您的海报 ID。
dataSourceValues object 业务参数:海报字段实际值。键为设计器中绑定的 dataSource 字段名(即 dataSourceFields 里的 Key),值为字符串,会在渲染时替换文本占位。未传入对应字段时使用设计器中保存的默认值。
baseUrl string 传思网 WebAPI 基础地址。与 WebAPI 同源部署时可省略,SDK 会自动使用当前域名;跨域时请填写完整的 https://your-webapi.com

完整示例:

html
<img id="poster-preview" alt="海报预览" />

<!-- 同源部署:直接相对路径引入即可 -->
<script src="/poster/poster-generator-umd.js"></script>
<script>
  PosterGenerator.render({
    // baseUrl 同源时不要传;跨域时换成您的真实域名:baseUrl: 'https://api.your-domain.com',
    token:    'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6',
    posterId: 'a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuV',
    dataSourceValues: {
      userName: '张三',
      phone:    '138****8888',
      orderNo:  'ORD20260516001',
      amount:   '¥199.00'
    }
  }).then(function (dataUrl) {
    document.getElementById('poster-preview').src = dataUrl;
  }).catch(function (err) {
    console.error('海报渲染失败:', err.message);
  });
</script>
⚠️ 关于 baseUrl不要原样保留示例中的占位域名 https://your-webapi.com,否则浏览器会因找不到该域名而报 net::ERR_NAME_NOT_RESOLVED / Failed to fetch。同源部署请省略 baseUrl;跨域请改成您真实的传思网 WebAPI 完整地址(含 https)。
SDK 背后做了什么:
1. POST {baseUrl}/api/poster/render 拉取海报配置(带 token + posterId + dataSourceValues);
2. 用 Canvas 把海报渲染为 PNG,返回 data:image/png;base64,... 形式的字符串。
您拿到 dataUrl 后可以:放入 <img>、转 Blob 上传到您自己的对象存储、用 <a download> 让用户下载,等等。
🎨 在线测试渲染效果:无需写代码,使用我们提供的渲染演示页,填入您的 token、posterId 和数据源值即可一键拉取并渲染海报,验证您保存的海报是否正常。
常见问题:
设计器一直显示加载中 — 检查是否已发送 INIT_DESIGNER_DATA 消息。
渲染提示「Token 无效或已过期」 — Token 有效期 1 小时,过期后请重新调用 /api/auth/access-token 用 ApiKey + serviceType=Poster 换取新 Token。
渲染提示「Token 服务类型不匹配」 — 请确认换取 Token 时 serviceType 传的是 Poster,不能用 OCR/ASR/TTS 的 Token 调海报接口。
渲染提示「余额不足」 — 请前往「控制台 → 充值记录」充值后重试。
渲染提示「无权访问该海报」 — 确认 posterId 是用同一个用户名下的 ApiKey 创建的;不同账号之间的海报不可互相访问。
跨域报错 — 跨域使用时请确认 WebAPI 已开启 CORS 允许您的来源域名,并在 render 时显式传入 baseUrl

在线体验

我们提供了两个可视化的演示页,您可以无需写代码即可跑通完整流程:

  • 演示发送页:填写 ApiKey 一键换取 Poster Token,然后填写保存接口、画布参数等,一键打开设计器(步骤 2 + 步骤 3 的 postMessage 流程)。
  • 渲染演示页:填入 token + posterId + 数据源值,调用渲染接口拉取海报配置并直接生成图片(步骤 4 的渲染流程),可用于测试您保存的海报是否正常。

建议先在演示发送页跑通保存流程拿到 posterId,再到渲染演示页验证渲染效果,最后按上面的示例代码集成到您自己的网站。

快速换取 Token

在线测试 POST /api/auth/access-token:填入您的 ApiKey 与服务类型,点击按钮即可换取 Token(未过期时复用现有 Token)。