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.
Ruby 2.6.6 Rails 6.0.2
shopify_app.rb
ShopifyApp.configure do |config|
...
config.scope = "read_products, read_orders"
]
...
end
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
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.
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.
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.
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