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

Shopify Webhook无Body接收问题求助(Express模板)

解决Shopify Webhook处理时"No body was received"错误

问题根源

Shopify的shopify.processWebhooks依赖**原始请求Body(Buffer格式)**完成签名验证,若你的Express应用提前通过全局中间件(如express.json()、express.urlencoded())将Body解析为JSON对象或字符串,会导致官方库无法获取到原始Buffer,从而抛出"No body was received"错误。

解决方案

方案1:为Webhook路由单独配置原始Body解析

将Webhook路由与全局Body解析中间件隔离,单独使用express.raw()处理该路由的请求:

// 避免全局使用express.json()/express.urlencoded()处理所有POST请求,或把此路由放在全局解析中间件之前
app.post(
  shopify.config.webhooks.path,
  express.raw({ type: 'application/json' }), // 获取原始JSON Buffer
  shopify.processWebhooks({ webhookHandlers: GDPRWebhookHandlers })
);

方案2:全局解析时保留原始Body

若必须全局使用express.json(),可通过verify钩子将原始Buffer存到请求对象中,供Shopify库读取:

app.use(express.json({
  verify: (req, res, buf) => {
    // 存储原始Buffer到req.rawBody
    req.rawBody = buf;
  }
}));

app.post(
  shopify.config.webhooks.path,
  shopify.processWebhooks({ webhookHandlers: GDPRWebhookHandlers })
);

额外检查项

  • 确认Webhook订阅的secret与Shopify配置中的API_SECRET_KEY完全一致,签名验证失败也可能触发类似错误。
  • 用日志打印req.rawBody(方案2)或直接查看请求内容,确认Shopify的Webhook请求确实到达了目标路由且带有Body。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:10:01