海报设计器接入文档
将传思网海报设计器嵌入到您的网站,让您的用户在线创作海报。共三步:完成身份核验(申请 API Key 并换取 Token)→ 通过 iframe 嵌入设计器并传入 Token → 渲染海报生成图片。
1身份核验(申请 API Key + 换取 Token)
调用海报设计器与渲染接口前,需要一个有效的 API Key 并换取 Poster 服务 Token。详细步骤请参阅:
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 与业务关联。
<!-- 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>
• 未传 posterId 时:设计器自动调用 WebAPI 创建一张空白海报,成功后回调
onPosterReady(newPosterId, null);• 已传 posterId 时:设计器加载该海报数据完成后回调
onPosterReady(posterId, null);若海报不存在或加载失败则回调 onPosterReady(posterId, errorMessage);• 用于指定新建海报时的画布初始尺寸(单位:像素),常用于针对不同场景(朋友圈分享图 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> 末尾引入:
<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 忽略此参数。 |
完整示例:
<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')时自动追加 .jpg → order_detail.jpg;已含扩展名(如 'custom_name.png')时原样使用。
|
完整示例(渲染 + 下载):
<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>
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删除海报
当您不再需要某张海报时,可调用此接口将其永久删除。删除后海报数据不可恢复,相关的渲染链接将失效。
请求体(JSON)
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
| token | 是 | string | 身份核验中换取的 Poster 服务 Token。只能删除该 Token 关联账号下的海报。 |
| posterId | 是 | string | 要删除的海报 ID。 |
请求体示例:
{
"token": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"posterId": "a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuV"
}
响应格式
删除成功:
{
"success": true,
"message": "已删除"
}
常见失败响应:
// Token 无效或类型不匹配
{ "success": false, "message": "Token 无效或已过期" }
// 海报不存在
{ "success": false, "message": "海报不存在或已被删除" }
// 无权删除(海报不属于该 Token 关联的账号)
{ "success": false, "message": "无权删除该海报" }
curl 示例
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,再到渲染演示页验证渲染效果,最后按上面的示例代码集成到您自己的网站。