[RUBY] Richten Sie einen Webhook in der benutzerdefinierten App von Shopify ein

Einführung

In diesem Artikel werden bestimmte Ereignisse verwendet, die im Shopify-Store auftreten, um mit benutzerdefinierten Apps zu arbeiten, die in Rails erstellt wurden Ich werde über die Einstellungen des Webhooks sprechen. Um Webhook-Benachrichtigungen zu erhalten, können Sie diese auch manuell über Einstellungen → Benachrichtigungen auf dem Verwaltungsbildschirm festlegen. Es ist jedoch nicht möglich, sie in den Verwaltungsbildschirm aller Geschäfte einzufügen, in denen die Anwendung erstellt wurde, für diejenigen, die sie als öffentliche Anwendung betreiben möchten Außerdem nehmen wir diesmal keine Einstellungen über den Verwaltungsbildschirm vor.

Umgebung

Ruby 2.6.6 Rails 6.0.2

1. Konfigurieren Sie den erforderlichen Zugriffsbereich

shopify_app.rb

ShopifyApp.configure do |config|
  ...
  config.scope = "read_products, read_orders" 
  ]
  ...
end

2. Geben Sie den Webhook an, über den Sie benachrichtigt werden möchten, und die URL des Anforderungsziels

Geben Sie in der Befehlszeile Folgendes an, vorausgesetzt, gem'shopify_app ' ist installiert.

rails g shopify_app:add_webhook -t orders/create -a https://example.com/webhooks/orders_create

Danach wird das Folgende zu shopify_app.rb hinzugefügt

ShopifyApp.configure do |config|
  ...
  config.webhooks = [
    {topic: 'orders/create', address: 'https://example.com/webhooks/orders_create'},
  ]
  ...
end

3. Jobeinstellungen

Erstellen Sie mit jedem Webhook einen Job app/jobs/orders_create_job.rb

class OrdersCreateJob < ActiveJob::Base
  def perform(shop_domain:, webhook:)
    shop = Shop.find_by(shopify_domain: shop_domain)

    shop.with_shopify_session do
      #Fügen Sie hier die Funktion hinzu, die Sie implementieren möchten
    end
  end
end

Wenn Sie eine Bibliothek verwenden, die eine asynchrone Verarbeitung wie sidekiq ausführt, wird der oben genannte Job im Hintergrund verarbeitet.

4. Erstellen Sie einen benutzerdefinierten Controller für Webhook

Es gibt kein Problem, auch wenn dieser Teil nicht enthalten ist, aber er wird beschrieben, da er erforderlich ist, wenn Funktionen erforderlich sind, die über das hinausgehen, was der Job über den Webhook erledigt. routes.rb

...
post 'webhooks/orders_create', :to => 'custom_webhooks#orders_create'
...

app/controllers/custom_webhooks_controller.rb

class CustomWebhooksController < ApplicationController
  
  def orders_create
  end
  ...

  private

  def webhook_params
    params.except(:controller, :action, :type)
  end

end
class CustomWebhooksController < ApplicationController
  include ShopifyApp::WebhookVerification
  ...
end

--Erstellen Sie die gewünschte Methode

def orders_create
  params.permit!
  OrdersCreateJob.perform_later(shop_domain: shop_domain, webhook: webhook_params.to_h)
  head :no_content
end

Nachdem Sie einen POST-Anruf über einen Webhook getätigt haben, müssen Sie einen 200er-Serienstatus an die Shopify-Seite zurückgeben. (Laut Offizieller Dokumentation werden innerhalb von 48 Stunden 19 Anrufe getätigt, wenn Sie eine andere Antwort als 200 OK zurücksenden.) Durch Setzen von head: no_content lautet die Antwort "204 no content" = keine Daten antworten = es wird beurteilt, dass die Webhook-Daten empfangen wurden.

wichtiger Punkt

Selbst wenn die Webhook-Benachrichtigung zuerst auf dem Verwaltungsbildschirm festgelegt wurde, schien sie nicht einmal eine http-Anfrage zu stellen, es sei denn, der erforderliche Bereichszugriff wurde in der Konfiguration zugelassen. Wenn Ihre App bereits im Store installiert ist, stellen Sie sicher, dass die Berechtigung für den Bereich auf dem folgenden Bildschirm erteilt wird, wenn die App mit dieser Erweiterung des Bereichs neu installiert wird. image.png

Wenn Sie überprüfen möchten, ob der Webhook auf den Store eingestellt ist

header
Content-Type: application/json
X-Shopify-Access-Token:Anwendbarer Shop.shopify_token
GET https://Speichername.myshopify.com/admin/api/2020-07/webhooks.json

Sie können auch mit überprüfen.

Recommended Posts

Richten Sie einen Webhook in der benutzerdefinierten App von Shopify ein
So richten Sie einen Proxy mit Authentifizierung in Feign ein
Richten Sie das Routing vor der Anmeldung in Devise ein
Erstellen Sie eine neue App mit Rails
Erstellen Sie eine TODO-App in Java 7 Create Header
Lassen Sie uns eine Taschenrechner-App mit Java erstellen
Richten Sie eine Java-GUI in einem separaten Thread ein, um die Haupt-GUI beizubehalten
Erstellen Sie mit SwiftUI 2.0 eine benutzerdefinierte Registerkartenansicht
Zeichnen Sie ein Mandelbrot-Set, das mit Processing zu schön ist
Einrichten von Docker Engine in einer Umgebung ohne Internetverbindung
Richten Sie mit Vagrant einen virtuellen Cent OS-Server ein
[Android / Java] Richten Sie eine Schaltfläche ein, um zu Fragment zurückzukehren
[Ruby / Rails] Legen Sie einen eindeutigen (eindeutigen) Wert in der Klasse fest
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
Richten Sie einen Db2-DB-Container ein und fügen Sie ein paar Daten ein