Skip to main content
external reference ID 是你為某個 Fluz 使用者所設定的自有識別碼。它讓你能用系統中既有的 ID 操作 Fluz API——而不必為每位使用者儲存或傳遞 Fluz 內部的 userIdaccountId 當使用者授權你的應用程式時,你會將自家的識別碼附加到該授權上。Fluz 會儲存你的識別碼與該使用者 Fluz 帳戶的配對關係,且範圍限定在你的應用程式。從此之後,你就可以在產生權杖、發送轉帳、以及對應 webhook 事件時,以你自己的 ID 來引用該使用者。 實際效益:你永遠不需要建立 Fluz-ID 對照表。 一個 webhook 抵達時,內含你的使用者 ID,你就能路由它。無需 join、無需快取、也不需要對賬作業。

一個值,三個欄位名稱

相同的值會在不同介面以不同名稱出現。這是本頁最常見的混淆來源,開始前值得先記住。 因為它被嵌在 access token 中,所以關聯能在 token 重新整理後依然存在——你在授權時指派一次,之後都會持續有效。

選擇識別碼

絕對不要使用 PII。 不要用電子郵件、電話號碼或姓名。兩個具體理由。第一,它們會變動——人們會更換 email 和電話,而此值一經設定即不可變動,導致你的對應永久失效。第二,此值會出現在 查詢字串JWT claims 中,代表它將進入瀏覽器歷史、Referer 標頭、Proxy 日誌,以及你自己的應用程式日誌。不要把個資放在那裡。
代價最高的錯誤是把它綁錯對象。 external reference ID 用來永久識別一個_人_——不是一筆交易、不是一次撥款批次、不是一個工作階段,也不是一張訂單。若你傳的是每筆交易都有新值的識別碼,第一次轉帳會成功,但第二次會為同一個人建立第二個對應,導致同一位使用者被分叉成多個,且無法合併。若你發現自己每次操作都在產生新值,你要的是 idempotency key,而不是 external reference ID。

規則


指派方式

標準 OAuth 應用程式

在引導使用者前往同意頁的授權 URL 上附加 external_id(參見 Client-facing OAuth grant flow):
當使用者完成授權後,Fluz 會把 usr_8f3d2a91 記錄到該使用者對你應用程式的授權上。 此步驟是可選,但強烈建議。若你之後才導入,將需要逐一讓使用者重新授權以回填。

Widget 應用程式

必填。 所有 widget 應用類型——存入(deposit)、撥款(payout)、收款(pay-in)、虛擬卡、禮品卡目錄、繳費(bill pay)、以及外部撥款(external payout)——都需要 external reference ID 才能建立使用者工作階段。若未提供,請求會被拒絕:
對於 widgets,此值會作為簽署之預先核准交易權杖中的 externalId claim 傳遞,與金額與交易類型並列。你必須在伺服器端產生;這不是前端初始化選項。請參見 Set Up Your Server
externalIdjti 在同一個權杖中但回答不同的問題。externalId 是_哪位使用者_——在使用者生命週期中保持穩定。jti 是_哪一筆交易_——每次都不同。重用 jti 會破壞冪等性;更改 externalId 則會把你的使用者分叉。

使用方式

指定轉帳目的地

在建立轉到另一個 Fluz 帳戶的錢包轉帳時(參見 Transfer to Another Fluz Wallet),可用你自己的 ID 來標示目的地,而不是 Fluz 帳戶 ID:
請提供 destination.accountIddestination.externalReferenceId 二擇一——切勿同時提供。目的地使用者必須已授權你的應用程式,否則轉帳會被拒絕。

對應 webhook 事件到你的使用者

Webhook 載荷會攜帶 externalReferenceId,因此你能在沒有對照表的情況下路由事件:
請處理該欄位可能缺席的情況。當使用者的授權沒有關聯到 external reference ID,或當事件被標記為私有時,externalReferenceId 會被省略。若你的處理程式假設此欄位一定存在,將會在這些投遞上發生例外——而會拋錯的 webhook 處理程式,等同於你沒有處理該 webhook。
Webhook 設定請見 Configure App Widget

取得以使用者為範圍的權杖

generateUserAccessToken接受 externalReferenceId——它以 userIdaccountId 來識別使用者(參見 Generate a User Access Token)。 對於你以自家 ID 來引用的使用者,請改用 OAuth 流程。該授權已帶有你的識別碼,而你在 /token/exchange 用授權碼交換得到的權杖,會以該使用者為對象簽發且內嵌此關聯。請見 Exchange an OAuth Authorization Code

端對端

一位使用者,一個識別碼,四個介面。
1

你的系統已經認得這個人

你資料庫中的使用者 usr_8f3d2a91 點擊 Connect Fluz
2

在同意時指派

你以 external_id=usr_8f3d2a91 重導向至 /authorize。他們登入、必要時完成驗證,並核准你的 scopes。Fluz 將 usr_8f3d2a91 綁定到他們的帳戶,且僅限於你的應用程式。
3

交換

你的回呼把 code 交換成 accessTokenrefreshToken。此關聯已被內嵌,故能在之後每次重新整理時持續存在。你將權杖儲存到 usr_8f3d2a91 名下——你的資料結構中不需要 Fluz 的 UUID。
4

操作

你以 destination: { externalReferenceId: "usr_8f3d2a91" } 向他們支付,使用你自家的 ID 作為地址。
5

對賬

完成通知的 webhook 會攜帶 externalReferenceId: "usr_8f3d2a91"。你直接將其路由到該使用者紀錄並標記撥款已結清。無需 join、無需對照、無需快取。

生命週期

回填既有授權

若某位使用者在你導入 external reference ID 之前就已授權你的應用程式,你可在之後的再次授權時提供一個,Fluz 會將其回填到既有授權——前提是該授權尚未有此值。既有值永不覆寫。

以不同值重新授權

因為既有值永不覆寫,對於已經有值的使用者再次傳入_不同的_ external_id 並不會改變對應。請將第一次設定視為永久。若你的使用者 ID 不穩定,請為 Fluz 產生一個專用且不可變的 ID,而不是重用可能會遷移的值。

你方刪除使用者

永遠不要重複使用識別碼。若你將使用者永久刪除,後續又把同一個主鍵重發給不同的人,新的那個人會繼承舊的對應——以及舊使用者的 Fluz 帳戶。請使用 UUID,或是永不重設的單調遞增序列。

驗證規則與錯誤

疑難排解


external reference ID 不是什麼

  • 不是 Fluz 的 userIdaccountId。那些是 Fluz 簽發的 UUID;這個則是由你簽發。
  • 不是 idempotency key。那是 API 呼叫中的 idempotencyKey 與 widget 權杖中的 jti,且是每次操作唯一。external reference ID 則是每個人唯一。
  • 不是 OAuth 流程中的 state 參數。state 是每次授權嘗試的 CSRF 防護,且不會被儲存。
  • 不是 出現在提領紀錄或已連結資金來源上的外部帳戶識別碼。那些是銀行與處理器紀錄的識別碼,而非使用者。

後續步驟

授權流程

在這裡為 OAuth 應用程式指派識別碼。

設定你的伺服器

在這裡為 widget 應用程式指派識別碼。

轉帳到另一個 Fluz 錢包

以你自家 ID 指定轉帳目的地。

設定應用程式 webhooks

接收會回傳該識別碼的事件。