Skip to main content
Paddle is a built-in payment processor in Site Store Pro (processor ID 2) supporting one-time payments and subscription billing. Setup requires installing the Paddle PHP SDK, adding your API credentials to .env, and registering a webhook destination in the Paddle Dashboard. Site Store Pro supports both Paddle catalog Price IDs and dynamic non-catalog pricing for discounted or custom amounts.

Setup

Step 1 — Install the SDK

Step 2 — Add Credentials to .env

Step 3 — Activate in Admin

Navigate to Admin → Checkout → Processors, set Paddle as the Primary processor, and toggle Production ON or OFF depending on your environment.

Paddle Dynamic & Subscription Pricing

Paddle pricing is configured per variant in Admin → Product Editor → Prices & Variants.

Catalog Match vs. Non-Catalog Fallback

Site Store Pro automatically decides whether to use a pre-configured Paddle Price ID or create a dynamic price at checkout time.
When it applies: The final checkout price exactly matches the paddle_price field on the variant.What happens: The pre-configured paddle_sandbox_price_id or paddle_live_price_id is passed directly to Paddle. This is the fastest path — no additional API calls are made.
Non-catalog prices are ephemeral — they are created for the specific transaction and are not reused.

Multiple Items & Constraints

  • Multiple items are fully supported in a single Paddle transaction.
  • Interval Uniformity: When a cart contains mixed dynamic subscription items, all items must share the same billing interval and frequency. Mixed intervals (e.g. one monthly + one yearly subscription) are not permitted in a single transaction.

Webhook Registration

1

Register the endpoint in Paddle Dashboard

Go to Paddle Dashboard → Developer Tools → Notifications → New Destination and enter:

How to get the Webhook Secret Key:

  1. In the Paddle Dashboard, go to Developer Tools → Notifications (Webhooks).
  2. Click on … Edit Destination
  3. Look for the section labeled Secret key\
  4. Click the eye icon / Copy secret button.
  5. The key will start with pdl_ntf_set_ or pdl_ntf_. Paste that into your .env.
2

Set the webhook secret in .env

3

Confirm signature verification is working

Paddle sends test notifications from the dashboard. Check storage/logs/laravel.log for any signature errors.

Signature Verification

Site Store Pro verifies every incoming Paddle webhook using the following method:
  1. Parses the Paddle-Signature header in ts=<timestamp>;h1=<hex> format
  2. Computes HMAC-SHA256(key=PADDLE_WEBHOOK_SECRET, data="<ts>:<raw_payload>")
  3. Compares the computed hash against the h1 value
  4. Rejects events older than 5 minutes (replay attack protection)
All webhook routes are CSRF-exempt via the webhooks/* wildcard in bootstrap/app.php.

Handled Events

Subscription lifecycle events (subscription.*) are currently logged. To act on these events — for example, granting or revoking subscription access — use the Extension Override pattern to add your business logic.

Extension Override

To customize Paddle behavior without editing the built-in class, create an extension file at:
The platform auto-detects this file on boot — no changes to config/payment_processors.php are needed.
The payment-processors/ directory sits outside app/ by design. Its contents are never overwritten by platform updates.

Subscriptions

Configure Paddle Price IDs and subscription billing intervals for variants.

Webhooks Reference

Full webhook endpoint reference and custom gateway setup instructions.