【问题标题】:shopify webhooks not firing in productionshopify webhook 没有在生产中触发
【发布时间】:2018-03-20 14:49:15
【问题描述】:

我使用 shopify-api-node 包制作了一个私有应用程序,该应用程序在使用 ngrok 的本地开发中运行完美。 我注册了一个运行良好的网络挂钩“产品/更新”。

本地注册网址:https://example.ngrok.io/webhooks/product-update

但是在生产环境中注册了同一个 webhook,webhook 没有被触发

生产中的注册网址:https://custom.example.in/webhooks/product-update

当本地服务器和生产服务器都在运行时,webhook 只会被触发到本地服务器(通过 ngrok 隧道)。

我在生产中使用 nginx 作为反向代理。我检查了 nginx 的 access.log 文件,但 shopify 没有触发 webhook 请求。我尝试创建一个新的私有应用,但没有任何帮助。

可能的问题是什么?提前致谢。

【问题讨论】:

  • 您是否在生产中使用有效的 SSL 证书?

标签: node.js shopify webhooks shopify-app


【解决方案1】:

一些常见的问题是:

  • 无效的 SSL 证书,例如一种是自签名的,一种是缺少中间证书的。您可以使用https://www.ssllabs.com/ssltest/ 检查问题
  • 您的服务器或应用程序未配置为接受POST 请求,而是仅接受其他方法。在命令行中,您可以通过使用 curl 向您的 webhook 端点发出 POST 请求来检查这一点。
  • 您的应用已实现 webhook 验证逻辑,您正在尝试使用开发应用密码验证生产 webhook。
  • 您创建的 webhook 已被取消,因为 Shopify 没有足够快地收到 200 状态响应。您可以使用 Webhooks API 列出 Webhook 并验证您的 Webhook 是否仍处于注册状态。

【讨论】:

  • 你是对的,ca-bundle 丢失了。我不认为shopify会做这样的事情。谢谢。
【解决方案2】:

您需要提供更多信息。你怎么知道生产中的 webhook 没有触发?您是否证明了当您创建 webhook 时,它本身就被创建了?检查时 webhook 对象是什么样子的?一切都好吗?

如果 webhook 存在,并且对象看起来都不错,那么接下来要调查的是您的公共生产服务器。

99/100 webhook 问题不是 Shopify,而是开发人员做错了什么。在你问问题之前确保你做的一切都是正确的!

【讨论】:

  • 我通过列出所有已注册的 webhook 进行了检查。看起来一切都很好。问题是 ssl 配置。 ca-bundle 文件丢失。
【解决方案3】:

确保您已使用 certificate.crtprivate.key 设置 next.js 服务器的 SSL 和 ca_bundle.crt

例子:

var options = {
    key: fs.readFileSync(__dirname + "/../certificates/server.key"),
    cert: fs.readFileSync(__dirname + "/../certificates/server.crt"),
    ca: fs.readFileSync(__dirname + "/../certificates/ca_bundle.crt"),
  }; 

  http.createServer(server.callback()).listen(8081);
  https.createServer(options, server.callback()).listen(443);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多