配置您店面中已登录的客户

您店面中已登录的客户

复制页面

仅允许已登录的客户通过您商店的域名调用 Webhook,禁用直接 URL,并在 Shopify Flow 中获取经过验证的客户 ID。

从您自己的店面调用 Webhook,并了解是哪位客户发起的。 批发订单表单、B2B 账户页面上的“重新订购”按钮,或是面向已登录客户的请求表单,均可触发 Shopify Flow 工作流程,且该工作流程会接收当前登录客户的 ID。Shopify 会对该 ID 进行签名,因此任何人都无法冒充其他客户。

这是在应用代理 URL 的基础上实现的,请参阅 CORS、应用代理 URL 和浏览器调用。

设置它

  1. 打开 Webhook,然后转到**“高级设置**”。
  2. 在**“URL 设置**”下,开启“使用应用代理 URL”选项。现在,Webhook URL 位于您商店的域名下,例如 https://your-store.com/apps/webhooks/abc123。
  3. 在**“谁可以调用此 Webhook”**中,请从以下三个选项中选择一个:
选项 应用代理 URL 应用直接链接
任何拥有该网址的人 对每个人都有效 作品
仅通过您商店的域名 对所有人有效,包括访客在内 因403错误被拒绝
仅限已登录您商店的客户 仅限已登录的客户使用,访客将收到401错误 因403错误被拒绝
  1. 保存。该设置将应用于下一次请求。
“高级设置”中的“URL 设置”:已启用“使用应用代理 URL”选项,且“谁可以调用此 Webhook”设置为“仅限已登录您商店的客户”
该设置位于“高级设置”>“URL 设置”下,就在“应用代理 URL”开关的正下方。

该应用会检查什么

通过应用代理 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 可以读取有关客户的所有信息,因此该检查应纳入工作流程中:

  1. **触发器:**来自Workflow Webhooks的 Webhook 触发器。如果您有多个 Webhook,请添加一个条件:Webhook ID 等于应用中显示的 ID。
  2. 使用查询 id:{{customerId}} 获取客户数据。Shopify Flow 会加载已登录的客户信息,包括标签和公司角色。
  3. **条件:**客户具有wholesale标签,且其某家公司联系人资料中存在一个角色分配,该角色分配的公司地点 ID 等于fieldOne,且角色为Ordering only或Location admin。
  4. **如果是这种情况:**请执行相应操作,例如为该地点创建一份订单草稿。**否则:**停止操作,或者通过 同步响应 向前面店面返回响应,以便页面能向客户说明原因。

值得了解

  • 应用代理 URL 需要您的店面能够被访问。对于受密码保护的店面,只有在输入店面密码后,该代理才会做出响应。
  • 访客会收到 401 错误提示,因此请在该页面上显示登录链接。
  • “历史记录”中显示了每个请求的客户ID,而“重放”操作会再次发送该ID。
  • 当客户要求删除其数据时,其发送的历史记录条目将被删除。