使用 Rake 在 Shopify 中创建 webhook

Use Rake to create webhooks in Shopify

目前,如果我 add/remove 我的应用程序中的 webhook 要反映在 shopify 应用程序中,用户必须重新安装该应用程序。我需要一种避免这种情况的方法,所以我想我会使用 rake。

为此,我使用 Rails ShopifyAPP。我的应用使用 Rails 5.

config/application.rb:

...

config.after_initialize do
  Rails.application.load_tasks
  Rake::Task['shopifyapp:shopify_webhooks'].invoke
end

...

lib/tasks/shopify_webhooks.rake:

namespace :shopifyapp  do
  desc "create webhooks in shopify"
  task :shopify_webhooks do
    ShopifyApp.configure do |config|
      config.webhooks = [
        {topic: 'carts/update', address: 'https://some-external-address', format: 'json'},        
      ]
    end
    puts "works" # outputs when server restarts
  end
end

我的第六感告诉我 rake 文件有问题。我错过了什么吗?有什么问题? Webhook 未创建。

如果我在 config/initializers/shopify_app.rb 中添加一个新的 webhook,它只有在重新安装应用程序时才会起作用。

由于您拥有商店的有效身份验证令牌,因此在您的 rake 任务中只需连接到商店,并使用 API 创建 webhook。这很容易做到。

ShopifyAPI::Base.activate_session(ShopifyAPI::Session.new(shop,token))
ShopifyAPI::Webhook.create(topic: 'orders/paid', address: 'https:foo', format: 'json')

我认为这更符合如何使用 rake,而不是尝试在 rake 任务中模仿 Rails。

@David Lazar 是正确的,但对于像我这样的菜鸟来说不是那么清楚。我希望所有连接的商店都获得更新我需要先从数据库中获取所有连接的商店:

namespace :shopifyapp  do
  desc "create webhooks in shopify"
  task :shopify_webhooks do
    Shop.all.each do |s|
      domain = s.shopify_domain
      token = s.shopify_token

      ShopifyAPI::Base.activate_session(ShopifyAPI::Session.new(domain, token))
      ShopifyAPI::Webhook.create(
        topic: 'carts/update',address: 'https://foo ...,
      )
    end
  end
end

现在我可以 运行 从控制台或服务器重新启动时执行 rake 任务!好的。如果我有成千上万的用户(商店),则不确定性能。