Skip to content
On this page

Connected platform guide

Connect Stripe to Drawspan

Use Stripe Checkout and invoice events to issue one-time licences, start subscriptions, and renew paid terms.

Before you start

  • A Stripe sandbox or an account with test data enabled.
  • A Stripe product and price for each offer you want to map.
  • A Drawspan product with a reusable fixed-term licence plan. One-time Checkout purchases must map to a fixed term.
  • A Payment Link ID beginning with plink_. Existing Price ID mappings are also supported; one-time Price ID checkout needs a restricted Stripe API key.
  1. In Connected platforms, choose Connect platform, then Stripe.
  2. Give the connection a name your team will recognise. Keep its workspace open.
  3. Expand step 1 and copy the webhook URL. Paste that URL into the provider dashboard below.
  4. Save the provider secret in the matching Drawspan endpoint. For Lemon Squeezy, generate it in Drawspan first. Gumroad has no signing secret.
  5. Expand step 2, link the product, then follow the testing instructions before enabling live sales.

Read the shared testing, expiry, email and recovery rules. Drawspan grants access to customers and seats; it does not email separate licence keys or issue ownerless licences.

Configure the webhook

Open Workbench → Webhooks → Create an event destination.

Create one event destination for test data and another for live data. Both destinations use the same Drawspan webhook URL, with different Test and Live signing secrets.

FieldValue
Events fromYour account
Payload styleSnapshot events
Endpoint URLThe Drawspan webhook URL (the same URL for Test and Live)
Signing secretReveal the whsec_ value after saving, then store it in the matching Drawspan endpoint

Select events

Select or create the events in the order shown below. The names follow the provider’s event picker.

  1. charge.dispute.createdRevoke access linked to the disputed charge.
  2. charge.refundedRevoke access only when the charge is fully refunded. Partial refunds leave access unchanged.
  3. checkout.session.async_payment_succeededIssue a one-time licence after a delayed payment succeeds.
  4. checkout.session.completedIssue for a mapped Payment Link when payment is paid or no_payment_required. Legacy Price ID subscriptions start from invoice.paid.
  5. invoice.paidIssue the first subscription term or renew the current term.
  6. invoice_payment.paidRetain the payment-to-invoice relationship needed to resolve modern subscription refunds and disputes. It does not issue access.

Test the connection

  1. Open the test Payment Link or your Checkout page for a mapped test Price ID.
  2. Pay with 4242 4242 4242 4242, a future expiry date, and any three-digit CVC.
  3. In Drawspan, refresh the connection and open Recent webhooks.
  4. Confirm that Drawspan shows the mapped Payment Link or Price ID and marks the test purchase as verified. Test data does not grant production access. A synthetic webhook only checks delivery and signature verification.

Inspect the event’s outcome, then check the customer, product, seats and expiry separately. A verified sandbox mapping does not prove production issuance or email delivery. For a local development rehearsal with test processing enabled, also verify the licence and captured email, then refund the test purchase. For subscriptions, exercise renewal, cancellation and a renewal refund. See the verification checklist.

Purchases, renewals, refunds, and cancellations

ChangeWhat Drawspan does
Initial one-time paymentcheckout.session.completed issues access after Stripe marks the session paid.
Delayed one-time paymentcheckout.session.async_payment_succeeded issues access when the delayed payment clears.
Initial subscription paymentPayment Link checkout issues the first term. For legacy Price ID mappings, invoice.paid issues it. Both paths ignore repeated initial fulfilment.
RenewalOnly subscription_cycle invoices renew existing subscription access, using the provider period end without shortening the current term. Updates and proration invoices do not renew.
CancellationStopping future invoices does not remove the term already paid for. Access ends when that term expires.
Refundcharge.refunded revokes the related access only for a confirmed full refund. Stripe reports the cumulative refunded amount; partial refunds leave access unchanged.
Disputecharge.dispute.created revokes the related access.

Limits and recovery

  • Use the Stripe event log to inspect and resend a failed webhook, then refresh the connection in Drawspan.
  • If a Price ID was missing or mapped to the wrong licence, correct the mapping before resending the event.
  • Rotating a signing secret requires the new secret in Drawspan before Stripe starts using it.
  • Repeat the complete setup for live data. Test secrets, restricted keys, products, and Price IDs do not work in live mode.

After correcting an accepted event, open Recent webhooks in its connection and choose Retry processing. Signature-rejected events cannot be retried inside Drawspan; resend them from the provider after fixing the secret. A missed event that was never accepted still requires a provider resend or manual correction. Recovery details.

Troubleshooting

Signature rejected
Copy the signing secret from the same event destination as the endpoint URL. Do not use an API secret key in the signing-secret field.
One-time checkout received but no licence was issued
Check that the session is paid, the Price ID is mapped, and the restricted key can read Checkout Sessions and line items.
Subscription checkout did not issue from checkout.session.completed
A mapped Payment Link grants on paid checkout. Legacy Price ID subscriptions grant on invoice.paid; later subscription_cycle invoices renew the original grant.
The event appears under the wrong environment
Use the test endpoint with Stripe test data and the live endpoint with live data.

Official references