Connected platform guide
Connect Shopify to Drawspan
Use paid-order and refund webhooks to issue licences for Shopify products, variants or SKUs.
Before you start
- A Shopify store that can place test orders through storefront checkout.
- The store’s permanent .myshopify.com domain.
- The secret after “Your webhooks will be signed with” beneath the store’s webhook list.
- A Shopify product variant and a Drawspan product with a reusable licence plan.
- In Connected platforms, choose Connect platform, then Shopify.
- Give the connection a name your team will recognise. Keep its workspace open.
- Expand step 1 and copy the webhook URL. Paste that URL into the provider dashboard below.
- Save the provider secret in the matching Drawspan endpoint. For Lemon Squeezy, generate it in Drawspan first. Gumroad has no signing secret.
- 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 Shopify Admin → Settings → Notifications → Webhooks → Create webhook.
Create two JSON webhooks. Use the same Drawspan URL for both.
| Field | Value |
|---|---|
| Event | Create one webhook for each event below |
| Format | JSON |
| URL | The private Shopify webhook URL from Drawspan |
| API version | The current stable version offered by Shopify |
| Connection identity | Save the permanent .myshopify.com domain and the secret after “Your webhooks will be signed with” beneath the webhook list in Drawspan |
Select events
Select or create the events in the order shown below. The names follow the provider’s event picker.
Order paymentorders/paid issues access for each mapped variant line.Refund createrefunds/create checks successful refund transactions against the original paid order. Partial or unconfirmed refunds leave access unchanged.
Link products
Drawspan matches this provider by Product ID, Variant ID or SKU: A Shopify admin product or variant URL, its numeric ID, or a SKU.
- Open the product in Shopify Admin.
- For a visible variant, open it and copy the number after /variants/ in the URL.
- When all variants use one plan, copy the product page URL or Product ID. A SKU also works. Matching prefers Variant ID, then Product ID, then SKU.
- In Drawspan, paste the identifier or full admin URL and choose the licence plan it should issue.
Test the connection
- Use Send test on each Shopify webhook. Drawspan records the signed test notification but does not issue access from it.
- Enable Shopify Payments test mode or Shopify’s Test payment gateway.
- Alternatively, configure Settings → Payments → Manual payment methods, place a storefront order, then open that order in Admin and choose Mark as paid. Use a store with checkout enabled; this does not bypass trial or development-store restrictions.
- Complete a real storefront checkout for the mapped variant.
- In Drawspan, refresh the connection and inspect Recent webhooks. Confirm the order, Variant ID, customer, and licence.
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
| Change | What Drawspan does |
|---|---|
| Paid order | orders/paid groups matching variant lines and issues the mapped access. |
| Recurring payment | Every paid order is treated as a one-off purchase. Shopify selling plans, subscription contracts, billing intervals and cancellation state are not synchronised. |
| Cancellation | orders/cancelled revokes only when Shopify reports a full refund with the cancellation. |
| Full refund | refunds/create revokes the order’s linked licences only when distinct successful refund transactions cover the original order total in the same currency. Repeated deliveries are not counted twice. |
| Partial refund | Partial, shipping-only and other-line refunds leave access unchanged. A partial order refund does not automatically remove seats or a fully returned item’s licence; adjust those licences manually if needed. |
| Unconfirmed refund | Missing amounts, currency, successful transactions or conflicting history leave access unchanged. Review the provider and correct access manually. |
| Unmatched refund | The accepted receipt stays recoverable. Recover the missing purchase and retry it; unrelated orders do not restart it. |
Limits and recovery
- Open the webhook delivery in Shopify and check the response before recreating the subscription.
- Shopify can remove webhook subscriptions after repeated failed deliveries. Recreate any missing webhook and use Send test again.
- Drawspan can retry an accepted receipt, but cannot fetch an order that Shopify never delivered. Resend it if Shopify still retains the history; otherwise correct access manually.
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
- Shopify rejects the URL
- Use the public HTTPS Drawspan URL. Shopify does not accept localhost, fake domains, or Shopify-owned domains.
- Send test succeeded but no licence was issued
- Complete a storefront checkout through a test payment gateway. Send test checks delivery only.
- The storefront says the store cannot receive orders
- A normal trial can keep checkout disabled until a plan is selected. A development store must use a test gateway.
- A full refund did not revoke access
- Inspect the payment event. An unresolved refund needs its original paid order with total and currency. Resend missing successful refund transactions and retry; otherwise verify the refund and revoke manually.