aerni / snipcart-webhooks
Receive and work with Snipcart webhooks in Laravel
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.5
- laravel/framework: ^10.0
Requires (Dev)
- nunomaduro/collision: ^7.0
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
README
This package makes it super easy to setup and work with Snipcart webhooks in your Laravel application.
Installation
Install the package using Composer.
composer require aerni/snipcart-webhooks
Set your Snipcart Live Secret
and Test Secret
in your .env
. You can find them in your Snipcart Dashboard.
SNIPCART_LIVE_SECRET=******************************** SNIPCART_TEST_SECRET=********************************
You may also publish the config of the package.
php artisan vendor:publish --provider="Aerni\SnipcartWebhooks\SnipcartWebhooksServiceProvider"
The following config will be published to config/snipcart-webhooks.php
.
return [ /* |-------------------------------------------------------------------------- | Snipcart API Keys |-------------------------------------------------------------------------- | | Your secret Snipcart API Keys for the Live and Test Environment. | */ 'live_secret' => env('SNIPCART_LIVE_SECRET'), 'test_secret' => env('SNIPCART_TEST_SECRET'), /* |-------------------------------------------------------------------------- | Test Mode |-------------------------------------------------------------------------- | | Set this to 'false' to authenticate using the 'live_secret'. | You probably want to do this in production only. | */ 'test_mode' => env('SNIPCART_TEST_MODE', true), ];
Basic Usage
- Register a webhook receiving route
- Create Event Listeners or Subscribers to listen for Snipcart Events.
Routing
Go to your Snipcart Dashboard and configure the URL where you want to receive the webhook requests. Register that route in routes/web.php
using the provided Route::snipcart
macro.
Route::snipcart('webhook-receiving-url');
This will register a POST
route to a controller provided by this package. The route will be registered without the VerifyCsrfToken
middleware, because Snipcart has no way of getting a csrf-token.
Events & Listeners
Each incoming Snipcart webhook request will trigger its corresponding Laravel Event. Create and register one or more Event Listeners or Subscribers and do your magic.
Overview
OrderCompleted
Aerni\SnipcartWebhooks\Events\OrderCompleted
Dispatched whenever a new order is completed.
public function handle(OrderCompleted $payload) { $payload; }
OrderStatusChanged
Aerni\SnipcartWebhooks\Events\OrderStatusChanged
Dispatched whenever the status of an order changes.
public function handle(OrderStatusChanged $payload) { $payload; }
OrderPaymentStatusChanged
Aerni\SnipcartWebhooks\Events\OrderPaymentStatusChanged
Dispatched whenever the payment status of an order changes.
public function handle(OrderPaymentStatusChanged $payload) { $payload; }
OrderTrackingNumberChanged
Aerni\SnipcartWebhooks\Events\OrderTrackingNumberChanged
Dispatched whenever the tracking number of an order changes.
public function handle(OrderTrackingNumberChanged $payload) { $payload; }
OrderRefundCreated
Aerni\SnipcartWebhooks\Events\OrderRefundCreated
Dispatched whenever an order is refunded.
public function handle(OrderRefundCreated $payload) { $payload; }
OrderNotificationCreated
Aerni\SnipcartWebhooks\Events\OrderNotificationCreated
Dispatched whenever a notification is added to an order.
public function handle(OrderNotificationCreated $payload) { $payload; }
SubscriptionCreated
Aerni\SnipcartWebhooks\Events\SubscriptionCreated
Dispatched whenever a new subscription is created.
public function handle(SubscriptionCreated $payload) { $payload; }
SubscriptionCancelled
Aerni\SnipcartWebhooks\Events\SubscriptionCancelled
Dispatched whenever a subscription is cancelled.
public function handle(SubscriptionCancelled $payload) { $payload; }
SubscriptionPaused
Aerni\SnipcartWebhooks\Events\SubscriptionPaused
Dispatched whenever a subscription is paused.
public function handle(SubscriptionPaused $payload) { $payload; }
SubscriptionResumed
Aerni\SnipcartWebhooks\Events\SubscriptionResumed
Dispatched whenever a subscription is resumed.
public function handle(SubscriptionResumed $payload) { $payload; }
SubscriptionInvoiceCreated
Aerni\SnipcartWebhooks\Events\SubscriptionInvoiceCreated
Dispatched whenever a new invoice is added to an existing subscription.
public function handle(SubscriptionInvoiceCreated $payload) { $payload; }
InvalidSignature
Aerni\SnipcartWebhooks\Events\InvalidSignature
Dispatched whenever the signature of the webhook request is invalid.
public function handle(InvalidSignature $request) { $request; }
Tests
Run the tests like this:
vendor/bin/phpunit