You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Shopify客户端Webhook集成:如何区分不同客户端的通知?

区分多Shopify客户端Webhook通知的解决方案

刚好做过类似的多Shopify店铺集成项目,你的问题其实很好解决——Shopify在每个Webhook推送的 payload 里自带了明确的店铺唯一标识符,同时结合签名验证机制,完全可以精准区分不同客户端的通知。

核心区分依据:Shopify自带的唯一标识字段

每个Webhook请求的payload里都会包含两个关键的全局唯一字段:

  • shop_domain:店铺的专属域名(比如your-client-store.myshopify.com),这是最直观的唯一标识,每个Shopify店铺的域名都是独一无二的。
  • shop_id:Shopify系统给每个店铺分配的数字ID,同样是全局唯一的。

你可以优先用shop_domain来做区分,因为它更容易和你的客户端信息做映射(比如你的客户可能直接给你提供他们的店铺域名)。

具体实现步骤

  1. 提前建立映射关系
    在你的后端数据库里存储每个客户端的关联信息:

    • 你的系统内的客户端ID/标识
    • 对应的Shopify店铺域名(shop_domain)
    • 该店铺的Webhook签名密钥(每个店铺的密钥都是独立的,需要客户从他们的Shopify后台生成并提供给你)
  2. 接收Webhook时的区分逻辑
    当你的端点收到Shopify的Webhook请求:

    • 先从payload中提取shop_domain字段(比如订单Webhook的顶层就有这个字段,客户创建的Webhook同理)
    • 用shop_domain查询你的数据库,匹配到对应的客户端
    • 拿到该客户端的签名密钥,按照Shopify的规则验证Webhook签名(这一步很重要,既能确保请求合法,也能再次确认对应的客户端身份)
  3. 签名验证示例(伪代码)
    验证签名的逻辑大致如下,你可以根据自己的后端语言调整:

    import hmac
    import hashlib
    import base64
    
    def verify_shopify_webhook(request_body, webhook_headers, client_secret):
        hmac_header = webhook_headers.get('X-Shopify-Hmac-Sha256')
        digest = hmac.new(client_secret.encode('utf-8'), request_body, hashlib.sha256).digest()
        computed_hmac = base64.b64encode(digest).decode('utf-8')
        return hmac.compare_digest(computed_hmac, hmac_header)
    

    只有验证通过的请求,才继续处理对应的业务逻辑(比如把订单关联到匹配的客户端)。

额外注意事项

  • 不要依赖store_name这类字段,因为店铺名称可能重复,而shop_domain和shop_id是绝对唯一的。
  • 建议同时存储shop_domain和shop_id作为双重校验,避免极端情况下的域名变更(虽然Shopify店铺域名变更需要重新配置Webhook,但多一层校验更稳妥)。
  • 处理Webhook时要做好幂等性,因为Shopify可能会重复推送通知,避免重复处理同一订单/客户数据。

内容的提问来源于stack exchange,提问作者user826323

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:33:07