Documentation · SoftActivate Licensing

Selling with Stripe and PayPal

You keep selling exactly the way you sell today - your own Stripe or PayPal account, your own checkout, your own prices, your money going straight to you. What this integration adds is the last step: when a payment completes, SoftActivate Licensing creates the order, mints the licenses, and emails the keys to your customer, automatically.

Everything below is configured on one console page: Settings → Payments.

Stripe

The integration is notification-based. You add a webhook endpoint in your Stripe dashboard pointing at your personal endpoint URL; Stripe then notifies us of every completed payment, we verify the notification's signature, look the price up in your mapping, and create the order. We never hold credentials that could charge anyone.

1. Add the webhook endpoint

In the Stripe dashboard, open Developers → Webhooks → Add endpoint and paste the Webhook endpoint URL shown on your Payments page. Select these events (or simply "all events" - anything we don't handle is ignored):

  • checkout.session.completed and checkout.session.async_payment_succeeded
  • invoice.paid and invoice.payment_failed
  • customer.subscription.updated and customer.subscription.deleted
  • payment_intent.succeeded (only needed for custom card-form integrations)

After creating the endpoint, Stripe shows its signing secret (whsec_…). Paste it into the Payments page. This secret only lets us verify that notifications really come from Stripe - it cannot charge, refund, or read anything.

2. Create a restricted, read-only key

One-off sales arrive in a notification that does not include what was bought, so we need one read-only call to fetch it. In Developers → API keys → Create restricted key, grant a single permission - Checkout Sessions: Read - and leave everything else at None. Paste the resulting rk_… key into the Payments page.

The panel refuses full secret keys (sk_…) by design: never share those with anyone.

3. Map your prices to your products

Each row of the Price → product mapping pairs a Stripe price id (price_…, from your Stripe product catalog) with the reference id of the product it sells in your SoftActivate catalog. Recurring prices produce subscription licenses that renew as the Stripe subscription renews; one-time prices produce ordinary orders.

Sales of prices that are not in the mapping are ignored, so a Stripe account that also sells other things - services, hardware, anything - is safe to connect.

4. Sell

That's the whole setup. It works with whatever sell-side you have:

  • Payment Links - zero code: create a link in the Stripe dashboard for a mapped price and share it. Great for testing the integration end to end in Stripe's test mode before going live.
  • Stripe Checkout - your existing integration, unchanged.
  • Stripe Invoicing / Subscriptions - invoices and renewals flow through the same webhook; renewals extend the customer's licenses in place, failed payments open the grace window, cancellations run to the end of the paid period.
  • A custom card form (raw PaymentIntents) - the one case needing a code touch: add a sku_id metadata field (and optionally quantity) where your code creates the PaymentIntent, since the raw charge otherwise references no product at all.

Refunds are notified but never revoke licenses automatically - revocation stays a deliberate action on the license page in the console.

PayPal

PayPal needs no credentials at all - notifications are verified with PayPal directly. In your PayPal button, subscription, or IPN configuration set:

  • the IPN notification URL to the value shown on your Payments page;
  • the custom field to the value shown on your Payments page (it identifies your account);
  • the item number (item_number) to the reference id of the product being sold.

One-off payments create orders; subscription payments create the subscription on the first payment and extend the licenses in place on every renewal, with failed payments opening the grace window and cancellations running to the end of the paid period - the same lifecycle as subscriptions everywhere else.

What your customer sees

However the sale happened, the result is the same: an order with a support-referenceable order number, license keys delivered by email to the address the payment carried, and licenses that activate like any other - the console's orders view shows every sale with its licenses and delivery record.