把網站表單串接到ForeverLove

不用自己架設表單後端。只要在 ForeverLove 後台取得兩組代碼,再登記網站來源,GitHub Pages、自訂網域與一般靜態網站都能接收 RSVP 回覆。

回到婚禮表單後台
你的網站訪客填寫 RSVP
表單 API驗證 key 與來源
會員後台查看與匯出回覆

開始前先準備三樣東西

一個已開通婚禮表單功能的 ForeverLove 會員帳號、要接收回覆的網站網址,以及可以修改網站檔案的權限。目前後台只開放給指定會員;登入後若看不到入口,代表帳號尚未開通。

步驟一

在後台建立一個表單串接

登入 ForeverLove,開啟「婚禮表單後台」,填寫網站名稱、公開網址與「允許來源」。建立完成後,系統會自動建立第一張 RSVP 表單,並顯示串接所需的兩組代碼。

欄位ForeverLove 模板GitHub Pages本機測試
公開網址https://template-01.foreverlove.com.tw/https://帳號.github.io/專案/http://127.0.0.1:4173/
允許來源https://template-01.foreverlove.com.twhttps://帳號.github.iohttp://127.0.0.1:4173
什麼是「允許來源」?

它是被允許送出表單的網站身分,也就是網址中的「http 或 https+網域+必要的 port」。不要填頁面路徑、網址參數或結尾斜線。

步驟二

先保存 Form key 與 Publishable key

這兩組代碼用途不同,網站送出表單時缺一不可。完整 Publishable key 只在建立或重設時顯示一次,請立即複製到網站設定;Form key 則用來指定回覆要進入哪一張表單。

名稱用途是否能放在公開網站
Publishable key辨認是哪一個網站在送出資料。程式會把它放在 X-ForeverLove-Key可以。它不是後台密碼,但仍要限制允許來源。
Form key指定回覆要進入哪一張表單,會放在 API 網址中。可以。
公開代碼不等於所有資料都能公開

Form key 和 Publishable key 可以放在網站中;ForeverLove 登入密碼、JWT、資料庫密碼及任何後台管理憑證絕對不可以,也不能提交到 GitHub。

步驟三

登記哪些網站可以送出表單

ForeverLove 會比對瀏覽器送出的網站來源(Origin)。內容必須完全一致,包含 httphttps;本機測試還要包含 port。若同時使用正式網址、GitHub Pages 和本機預覽,請一行填一個。

允許來源範例
https://template-01.foreverlove.com.tw
https://amattsuyolo.github.io
http://127.0.0.1:4173
  • GitHub Pages 即使網址含有 repository 路徑,Origin 仍只填 https://帳號.github.io
  • http://localhost:4173http://127.0.0.1:4173 是不同來源。
  • 正式網站請使用 HTTPS 網址,不要用萬用字元。
步驟四

把兩組代碼放進網站

使用 ForeverLove wedding-template

如果使用 ForeverLove 公開婚禮模板,打開專案根目錄的 form-config.js,啟用串接並貼上兩組 key。正式網站使用 ForeverLove API;本機測試使用本機 API。

form-config.js
window.FOREVERLOVE_RSVP = Object.freeze({
  enabled: true,
  apiBaseUrl: "https://foreverlove.com.tw/api/v1",
  formKey: "貼上 Form key",
  publishableKey: "貼上 Publishable key"
});

使用一般 HTML/JavaScript 網站

如果沒有使用公開模板,也可以保留自己的表單外觀,只加入送出程式。以下是最小可用範例;其中 attendance 必須是 attending(出席)或 not-attending(無法出席)。

HTML 表單
<form id="rsvp-form">
  <label>姓名 <input name="name" required maxlength="100"></label>
  <label>Email <input name="email" type="email" maxlength="254"></label>
  <label>是否出席
    <select name="attendance" required>
      <option value="attending">會出席</option>
      <option value="not-attending">無法出席</option>
    </select>
  </label>
  <label>留言 <textarea name="message" maxlength="1000"></textarea></label>
  <input name="company" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">送出回覆</button>
  <p id="rsvp-status" role="status"></p>
</form>
JavaScript 送出
const apiBaseUrl = "https://foreverlove.com.tw/api/v1";
const formKey = "貼上 Form key";
const publishableKey = "貼上 Publishable key";
const form = document.querySelector("#rsvp-form");
const status = document.querySelector("#rsvp-status");

form.addEventListener("submit", async (event) => {
  event.preventDefault();
  const submit = form.querySelector('[type="submit"]');
  const values = Object.fromEntries(new FormData(form));
  submit.disabled = true;
  status.textContent = "送出中…";

  try {
    const response = await fetch(
      `${apiBaseUrl}/public/forms/${encodeURIComponent(formKey)}/responses`,
      {
        method: "POST",
        credentials: "omit",
        headers: {
          "Content-Type": "application/json",
          "X-ForeverLove-Key": publishableKey
        },
        body: JSON.stringify(values)
      }
    );
    const result = await response.json();
    if (!response.ok) throw new Error(result.message || "送出失敗");
    form.reset();
    status.textContent = result.message;
  } catch (error) {
    status.textContent = `${error.message},請稍後再試。`;
  } finally {
    submit.disabled = false;
  }
});
步驟五

送一筆測試,確認前台和後台都有資料

  1. 確認目前開啟網站的 Origin 已加入允許來源。
  2. 使用真正的網站網址開啟表單;不要直接雙擊 HTML 形成 file:// 頁面。
  3. 用容易辨認的測試姓名送出一次 RSVP。
  4. 回到婚禮表單後台,選擇相同表單並確認回覆出現。
  5. 下載 CSV,確認中文、Email、出席狀態與留言正常。
  • 送出時按鈕會停用並顯示處理中狀態。
  • 成功後有明確訊息,且後台看得到同一筆資料。
  • 必填未填、Email 格式錯誤時不會產生不完整回覆。
  • 手機版可完成整個填寫與送出流程。
步驟六

送不出去時,先看錯誤代碼

401

Publishable key 錯誤、已停用或已經重設。回後台重新確認或輪替 key。

403

目前網站的 Origin 不在允許來源中。檢查協定、網域、port 與結尾斜線。

404

Form key 不存在或表單已暫停。確認貼的是 Form key,不是 Publishable key。

422

送出欄位驗證失敗。確認姓名、出席狀態、Email 格式及文字長度。

429

短時間送出次數過多。稍後再測試,不要在前端自動重複送出。

瀏覽器只顯示 CORS 錯誤時

先檢查後台允許來源,再確認頁面的實際 Origin。不要用關閉瀏覽器安全限制的方式掩蓋設定問題。

看到測試回覆,就代表串接完成。

之後可以在同一個後台新增表單、暫停收件、搜尋回覆、匯出 CSV,或在 Publishable key 外洩時立即重設。

開啟婚禮表單後台