海报设计器接入文档
将传思网海报设计器嵌入到您的网站,让您的用户在线创作海报。共四步:申请 API Key → 用 ApiKey 换取 Poster 服务 Token → 通过 iframe 嵌入设计器并传入 Token → 渲染海报生成图片。
1注册账号并申请 API Key
调用海报设计器与渲染接口前,需要一个有效的 API Key,请按以下步骤获取:
访问注册页面创建您的账号;如已有账号请直接登录。
进入「控制台 → API Key 管理」页面。
点击「新建 API Key」,填写一个便于识别的名称后保存,系统将生成一个以
cs_ 开头的 Key。同一个 ApiKey 可用于换取所有服务(Poster / OCR / ASR / TTS)的 Token,无需按服务分别申请。
确保账户余额充足,海报保存时按账户实际配置扣费;余额不足将无法保存。
2换取 Poster 服务 Token
海报设计器与渲染接口均使用 Token 作为请求凭证。Token 由 ApiKey 配合服务类型换取,有效期 1 小时,且只能用于对应服务类型的接口。请在您的服务端调用此接口换取 Token,再将 Token 下发到嵌入页面或前端。
请求体(JSON)
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| apiKey | 是 | string | 您在步骤 1 中申请的 API Key(cs_ 开头)。 |
| serviceType | 是 | string | 服务类型,用于约束 Token 适用范围。可选值:Poster / OCR / ASR / TTS。海报场景请固定传 Poster。 |
请求体示例:
{
"apiKey": "cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"serviceType": "Poster"
}
响应体(JSON)
| 字段 | 类型 | 说明 |
|---|---|---|
| data.token | string | 32 位字母数字 Token,作为后续接口的鉴权凭证。 |
| data.serviceType | string | Token 对应的服务类型(与请求一致)。 |
| data.expiresAt | string | Token 过期时间,ISO 8601 UTC 格式。 |
| data.expiresIn | number | 剩余有效秒数,新签发时为 3600。 |
{
"success": true,
"data": {
"token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"serviceType": "Poster",
"expiresAt": "2026-05-17T11:30:00.0000000Z",
"expiresIn": 3600
}
}
expiresAt 缓存以减少调用次数)。
serviceType=OCR/ASR/TTS 换取对应 Token。
curl 示例
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 在新窗口中打开。
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 元素结构(参考)
| 字段 | 类型 | 说明 |
|---|---|---|
| type | string | 元素类型:text / image 等 |
| x / y | number | 元素左上角坐标(px) |
| width / height | number | 元素宽高(px) |
| content | string | 文本类型时为文字内容,图片类型时为图片地址 |
| textStyle | object | 文本样式:{ fontSize, color, textAlign, fontWeight } 等 |
完整接入示例
以下示例演示了如何用 iframe 嵌入设计器,并在加载完成后传入初始化参数:
<!-- 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 存到您自己的订单表里)。
请求头
| Header | Value |
|---|---|
| Content-Type | application/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),可用于幂等校验或防重放。 |
请求体示例:
{
"posterId": "a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuV",
"token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"timestamp": "2026-05-16T10:30:00.0000000Z"
}
响应格式
传思网服务端依据如下规则判定您的接口是否成功:
- HTTP 状态码必须为 2xx,否则一律视为失败;
- 若响应体为 JSON 且包含
success: false,也视为失败,message字段会被记录到消费记录的备注中; - 响应体可以为空,或返回任意自定义结构;推荐使用以下统一格式以便排错。
推荐响应(成功):
{
"success": true,
"message": "ok"
}
推荐响应(失败):
{
"success": false,
"message": "业务订单不存在"
}
• 请确保
saveApiUrl 为外网可访问的完整 URL(含协议头),生产环境推荐使用 HTTPS;• 接口必须支持
POST 方法、接收 application/json 请求体;• 建议接口处理时长控制在 10 秒以内,避免上游超时;
• 海报原始内容由传思网托管在 WebAPI 数据库中,您只需保存
posterId,后续可通过下方「渲染接口」拉取并生成图片。
参考实现(Node.js / Express)
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> 末尾引入:
<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。 |
完整示例:
<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)。
1.
POST {baseUrl}/api/poster/render 拉取海报配置(带 token + posterId + dataSourceValues);2. 用 Canvas 把海报渲染为 PNG,返回
data:image/png;base64,... 形式的字符串。您拿到
dataUrl 后可以:放入 <img>、转 Blob 上传到您自己的对象存储、用 <a download> 让用户下载,等等。
• 设计器一直显示加载中 — 检查是否已发送
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。
在线体验
快速换取 Token
在线测试 POST /api/auth/access-token:填入您的 ApiKey 与服务类型,点击按钮即可换取 Token(未过期时复用现有 Token)。