Shopify 第三方网关回调验签失败怎么查
现象#
第三方网关回调到自己的 endpoint 后返回 401 或 400,网关后台的 webhook 日志显示失败并持续重试,Shopify 订单一直停在 pending。
原因#
- 签名基于原始请求体计算,框架先反序列化 JSON 再验签,字节已变导致签名必然不符
- 密钥用错,测试环境与生产环境的 endpoint secret 不是同一个
- 签名带时间戳,超出容差窗口后即使内容正确也会被判无效
- 回调地址被 301 跳到 https 或补了尾斜杠,重定向后 POST body 丢失
处理步骤#
- 在路由里保留
request.raw_body,用原始字节验签 - 按文档拼接
Stripe-Signature的 t 与 v1 再比对 - 确认使用的是该 endpoint 的 secret,测试与生产分开配置
- 校验时间戳与当前时间差在 5 分钟内,超出直接拒绝
- 用网关后台的
Resend重放,确认返回 200 且只处理一次
验收标准#
网关 webhook 日志显示 200,Shopify 订单状态变为 Paid,且 Payments 区只有一条交易记录。
本文由 风格技术 技术团队整理,适用于 Shopify 标准版与 Plus 店铺。Shopify 平台能力迭代较快,具体操作路径与字段以官方文档和店铺后台实际版本为准。