接入指南

海报设计器接入文档

将传思网海报设计器嵌入到您的网站,让您的用户在线创作海报。共三步:完成身份核验(申请 API Key 并换取 Token)→ 通过 iframe 嵌入设计器并传入 Token → 渲染海报生成图片。

1身份核验(申请 API Key + 换取 Token)

调用海报设计器与渲染接口前,需要一个有效的 API Key 并换取 Poster 服务 Token。详细步骤请参阅:

概要:注册账号 → 申请 API Key → 用 ApiKey + serviceType=Poster 换取 Token(有效期 1 小时)→ 使用 Token 调用下方接口。

2嵌入海报设计器

设计器入口地址

设计器为一个独立的 H5 页面,可通过 iframe 嵌入到您的网站,也可以使用 window.open 在新窗口中打开。使用我们提供的 SDK 封装方法 PosterGenerator.openDesigner()

完整接入示例

SDK 封装 openDesigner()

引入 poster-generator-umd.js,调用 PosterGenerator.openDesigner(options),返回 Promise。SDK 内部自动完成弹窗打开、握手协议(监听 DESIGNER_READY 后自动发送 INIT_DESIGNER_DATA),无需手写 setTimeout。失败时通过结构化错误码 err.code 区分原因(INVALID_PARAMS / POPUP_BLOCKED / TIMEOUT / SEND_FAILED)。

新增 onPosterReady 回调:设计器打开后自动完成海报初始化(无 posterId 时自动创建空白海报 / 有 posterId 时加载已有海报),完成后回调 onPosterReady(posterId, error),三方可在回调中保存海报 ID 与业务关联。

html
<!-- 1. 引入 SDK(也可使用您部署的同源地址) -->
<script src="https://your-webapi.com/poster/poster-generator-umd.js"></script>

<button onclick="openPosterDesigner()">打开设计器</button>

<script>
  function openPosterDesigner() {
    PosterGenerator.openDesigner({
      // === 必填 ===
      token:      'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6',
      // === 可选:编辑已有海报时填入 ===
      posterId: '',
      // === 可选:画布初始尺寸(仅未传 posterId 创建新海报时生效,默认 375 × 667) ===
      width:  375,
      height: 667,
      // === 可选:数据源字段(设计器中文本可绑定) ===
      dataSourceFields: {
        userName: '用户姓名',
        phone:    '手机号码',
        orderNo:  '订单号'
      },
      // === 海报初始化结果回调 ===
      onPosterReady: function (posterId, error) {
        if (error) {
          console.error('海报初始化失败:', error);
          // 处理错误(如提示用户重试)
          return;
        }
        console.log('海报已就绪,posterId:', posterId);
        // 将 posterId 保存到您的业务系统(如关联到订单、用户记录等)
        // 例如: saveToMyBackend(posterId);
      }
    }).then(({ window: w }) => {
      console.log('设计器已就绪,等待海报初始化...');
    }).catch(err => {
      // err.code: INVALID_PARAMS / POPUP_BLOCKED / TIMEOUT / SEND_FAILED
      alert('[' + err.code + '] ' + err.message);
    });
  }
</script>
onPosterReady 回调说明:
未传 posterId 时:设计器自动调用 WebAPI 创建一张空白海报,成功后回调 onPosterReady(newPosterId, null)
已传 posterId 时:设计器加载该海报数据完成后回调 onPosterReady(posterId, null);若海报不存在或加载失败则回调 onPosterReady(posterId, errorMessage)
width / height 参数说明:
• 用于指定新建海报时的画布初始尺寸(单位:像素),常用于针对不同场景(朋友圈分享图 750×1334、长图海报 750×2000、横版 banner 1200×600 等)创建对应尺寸的空白海报;
仅在未传 posterId 时生效;若同时传入了 posterId(加载已有海报),width / height 会被忽略,画布尺寸以模板自带尺寸为准;
未传时默认为 375 × 667(标准移动端竖屏比例);
• 取值需为正整数,建议范围 100 ~ 5000

海报保存说明

用户在设计器中点击「保存」后,传思网服务端会把海报报文落库到 WebAPI 海报数据表,并返回 posterId三方业务无需对接任何「保存回调」接口 —— 只需通过上文的 onPosterReady 回调拿到 posterId,自行将其保存到您自己的业务记录中(例如订单表、用户作品表等)即可,后续渲染海报时使用该 posterId

提示:设计器进入时即触发 onPosterReady(自动创建空白海报或加载已有海报),此时即可拿到 posterId 并入库关联。即便用户未点击保存按钮直接关闭页面,您依然可以通过该 posterId 后续访问/续编/渲染该海报。

3渲染海报(生成图片)

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

1)引入 SDK

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

html
<script src="https://your-webapi.com/poster/poster-generator-umd.js"></script>

2)调用 SDK 生成图片

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

参数 必填 类型 说明
token string 身份核验中换取的 Poster 服务 Token。海报必须属于该 Token 关联 ApiKey 所归属的用户,否则返回无权访问。
posterId string 保存时返回给您的海报 ID。
dataSourceValues object 业务参数:海报字段实际值。键为设计器中绑定的 dataSource 字段名(即 dataSourceFields 里的 Key),值为字符串,会在渲染时替换文本占位。未传入对应字段时使用设计器中保存的默认值。
outputFormat string 输出格式:'jpeg'(默认,体积小、全平台兼容)| 'webp'(体积更小、支持透明)| 'png'(无损、支持透明,文件较大)。
outputQuality number 输出质量(0~1),默认 0.9。仅对 jpeg/webp 生效,PNG 忽略此参数。

完整示例:

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

<!-- 同源部署:直接相对路径引入即可 -->
<script src="/poster/poster-generator-umd.js"></script>
<script>
  PosterGenerator.render({
    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>

3)下载海报图片

拿到渲染后的 dataUrl 后,可直接调用 PosterGenerator.downloadImage(dataUrl, filename?) 触发浏览器下载,无需手动处理文件扩展名

参数 必填 类型 说明
dataUrl string render() 返回的 base64 图片地址(或任意 canvas.toDataURL() 结果)。
filename string 下载文件名。不传 时自动生成 poster.jpg(根据 dataUrl 的 MIME 推断扩展名);
传了但不含图片扩展名(如 'order_detail')时自动追加 .jpgorder_detail.jpg
已含扩展名(如 'custom_name.png')时原样使用。

完整示例(渲染 + 下载):

html
<button onclick="downloadPoster()">生成并下载海报</button>

<script>
  async function downloadPoster() {
    try {
      // 1. 渲染海报
      const dataUrl = await PosterGenerator.render({
        token:    'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6',
        posterId: 'a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuV',
        dataSourceValues: { userName: '张三', phone: '138****8888' }
      });

      // 2. 下载海报(文件名不传 → 自动 poster.jpg)
      PosterGenerator.downloadImage(dataUrl);

      // 也可以指定文件名(不含扩展名会自动追加)
      // PosterGenerator.downloadImage(dataUrl, '订单详情_' + Date.now());
    } catch (err) {
      console.error('下载失败:', err.message);
    }
  }
</script>
重要:默认输出格式为 JPEG(体积小、全平台兼容),downloadImage() 会自动使用 .jpg 扩展名。
如需 PNG(透明背景)或 WebP(极致压缩 + Alpha),在 render() 中传 outputFormat: 'png'outputFormat: 'webp',下载时会自动匹配对应的扩展名。
常见问题:
渲染提示「Token 无效或已过期」 — Token 有效期 1 小时,过期后请重新调用 /api/auth/access-token 用 ApiKey + serviceType=Poster 换取新 Token。
渲染提示「Token 服务类型不匹配」 — 请确认换取 Token 时 serviceType 传的是 Poster,不能用 OCR/ASR/TTS 的 Token 调海报接口。
渲染提示「无权访问该海报」 — 确认 posterId 是用同一个用户名下的 ApiKey 创建的;不同账号之间的海报不可互相访问。

4删除海报

当您不再需要某张海报时,可调用此接口将其永久删除。删除后海报数据不可恢复,相关的渲染链接将失效。

POST https://<传思网域名>/api/poster/delete

请求体(JSON)

字段 必填 类型 说明
token string 身份核验中换取的 Poster 服务 Token。只能删除该 Token 关联账号下的海报。
posterId string 要删除的海报 ID。

请求体示例:

json
{
  "token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "posterId": "a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuV"
}

响应格式

删除成功:

json
{
  "success": true,
  "message": "已删除"
}

常见失败响应:

json
// Token 无效或类型不匹配
{ "success": false, "message": "Token 无效或已过期" }

// 海报不存在
{ "success": false, "message": "海报不存在或已被删除" }

// 无权删除(海报不属于该 Token 关联的账号)
{ "success": false, "message": "无权删除该海报" }

curl 示例

bash
curl -X POST https://your-webapi.com/api/poster/delete \
  -H "Content-Type: application/json" \
  -d '{
    "token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
    "posterId": "a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuV"
  }'
注意事项:
• 删除操作不可逆,请确认后再执行;
• 只能删除当前 Token 对应账号下的海报,无法跨账号删除
• 删除后该海报的渲染链接将立即失效,已生成的图片不受影响;
• 删除会释放一个配额槽位,可在配额范围内重新创建新海报。

快速换取 Token

在线测试 Token 换取功能已移至独立的「接口身份核验」页面,支持所有服务类型(Poster / OCR / ASR / TTS)。

在线体验

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

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

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