Skip to navigation

Web Redirect on iOS

With Web Redirect, your server creates a checkout and returns its redirect URL to your app. The SDK loads the URL in a web view and watches for the redirect to your confirm or cancel URL. When the customer confirms, the SDK returns the order token, and your server completes the payment.

Web Redirect is the simplest way to present checkout. It supports Swift with UIKit, SwiftUI, and Objective-C. The SDK calls it Checkout V1.

Step 1: Create a checkout on your server

When the customer starts checkout, your server calls Create Checkout and returns the redirectCheckoutUrl from the response to your app.

{
"amount": { "amount": "100.00", "currency": "USD" },
"consumer": { "email": "test@example.com" },
"merchant": {
"redirectConfirmUrl": "https://example.com/checkout/confirm",
"redirectCancelUrl": "https://example.com/checkout/cancel"
},
"merchantReference": "merchant-order-123"
}

Set both merchant.redirectConfirmUrl and merchant.redirectCancelUrl. The SDK uses them to detect the result. They can be any URLs; by default, the SDK doesn’t load them.

Step 2: Present the checkout

Pass the checkout URL to the SDK. The SDK checks that the URL is an Afterpay checkout URL before it loads it.

Afterpay.presentCheckoutModally(
over: self,
loading: checkoutURL
) { result in
switch result {
case .success(let token):
// Send the token to your server to complete the order.
break
case .cancelled(let reason):
// Handle the cancellation.
break
}
}

If you haven’t set the configuration, or the customer’s language isn’t supported in your region, Afterpay.enabled is false. presentCheckoutModally then returns without presenting checkout or calling the completion handler. The SwiftUI modifier doesn’t check Afterpay.enabled, so don’t show your payment button when it’s false. For details, see Payment button visibility.

Load the redirect URLs

By default, the SDK stops at the redirect and doesn’t load your confirm or cancel URL. To load the redirect URL and read the result from its response instead, pass shouldLoadRedirectUrls: true to presentCheckoutModally. The SwiftUI afterpayCheckout modifier accepts this parameter but ignores it in SDK 5.9.0.

Step 3: Handle the result

A successful result contains the order token. A canceled result contains a CancellationReason:

ReasonMeaning
userInitiatedThe customer closed or canceled checkout.
networkError(Error)The checkout page failed to load, the SDK showed a retry dialog, and the customer chose to cancel.
unretrievableUrlThe SDK couldn’t read the redirect URL from the response. This happens only when shouldLoadRedirectUrls is true.
invalidURL(URL)The URL you passed isn’t an Afterpay checkout URL.

Step 4: Complete the order

Send the order token to your server. To capture the full amount immediately, your server calls Capture Full Payment with the token. To capture later, call Auth and then Capture Payment.

For the full server flow, see the Mobile SDK quickstart.