跳转到内容

活动网页 SDK

在 会员与营销 → 会员营销中心 → 互动活动 创建活动、绑定托管站点并配置接口的 key。通过活动的 /event/{code} 链接打开已发布的页面;仅访问一般托管站点的预览地址时,SDK 无法识别活动码。

将下面的代码放进活动页。它只读取信息,不领取奖励。在普通浏览器中也能看到活动状态;从小程序活动入口进入、获得本活动票据后,才可读取本人信息并参与。

<p id="status" role="status">正在读取活动…</p>
<script src="/sdk/foodiy-event-v1.js"></script>
<script>
  const statusLine = document.querySelector('#status');
  const ev = window.FoodiyEvent;
  ev.info().then(({ event }) => {
    statusLine.textContent = ev.signedIn
      ? event.name + ':' + event.status
      : event.name + ' · 请从小程序进入后参与';
  }).catch(error => { statusLine.textContent = error.message; });
</script>

页面资源使用相对路径;这里的 /sdk/foodiy-event-v1.js 是平台在活动域名根路径提供的 SDK。票据由小程序通过 URL 片段传入,SDK 用 Bearer 头向本活动接口提交,不需要自行实现商家登录。

从用户点击到奖励结果

链接到「从用户点击到奖励结果」
  1. 读取 info() 中的 actions、参与条件及剩余次数。按钮使用后台配置的 key,例如 claim;不是每个活动都存在名为 claim 的接口。
  2. 仅在顾客确定参与时调用 ev.act(key, { key: operationKey })。每次新的参与意图生成新键(8–128 位字母、数字、下划线或横线);同一次点击超时后复用同一键。SDK 在单次调用内也会用同一键重试。
  3. 根据返回的 record.outcome 展示结果。抽奖动画随服务端确定的奖项播放;需要核对已经发生的参与时调用 records(),不要为了查结果再发起一次抽奖。
需要 做法
恢复游戏进度 const saved = await ev.load('progress');保存时用 ev.save('progress', data, saved.revision)。
遇到 SAVE_CONFLICT 先比较服务端的当前版本与本地修改,再决定是否合并。存档由页面写入,不能作为发奖依据。
遇到 TICKET_EXPIRED 或 MEMBERSHIP_REQUIRED 提示从小程序重新进入,或先在小程序完成入会。
遇到 ACTION_DAILY_LIMIT 或 COUNTER_INSUFFICIENT 向顾客解释当天次数已用完或计数器余额不足,不重复提交。

原始 HTTP 入口为 /api/event/{code}。活动信息为 GET;参与为 POST /actions/{key},需票据和 Idempotency-Key。普通活动网页优先使用 SDK,让它处理票据和响应信封。