Shopify 支付与收款

Shopify 第三方网关回调验签失败怎么查

现象#

第三方网关回调到自己的 endpoint 后返回 401 或 400,网关后台的 webhook 日志显示失败并持续重试,Shopify 订单一直停在 pending。

原因#

  • 签名基于原始请求体计算,框架先反序列化 JSON 再验签,字节已变导致签名必然不符
  • 密钥用错,测试环境与生产环境的 endpoint secret 不是同一个
  • 签名带时间戳,超出容差窗口后即使内容正确也会被判无效
  • 回调地址被 301 跳到 https 或补了尾斜杠,重定向后 POST body 丢失

处理步骤#

  1. 在路由里保留 request.raw_body,用原始字节验签
  2. 按文档拼接 Stripe-Signature 的 t 与 v1 再比对
  3. 确认使用的是该 endpoint 的 secret,测试与生产分开配置
  4. 校验时间戳与当前时间差在 5 分钟内,超出直接拒绝
  5. 用网关后台的 Resend 重放,确认返回 200 且只处理一次

验收标准#

网关 webhook 日志显示 200,Shopify 订单状态变为 Paid,且 Payments 区只有一条交易记录。

本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。