您店面中已登录的客户
仅允许已登录的客户通过您商店的域名调用 Webhook,禁用直接 URL,并在 Shopify Flow 中获取经过验证的客户 ID。
从您自己的店面调用 Webhook,并了解是哪位客户发起的。 批发订单表单、B2B 账户页面上的“重新订购”按钮,或是面向已登录客户的请求表单,均可触发 Shopify Flow 工作流程,且该工作流程会接收当前登录客户的 ID。Shopify 会对该 ID 进行签名,因此任何人都无法冒充其他客户。
这是在应用代理 URL 的基础上实现的,请参阅 CORS、应用代理 URL 和浏览器调用。
设置它
- 打开 Webhook,然后转到**“高级设置**”。
- 在**“URL 设置**”下,开启“使用应用代理 URL”选项。现在,Webhook URL 位于您商店的域名下,例如
https://your-store.com/apps/webhooks/abc123。 - 在**“谁可以调用此 Webhook”**中,请从以下三个选项中选择一个:
| 选项 | 应用代理 URL | 应用直接链接 |
|---|---|---|
| 任何拥有该网址的人 | 对每个人都有效 | 作品 |
| 仅通过您商店的域名 | 对所有人有效,包括访客在内 | 因403错误被拒绝 |
| 仅限已登录您商店的客户 | 仅限已登录的客户使用,访客将收到401错误 | 因403错误被拒绝 |
- 保存。该设置将应用于下一次请求。

该应用会检查什么
通过应用代理 URL 发出的每个请求都带有来自 Shopify 的签名。应用会按以下顺序进行验证:
- **签名。**如果请求中缺少有效的 Shopify 签名,系统将返回 401 错误并拒绝该请求。由于 Shopify 是使用您应用的密钥生成该签名的,因此任何人都无法伪造它。
- **您的商店。**针对另一家商店发起的请求因403错误被拒绝。
- **已登录的客户。**当_仅允许已登录的客户访问您的商店时_,未包含已登录客户信息的请求将被以 401 状态码(
customer_login_required)拒绝。客户 ID 来自签名,绝不会来自请求正文。 - **直接访问的 URL。**无论采用哪种限制,直接访问应用的 URL 都会返回 403 错误(
proxy_required),因此没有人能绕过这些检查。
被拒绝的请求永远不会到达 Shopify Flow,也不会计入您的套餐配额。
Shopify Flow 接收的内容
“Webhook 触发器”和“同步 Webhook 触发器”包含一个字段 customerId:这是已登录客户的数字 ID,例如 7350001。对于访客以及所有未通过应用代理 URL 发起的请求,该字段为空。您映射的字段将照常传入,请参阅 负载映射和流变量。
从您的店面拨打该电话
该请求必须在客户登录状态下从您商店的某个页面发起,以便通过您商店的域名进行传输。请从应用中复制 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。
- 当客户要求删除其数据时,其发送的历史记录条目将被删除。
