您商店頁面中已登入的顧客
僅允許已登入的顧客透過您的商店網域呼叫 Webhook,停用直接網址,並在 Shopify Flow 中取得已驗證的顧客 ID。
從您自己的商店前端呼叫 Webhook,並了解是哪位顧客發送的。 無論是批發訂單表單、B2B 帳戶頁面上的「重新訂購」按鈕,還是已登入客戶的請求表單,皆可觸發 Shopify Flow 工作流程,而該工作流程會接收當前登入客戶的 ID。Shopify 會對該 ID 進行簽名驗證,因此無人能冒充其他客戶。
此內容基於應用程式代理伺服器的 URL,請參閱 CORS、應用程式代理伺服器網址與瀏覽器呼叫。
設定它
- 開啟 Webhook,並前往「進階設定」。
- 在「URL 設定」中,開啟「使用應用程式代理 URL」選項。現在,Webhook URL 將位於您的商店網域下,例如
https://your-store.com/apps/webhooks/abc123。 - 在「誰可以呼叫此 webhook」中,請從以下三個選項中選擇一個:
| 選項 | 應用程式代理伺服器網址 | 應用程式直接連結 |
|---|---|---|
| 任何擁有該網址的人 | 適用於所有人 | 作品 |
| 僅限透過貴店的網域 | 適用於所有人,包括訪客在內 | 因 403 錯誤而遭拒絕 |
| 僅限已登入您商店的顧客 | 此功能僅適用於已登入的客戶,訪客將收到 401 錯誤 | 因 403 錯誤而遭拒絕 |
- 儲存。此設定將套用至下一次請求。

該應用程式會檢查什麼
透過應用程式代理伺服器 URL 發送的每項請求,都會附帶來自 Shopify 的簽名。應用程式會依以下順序進行驗證:
- **簽名。**若請求中缺少有效的 Shopify 簽名,系統將以 401 狀態碼拒絕該請求。由於 Shopify 是根據您的應用程式密鑰生成此簽名,因此無人能偽造它。
- **您的商店。**針對其他商店簽署的請求將因 403 錯誤而被拒絕。
- 已登入的客戶。若您的商店僅限已登入的客戶使用,則未包含已登入客戶的請求將因 401 錯誤(
customer_login_required)而被拒絕。客戶 ID 來自簽名,絕不會來自請求正文。 - **直接網址。**無論採用哪種限制,直接存取應用程式的網址都會返回 403 錯誤(
proxy_required),因此無人能繞過這些檢查。
遭拒絕的請求永遠不會傳送到 Shopify Flow,也不會計入您的方案配額。
Shopify Flow 接收的內容
「Webhook 觸發器」和「同步 Webhook 觸發器」皆包含一個名為 customerId 的欄位:這是已登入客戶的數值 ID,例如 7350001。對於訪客,以及所有未透過應用程式代理 URL 傳入的請求,此欄位將為空。您所映射的欄位將如常傳入,詳見 有效載荷映射與 Shopify Flow 變數。
請從您的店面致電
此請求必須在客戶已登入的狀態下,從您商店的某個頁面發出,以便透過您商店的網域傳送。請從應用程式中複製 webhook URL:Shopify 允許您變更代理路徑,因此您的路徑可能與範例不同。此程式碼片段置於主題區段中,用於傳送 B2B 客戶所購買商品的公司所在地:
sections/wholesale-request.liquidhtml
<script>
fetch('/apps/webhooks/abc123', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
companyLocationId: 'gid://shopify/CompanyLocation/{{ customer.current_location.id }}'
})
})
</script>將欄位 1 映射至 companyLocationId,以便工作流程能將該位置作為 fieldOne 接收。
在 Shopify Flow 中為客戶辦理入住手續
Shopify Flow 可以讀取關於客戶的所有資訊,因此這項檢查應納入工作流程中:
- **觸發器:**來自「Workflow Webhooks」的 Webhook 觸發器。如果您有多個 Webhook,請新增一個條件:Webhook ID 必須與應用程式中顯示的 ID 相同。
- 使用查詢
id:{{customerId}}取得客戶資料。Shopify Flow 會載入已登入的客戶,包括標籤和公司角色。 - **條件:**客戶具有
wholesale標籤,且其其中一個公司聯絡人檔案具有角色指派,該角色指派的公司地點 ID 等於fieldOne,且角色為Ordering only或Location admin。 - **若屬此情況:**請執行相關操作,例如為該地點建立訂單草稿。**否則:**停止操作,或透過 同步響應 向前端傳回回應,以便頁面能向顧客說明原因。
值得了解
- 應用程式代理伺服器的 URL 需要您的商店前端可被存取。若為受密碼保護的商店,則僅在輸入商店前端密碼後才會回應。
- 訪客會收到 401 錯誤訊息,因此請在該頁面顯示登入連結。
- 「歷史紀錄」會顯示每個請求的客戶 ID,而「重播」功能則會再次傳送該 ID。
- 當客戶要求刪除其資料時,其所傳送的歷史紀錄將被刪除。
