Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Additional payment methods


Public preview

Additional payment methods Public preview

Accept supported payment methods by displaying a QR code on Terminal readers.

In addition to cards, Terminal supports QR code-based payment methods. Your customers can scan a QR code to complete their checkout on their mobile devices.

Supported payment methods: WeChat Pay 1, Affirm, and PayNow

Want access to Klarna on Stripe Terminal?

We support Klarna in Private Preview. If you’re interested in joining the preview, share your email address to request access.

Want access to Affirm in the UK on Stripe Terminal?

We support Affirm in the UK in Private Preview. If you’re interested in joining the preview, share your email address to request access.

Supported readers: Smart readers, mobile readers, and Tap to Pay readers

1 WeChat Pay isn’t available for Terminal in Japan due to regional limitations.

Note

Connected accounts must have the required capability to perform transactions for each payment method. Learn more about Connect compatibility with Affirm, WeChat Pay, and PayNow.

To test non-card payment methods on Stripe Terminal, use a physical reader. The simulated reader isn’t supported.

All transactions must be made with a functional network connection, not while offline.

Smart readers and Tap to Pay on Android

For smart readers with built-in displays and Tap to Pay on Android, the reader displays the QR code directly on its screen.

If you only want to accept non-card payment methods, the reader can bypass the tap or insert prompt used for card payment methods. If you’ve enabled a single non-card payment method, the reader loads the QR code directly. Otherwise, the reader displays a list of non-card payment method options.

US-based readers United States

In the United States, if you plan on deploying readers with only non-card payment methods, displaying cart details isn’t supported at this time. Displaying cart details shows the NFC logo and supports pre-dipping cards to tokenize card details before a PaymentIntent is created.

Collect payment method screen

Payment method selection screen

Loading screen

Scan QR code screen

Approved screen

Mobile readers and Tap to Pay on iPhone

When using a mobile reader and Tap to Pay on iPhone, the app on your POS device must show the QR code for supported payment methods. The mobile reader display is not capable of displaying QR codes itself because of the pixel density.

To have your mobile app display the QR code, you must have at least SDK 5.3, and follow the implementation details.

Note

See Terminal mobile readers for supported SDKs.

Create a PaymentIntent

To accept non-card payment methods through the QR code interface, create a PaymentIntent and include your preferred payment method types in the payment_method_types parameter.

  • To present your customer all payment method options in the checkout flow, combine card _ present with non-card payment method types. We recommend enabling this if you operate in a heavily offline environment because only cards are supported in offline mode.
  • If you don’t want to accept cards, support only non-card payment method types.
  • If you know which payment method you want to direct your customer to checkout to, select a single payment method type.

Capture type

Not all payment methods support manual capture. The following table shows which payment methods support manual capture:

Payment methodManual capture
card_present
affirm
wechat_pay
paynow

To support the broadest set of payment methods, create your PaymentIntent with capture_method set to automatic. To support manual capture for card payments and Affirm while also accepting payment methods that require automatic capture, set capture_method on the nested payment_method_options.card_present attribute to manual.

Command Line

cURL

Handle the payment

Unlike card payments, processing QR code payments occurs asynchronously. When processing a PaymentIntent with a QR code payment method, Stripe generates a QR code unique to that payment.

After processing the payment, the reader displays the QR code for the customer to scan with their mobile device. Shortly after the customer completes the payment on their device, the reader updates to reflect the completed payment.

Note

The time it takes for the reader to display the result of the payment might differ depending on the payment method used. The reader usually updates after a few seconds.

QR code payments support both processing the payment immediately and the two-step collect-and-confirm flow.

To collect payment, make a request to Stripe with the ID of the PaymentIntent you created and the reader you want to use for the transaction.

Some payment methods (for example, Affirm) require a return_url when confirming a PaymentIntent to redirect your customer to after they authenticate or cancel their payment on the payment method’s app or site. You can provide your own return_url when processing the PaymentIntent. If you don’t provide one, the customer sees a generic landing page hosted by Stripe.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

When you process a payment, Stripe immediately responds to the request with an HTTP 200 status code as an acknowledgement that the reader received the action. In most cases, the request returns a reader with an in_progress status. However, because processing occurs asynchronously, the action status might already reflect the final state ( succeeded or failed) if the payment completes quickly.

Simultaneously, the reader screen switches to a UI that prompts the customer to insert their card or select a QR code payment method. For QR code payments, the customer completing the payment on their device updates the status of the payment. To verify the reader state, listen to the terminal.reader.action_succeeded webhook or poll the Reader and PaymentIntent status to receive the status of the payment.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

{
 "id": "tmr_xxx",
 "object": "terminal.reader",
 ...
 "status": "online",
 "action": {
 "type": "process_payment_intent",
 "process_payment_intent": {
 "payment_intent": "pi_xxx"
 },
 "status": "in_progress",
 "failure_code": null,
 "failure_message": null
 }
}

Free up the reader to take another payment

It might take multiple minutes for a customer to complete the payment on their device. Instead of waiting for the reader to reflect the result of the completed payment, you can free up the reader to take a payment for a different customer.

After the customer scans the QR code and switches to their device to complete the payment, use the cancel_action endpoint to reset the reader.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

After you cancel the reader’s action to process the payment, the payment intent remains in the requires_action state, allowing the customer to complete the payment. Use the payment_intent.succeeded and payment_intent.payment_failed webhooks to reconcile the result of the completed payment. Learn how to monitor a PaymentIntent with webhooks.

Customer experience

After you process the PaymentIntent, the customer scans a QR code. For smart readers, the QR code is rendered on the reader screen. For mobile readers, your app displays the QR code using the callbacks. Depending on the payment method, the customer might quickly finalize the payment in their mobile application (most digital wallets), or complete a more extended process of evaluating financing offers (the related setting payment methods). The following sections demonstrate the payment flow for supported payment methods with smart readers:

Learn more about how to provide the best customer experience and promote awareness of the related setting options in a store through these Affirm training resources.

Testing

In a sandbox, you can scan the QR code using a QR code scanning application on your mobile phone. The QR code payload contains a URL that goes to a Stripe-hosted test payment page where you can authorize or decline the test payment.

Affirm sandbox

If your account is onboarded with Affirm, the QR code URL takes you to an Affirm-hosted sandbox page where you can complete the payment process. When you’re redirected to the Affirm sandbox, you might receive a prompt to enter the last four digits of your SSN. Affirm recommends using either 0000 or 5678 for testing purposes.

If your account isn’t onboarded with Affirm, you’ll be directed to the Stripe-hosted test payment page.

Note

The present_payment_method endpoint doesn’t support specifying QR code payment method types.

Last verified 2026-09-24

Is this helpful?