Superwall

How do I retrieve Stripe customer data after web checkout?

Learn how to access the Stripe customer ID and email after a user completes a web checkout purchase.

Context

After a user completes a web checkout purchase via Stripe, you may need to access their Stripe customer ID and email for integration with your backend systems or third-party services.

Answer

Use the didRedeemLink(result:) delegate method to access Stripe customer data when a redemption link is successfully processed.

Accessing Stripe customer ID and email

When the redemption result is successful, the RedemptionInfo object contains a PurchaserInfo with the customer's email and store identifiers:

func didRedeemLink(result: RedemptionResult) {
    guard case let .success(_, redemptionInfo) = result else { return }

    // Get the customer's email
    let email = redemptionInfo.purchaserInfo.email

    // Get the Stripe customer ID and subscription IDs
    if case let .stripe(customerId, subscriptionIds) = redemptionInfo.purchaserInfo.storeIdentifiers {
        print("Stripe Customer ID: \(customerId)")
        print("Subscription IDs: \(subscriptionIds)")

        // Send to your backend or analytics
        sendToBackend(
            stripeCustomerId: customerId,
            email: email,
            subscriptionIds: subscriptionIds
        )
    }
}

What happens if the user kills the app during checkout?

If a user completes the Stripe checkout but terminates the app before returning, the didRedeemLink(result:) callback will not fire. However, their purchase is not lost.

Recovery mechanisms:

  1. Redemption email: After a successful Stripe checkout, Superwall automatically sends the customer an email with an activation link. When they tap it, your app opens and didRedeemLink fires with the Stripe customer ID and email.

  2. Plan management page: Users can visit https://{yoursubdomain}.superwall.app/manage, enter their email, and receive a new redemption link.

  3. Automatic entitlement sync: The SDK polls for web entitlements when the app enters foreground, so subscription status updates automatically. However, this sync only updates entitlements and does not trigger didRedeemLink, meaning you will not receive the Stripe customer ID or email through this path.

To programmatically receive the Stripe customer ID and email, the user must tap a redemption link (either from the automatic email or the manage page).

Stripe metadata

Superwall automatically includes your app user ID in the Stripe checkout session and subscription metadata. The key _sw_app_user_id contains the user ID you set via Superwall.shared.identify(userId:).

This allows you to correlate Stripe subscriptions with your users directly in Stripe or through webhooks.

How is this guide?

Edit on GitHub