Payments (Stripe, PayPal & Paddle)
Connect a payment gateway to charge customers for subscriptions. WhatsMine supports Stripe, PayPal and Paddle — enable any combination.
Admin location: Admin → Payment Gateways (/admin/payment-gateways)
This page is the detailed setup companion to the admin Payment Gateways screen.
The three steps for any gateway
- Enter credentials in WhatsMine.
- Register the webhook in the gateway dashboard (so renewals sync).
- Add price IDs to your plans (Stripe & Paddle).
Always start in test/sandbox mode, verify a full cycle, then switch to live.
Stripe
1. Credentials
From the Stripe Dashboard → Developers → API keys, copy your Secret key. Enter it in WhatsMine (Admin → Payment Gateways → Stripe), along with the webhook secret from the next step.
2. Webhook
In Stripe → Developers → Webhooks → Add endpoint:
- Endpoint URL:
https://your-domain.com/webhooks/stripe - Events to send:
checkout.session.completedcustomer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedinvoice.paidinvoice.payment_succeededinvoice.payment_failed
Copy the Signing secret Stripe shows and paste it into WhatsMine.
3. Price IDs
In Stripe → Products, create a product/price for each plan and cycle. Paste the Price IDs into each plan (stripe_monthly_id, stripe_yearly_id).
PayPal
1. Credentials
From the PayPal Developer Dashboard → your app, copy the Client ID and Client Secret. Enter them in WhatsMine and set sandbox/live. (Sandbox uses PAYPAL_SANDBOX=true or the test toggle.)
2. Webhook
In the PayPal app settings → Webhooks → Add:
- URL:
https://your-domain.com/webhooks/paypal - Events:
BILLING.SUBSCRIPTION.ACTIVATEDBILLING.SUBSCRIPTION.CANCELLEDBILLING.SUBSCRIPTION.SUSPENDEDPAYMENT.SALE.COMPLETED
Copy the Webhook ID into WhatsMine — PayPal verification is mandatory whenever a webhook ID is set.
Paddle
1. Credentials
From the Paddle Dashboard → Developer Tools → Authentication, copy your API key. From Notifications, you'll get the webhook secret. Enter both in WhatsMine and choose sandbox/production.
2. Webhook
In Paddle → Developer Tools → Notifications → New destination:
- URL:
https://your-domain.com/webhooks/paddle - Events:
subscription.createdsubscription.activatedsubscription.updatedsubscription.canceledtransaction.completed
3. Price IDs (required)
Paddle checkout requires catalog price IDs. In Paddle → Catalog, create a price for each plan and cycle, then paste them into each plan (paddle_monthly_id, paddle_yearly_id).
How renewals work
Renewals are webhook-driven: when a gateway charges the next period, it notifies WhatsMine, which records the payment, advances the renewal date and sends the renewal email. As a safety net, an hourly billing:sync reconciles statuses with each gateway.
Production gotchas
- No signing secret = rejected webhooks. In production, missing the webhook secret means every webhook is refused (401), so renewals silently stop. Always store it.
- Queue worker required. Notification emails are queued — run a queue worker.
- Scheduler required.
billing:syncand trial expiry run via the scheduler cron. See the Going Live Checklist.
Test before launch
- Set the gateway to test/sandbox and enable it.
- Subscribe a test customer through your pricing page.
- Confirm a transaction appears in Payments and the subscription is active.
- (Stripe) Use a test clock to fast-forward a renewal; confirm the renewal payment and email.
- Download the invoice PDF.
- Switch to live.
➡️ Next: Social Networks.