開始之前: 你的伺服器必須為每個工作階段產生一組
patToken,並讓你的頁面可取得。請參考設定你的伺服器。1. 載入小工具腳本
將此載入器加入你的頁面。它會注入小工具腳本,並在FluzEmbedded 準備就緒時才解析,因此其餘程式碼不會在小工具存在之前執行。
2. 初始化小工具
腳本載入後,呼叫init(),傳入你的 API 金鑰、交易細節,以及來自伺服器的 patToken。
init() 接受蛇形命名的 transaction_type。已簽章的 patToken 內的宣告為 transactionType。兩者必須描述相同的交易。3. 開啟小工具
選擇使用者如何啟動小工具。兩種選項都在init() 之後執行。
- 使用你自己的按鈕
- 使用 Fluz 按鈕
將
open() 綁定到頁面上已存在的按鈕。初始化選項
init() 僅檢查腳本本身需要的部分:apiKey、patToken、transaction_type,以及可解析的 container。其他都會針對你已簽章的 token 進行驗證,因此錯誤的 transaction_type 或缺少的 amount 會透過 onError 傳達給你,而不是你無法攔截的主控台訊息。方法
處理結果
onOpen 與 onClose 僅告知小工具出現與消失,並不代表使用者是否完成。若要知道流程如何結束,請傳入 onSuccess 與 onError。兩者皆為選用;即使都不傳,小工具仍可運作,只是你不會收到結果。
回呼的行為方式
onSuccess具有終局性。 最多觸發一次,其後不會再傳回任何結果,因此已完成的流程不會再同時回報錯誤。onError回報的是一次嘗試,而非最終判定。 身分驗證失敗或付款遭拒的使用者仍留在小工具內,且可再次嘗試。onError在單一工作階段中可能多次觸發,且之後仍可能收到onSuccess。- 兩個回呼都不會關閉小工具。 使用者會留在畫面中直到他們自行關閉,這會觸發
onClose。
onSuccess 觸發或使用者關閉小工具時,才將工作階段視為結束。
回呼會收到什麼
當可得時,兩個回呼都會包含將工作階段與你的紀錄關聯的識別碼,以及執行該流程之 Fluz 帳戶的聯絡資料。這些由 Fluz 在伺服器端依據你已簽章的 token 與使用者的工作階段填入,因此是 Fluz 所紀錄的值,而非頁面自行組裝的內容。
請獨立讀取每個欄位;不要假設欄位集合是完整的。
externalReferenceId來自你的 token,因此可在使用者登入前發生的失敗中依然存在。- 其餘四個來自 Fluz 帳戶,僅在工作階段進行到該步驟後才會出現。
- 在你的 token 驗證前即發生的失敗(例如 token 過期、缺少應用程式權限)不會攜帶任何欄位。
onError只會收到code與message。
email 與 phoneNumber 描述的是使用者登入的 Fluz 帳戶,可能與你在 patToken 中傳入的數值不同。
這些欄位用於識別工作階段;並非事件的正式紀錄。請使用 externalReferenceId 對應到你系統中的正確資料列,然後在採取動作前,透過 Webhook 或 API 呼叫確認最終結果。
錯誤代碼
onError 會收到可供分支判斷的穩定 code 與可讀的 message 供記錄。US-0005 與 G-0004 代表使用者可重試的失敗;其他每個代碼都代表工作階段無法繼續。
將任何未知代碼視同
G-0001。新代碼會在不破壞相容性的前提下陸續推出。
以行內方式渲染小工具(僅限 staging)
預設情況下,小工具會在你的頁面上掛載固定、覆蓋整個視窗的 overlay。傳入container 後,它會在你自行定位與調整大小的元素內渲染,不會有 overlay、滾動鎖定或頁面接管。
尺寸
小工具會以 100% 寬高填滿你的容器,並且不會調整容器大小。超出容器高度的內容會在小工具內捲動,而非你的頁面。- 在 CSS 中為容器設定明確的寬與高。 若沒有高度,小工具會退回使用瀏覽器 iframe 預設高度 150px,這是此整合中最常見的錯誤。當小工具開啟時,若容器太小,腳本會在主控台記錄警告。
- 最低支援尺寸為 320 × 480 px。 每個畫面(包含文件擷取、2FA 與 PIN 輸入)在此尺寸皆受支援。更小的版面不受支援。
- 沒有最大值限制。 寬容器會呈現桌面版版面(包含交易摘要側欄),窄容器則呈現行動版版面。
與模態視窗的差異
請規劃最後一列:當使用者關閉行內小工具時,
onClose 會觸發且你的容器會被清空,因此請在 onClose 中渲染應該替換小工具的內容。
容器錯誤
若容器無法使用,將不會有任何渲染,onOpen 也不會觸發,且腳本會記錄錯誤:
- 在
init():container既不是元素也不是非空字串。小工具將維持未設定狀態,之後的open()會被拒絕。 - 在
open(): 選擇器沒有匹配任何元素、不是有效的 CSS,或元素未附加至文件。
container 選擇器會在呼叫 open() 時才解析,而非於 init(),因此可在元素尚未存在時先呼叫 init()。