feat: add Printify webhook endpoint for real-time product updates
- Add /webhooks/printify endpoint with HMAC-SHA256 signature verification - Add Webhooks context to handle product:updated, product:deleted events - Add ProductDeleteWorker for async product deletion - Add webhook API methods to Printify client (create, list, delete) - Add register_webhooks/2 to Printify provider - Add mix register_webhooks task for one-time webhook registration - Cache raw request body in endpoint for signature verification Usage: 1. Generate webhook secret: openssl rand -hex 20 2. Add to provider connection config as "webhook_secret" 3. Register with Printify: mix register_webhooks https://yourshop.com/webhooks/printify Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -183,6 +183,41 @@ defmodule SimpleshopTheme.Clients.Printify do
|
||||
get("/shops/#{shop_id}/orders/#{order_id}.json")
|
||||
end
|
||||
|
||||
# =============================================================================
|
||||
# Webhooks
|
||||
# =============================================================================
|
||||
|
||||
@doc """
|
||||
Register a webhook with Printify.
|
||||
|
||||
## Event types
|
||||
- "product:publish:started"
|
||||
- "product:updated"
|
||||
- "product:deleted"
|
||||
- "shop:disconnected"
|
||||
"""
|
||||
def create_webhook(shop_id, url, topic, secret) do
|
||||
post("/shops/#{shop_id}/webhooks.json", %{
|
||||
topic: topic,
|
||||
url: url,
|
||||
secret: secret
|
||||
})
|
||||
end
|
||||
|
||||
@doc """
|
||||
List registered webhooks for a shop.
|
||||
"""
|
||||
def list_webhooks(shop_id) do
|
||||
get("/shops/#{shop_id}/webhooks.json")
|
||||
end
|
||||
|
||||
@doc """
|
||||
Delete a webhook.
|
||||
"""
|
||||
def delete_webhook(shop_id, webhook_id) do
|
||||
delete("/shops/#{shop_id}/webhooks/#{webhook_id}.json")
|
||||
end
|
||||
|
||||
@doc """
|
||||
Download a file from a URL to a local path.
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user