Cet article utilise certains événements qui se produisent dans la boutique Shopify pour fonctionner avec des applications personnalisées créées avec des rails. Je vais parler des paramètres du webhook. Afin de recevoir des notifications de webhook, vous pouvez également définir manuellement depuis Paramètres → Notifications sur l'écran de gestion, mais il n'est pas possible de le mettre dans l'écran de gestion de tous les magasins qui ont fait l'application, pour ceux qui veulent l'exploiter comme une application publique De plus, cette fois, nous ne procéderons pas à des réglages à partir de l'écran de gestion.
Ruby 2.6.6 Rails 6.0.2
shopify_app.rb
ShopifyApp.configure do |config|
...
config.scope = "read_products, read_orders"
]
...
end
Spécifiez ce qui suit sur la ligne de commande en supposant que gem'shopify_app ' est installé.
rails g shopify_app:add_webhook -t orders/create -a https://example.com/webhooks/orders_create
Après cela, les éléments suivants seront ajoutés à shopify_app.rb
ShopifyApp.configure do |config|
...
config.webhooks = [
{topic: 'orders/create', address: 'https://example.com/webhooks/orders_create'},
]
...
end
Créer une tâche avec chaque webhook 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
#Ajoutez la fonction que vous souhaitez implémenter ici
end
end
end
Si vous utilisez une bibliothèque qui effectue un traitement asynchrone tel que sidekiq, le travail ci-dessus sera traité en arrière-plan.
Il n'y a pas de problème même si cette partie n'est pas incluse, mais elle sera décrite car elle est nécessaire lorsque des fonctions au-delà de ce qui est fait par travail via le webhook sont requises. 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
--Créez la méthode requise
def orders_create
params.permit!
OrdersCreateJob.perform_later(shop_domain: shop_domain, webhook: webhook_params.to_h)
head :no_content
end
Après avoir effectué un appel POST via un webhook, vous devez renvoyer un statut de série 200 du côté Shopify. (Selon la Documentation officielle, si vous renvoyez une réponse autre que 200 OK, il effectuera 19 appels dans les 48 heures) En définissant head: no_content, la réponse est "204 no content" = aucune donnée ne répond = il est jugé que les données du webhook ont été reçues.
Même si la notification du webhook était d'abord définie sur l'écran de gestion, elle ne semblait même pas faire de requête http à moins que l'accès requis à l'étendue ne soit autorisé sur la configuration. Si votre application est déjà installée dans le magasin, veuillez vous assurer que l'autorisation d'étendue est accordée sur l'écran ci-dessous lorsque l'application est réinstallée avec cet ajout d'étendue.
Si vous souhaitez vérifier si le webhook est défini sur le magasin
header
Content-Type: application/json
X-Shopify-Access-Token:Boutique applicable.shopify_token
GET https://Nom du magasin.myshopify.com/admin/api/2020-07/webhooks.json
Vous pouvez également vérifier avec.
Recommended Posts