Documentation · SoftActivate Licensing Server

Payments

A Licensing Server can sell your software directly. Orders placed through your own Stripe and PayPal accounts mint licenses on your server, through the same order and webhook path the cloud service uses. The money flows to your accounts; the server's job is turning verified payment events into licenses.

Stripe

  1. Configure your keys: set stripe.secret_key in your config.json (the generator asks at setup; you can add it later).
  2. Mirror your catalog and register the webhook:
# idempotently mirrors your catalog into YOUR Stripe account (one product+price
# per SKU) and, with --webhook-url, registers the webhook endpoint - its signing
# secret is printed ONCE; paste it into stripe.webhook_signing_secret
SWS_CONFIG_FILE=./sws-install/config.json node scripts/stripe-vendor-setup \
    --webhook-url=https://licensing.example.com/api/v1/orders/stripe/webhook

The helper is idempotent. It ensures one Stripe Product per catalog item and one active Price each (re-running after a price change deactivates the stale price), and with --webhook-url it registers the webhook endpoint. The webhook signing secret is printed exactly once; paste it into stripe.webhook_signing_secret and restart.

  1. Sell. Two paths land on the same fulfillment: your website calls the server's public checkout endpoint (POST /api/v1/orders/checkout with the item id) to open a hosted Stripe Checkout, or you use Stripe Payment Links pointing at the same items. Payment events (checkout completion, invoice paid or failed, subscription changes) arrive on the webhook and mint or update licenses and subscription state automatically.

PayPal

The server receives PayPal's IPN (instant payment notification) callbacks at /api/v1/orders/paypal. Your PayPal buttons carry the item id, and the server verifies every notification directly with PayPal before fulfilling, which requires outbound reachability to PayPal's verification endpoint from the server.

Network posture

  • The payments surface must be reachable by the processors: Stripe's webhook delivery, and PayPal's IPN plus your server's outbound verification. The hardened topology isolates it as its own surface class, so nothing else needs internet exposure.
  • Payment verification is pinned to the production processors; a generated production config has no test-mode backdoor. Use Stripe's test keys against a disposable install to rehearse.
  • Payments and full air-gap are mutually exclusive per deployment: an offline Licensing Server licenses perfectly well, but selling requires the processors to reach you.

What your customers see

Hosted Stripe Checkout (or PayPal), a receipt from the processor, and a license key from your fulfillment email flow, followed by activation like any license. Orders and subscription state appear in your console exactly as the console guide describes.