活动设计台
设计、预览并导出自托管转盘、刮刮卡或盲盒。支持本地演示与商家 API 结果,不托管发奖服务。
- 组件: 幸运转盘 / 刮刮卡 / 惊喜盲盒
- 主题: 海岸极简 / 糖果活力 / 复古街机 / 暗金精品 / 节日庆典 / 柔和手绘
结果来源
本地抽奖只是可修改的展示,不是可信发奖。导出代码内的公开优惠可被访客查看;不提供库存、身份或重复领取保护。
鉴权、概率、库存、资格与幂等由商家后端负责。不要填入任何密钥。预览绝不调用该接口。
商家 API 接入说明
这里填写的是你自己实现的接口,不是 Elysia 提供的抽奖服务。先在商家后端实现 POST /api/draw,设置与页面一致的活动 ID 和奖项 ID,再填入接口地址。下载并部署到 HTTPS 后才能联调真实抽奖;编辑器内始终只做模拟。
请求 · POST application/json
组件只发送 version、campaignId 和随机生成的 32 位十六进制 requestId,不发送客户 ID、概率或 API 密钥。后端必须独立识别参与者;requestId 不是登录凭证。
{
"version": 1,
"campaignId": "summer-boutique",
"requestId": "0123456789abcdef0123456789abcdef"
}
成功响应 · 200 application/json
原样回传 requestId;prizeId 必须匹配奖品池中的 ID,未中奖也返回“谢谢参与”项的 ID。可选字段:receiptId(≤200 字符)、claim.code(≤300)、claim.url(HTTPS,≤2048)。不用的字段直接省略,不要传 null。不加 data/result 外层,整个响应不超过 16 KiB。接口失败不等于未中奖。
{
"requestId": "0123456789abcdef0123456789abcdef",
"prizeId": "p1",
"receiptId": "draw_2026_001",
"claim": {
"code": "SAMPLE-ONLY",
"url": "https://shop.example/redeem"
}
}
当前奖项 ID:
p1: 九折礼遇
p2: 免运费
p3: 神秘礼物
p4: 谢谢参与
推荐将组件页面和 /api/draw 部署在同源(协议、域名、端口一致),必要时用服务端反向代理。相对地址以组件页面为基准,不是外层店铺页面。fetch 使用 credentials: same-origin,仅发送同源 Cookie;当前不支持配置 Authorization 或自定义请求头。跨源接口需允许组件页面的 Origin,并处理 POST + Content-Type 的 OPTIONS 预检;不会携带跨源 Cookie。只有静态 HTML 无法实现需登录的抽奖,嵌入时还需注意第三方 Cookie 限制。
后端必须鉴权、校验 Origin/CSRF 与活动资格、限制参与次数和请求频率,按服务端概率抽奖,并在同一事务中扣库存与保存结果。按参与者 + campaignId + requestId 持久化幂等记录,重试返回同一结果;兑换、防重复领取、有效期也由服务端控制。不能把浏览器里的概率、ID 或优惠码当作获奖凭证,不要在编辑器或导出代码里放密钥。
拒绝请求时返回相应非 2xx 状态(如 401/403/409/429/503)。组件显示统一的“尚无确认结果”,不会展示服务端错误文本。15 秒超时,拒绝重定向、坏 JSON、不匹配的 requestId、未知奖项和危险兑换链接。手动重试只在当前页面复用未决 ID;刷新会产生新 ID,因此参与限次必须持久化。不会自动重试,也不会用本地奖品兜底。
接口或托管地址未填完时,外观仍可离线预览;补齐标记字段才能导出。奖品或样式配置错误时保留上次有效预览。
导出与嵌入
HTML / CSS / JavaScript / JSON. 请先将导出文件放到自己的 HTTPS 网站,再填入页面地址。本工具不发布或托管活动。
可选图片由访客浏览器从对应 HTTPS 站点加载。编辑器不保存图片或 API 密钥。
扇区等大仅为视觉设计;本地模式按标示概率抽取,API 模式由后端决定。