Skip to main content
Redirect Checkout sends the buyer from your site to a provider-hosted payment page. It is a server-side SDK flow: your server prepares a PaymentSession, stores its server-only completion context, then sends the browser to the checkout instruction returned by that session.
A buyer reaching return_url does not prove payment. Verify the provider return or callback on your backend through Payment Response & Completion before fulfilment.

Redirect capability reference

The Supported SDK mode is the value supplied to CreateOrderOptions. The Public checkout type is the PaymentSession::$checkout['type'] value returned after the session is prepared. It tells your browser handoff code what to do; it is not an input you choose. The table describes platform capabilities. A gateway is usable only when it is currently returned by your backend’s availability() call for the configured domain and selected environment.

1. Prepare the session on your backend

Use an available method and request CheckoutMode::Redirect. Store the completionContext with the pending merchant order before you return any session data to the browser.
completionContext is signed server-only evidence. Never return it to JavaScript, include it in a URL, or store it in browser state.

2. Hand off the browser from the session response

The SDK returns the provider instruction inside $session->checkout. Do not recreate signatures, fields, or provider URLs yourself.
RedirectFormRenderer is valid only for a redirect_form session. It safely escapes the provider action URL, field names, field values, and submit label. For a redirect session, use the exact HTTPS redirect_url supplied by the SDK.

3. Verify after the provider returns

Your provider callback, webhook, or return handler must load the matching pending order and its stored completionContext, preserve the gateway-required payload, then call completePayment(). See Payment Response & Completion.

Optional: Payment Elements

Payment Elements is optional. It can perform the same public browser handoff for redirect_form and redirect sessions after your backend has completed the SDK flow above. It does not replace availability(), createOrder(), server-side order storage, or completePayment(). For setup options, safe availability rendering, and browser events, see Payment Elements.
Last modified on October 1, 2026