Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

Make a QR code wallet payment

Learn how to accept wallet payments with a QR code.

Supported wallets

To learn which QR code wallets we support, see the payment methods overview.

Many shoppers have installed a QR code wallet app on their phone. They link the app to their credit or debit card (bank account), and then make in-store payments with the app on their phone. In the payment process, the payment terminal and the wallet app communicate trough a QR code.

QR code payment flows

With a Terminal API integration, there are several flows you can use for QR code wallet payments. Each flow varies in terms of the shopper experience, and the amount of additional integration work required.

Merchant-presented flows:

  • Initiate from terminal: you send a payment request. On the terminal display, your staff or the shopper selects the QR code icon.
    A list of supported wallets appears. From the list, your staff or the shopper selects the wallet app the shopper wants to use.

    A QR code for the selected wallet appears. The shopper scans the QR code with their wallet app to complete the payment.

    This flow requires no additional integration work.

    Using our Standalone solution?
    This flow is also used for making QR code payments on a Standalone terminal.

  • Initiate from cash register: you send a payment request which directly launches a QR code on the terminal. The shopper scans the QR code with their wallet app to complete the payment.

    This provides a simpler payment flow for your shoppers, but requires some additional integration work.

Consumer-presented flow:

  • Initiate from barcode scanner: the shopper launches a QR code from the wallet app on their phone. You scan this with a barcode scanner, then pass the QR code data in a payment request.

    This flow is not supported for the following QR code wallets: Affirm, Atome, PIX and TWINT.

    This flow requires the most integration work, but is familiar to many shoppers. It also does not require your shopper to have an active internet connection to complete a payment. If you have poor cellular reception in your store, you may want to use this flow.

With your Adyen integration, you can support one or several of these QR code payment flows.

Before you begin

Before you begin integrating a QR code wallet payment method:

  1. Make sure that you have built an integration that can make a payment.
  2. Add the QR code payment method to your Adyen account.
    We will contact you if we need additional details.

Initiate from terminal

If your integration is able to make a card payment, it can also make QR code payments with this flow. After sending a payment request to the terminal, your store staff or the shopper uses the terminal to specify the wallet app the shopper will use for the transaction. This presents a QR code on the terminal, for the shopper to scan and verify the payment. The terminal then sends the payment to Adyen for processing.

To initiate a QR code payment from your terminal:

  1. Make a payment request, as you would for a card payment.
    The payment is routed to the terminal.

  2. On the terminal screen, select the QR code icon, and then select the app the shopper will use for the payment.
    The terminal shows a QR code on the display.

  3. The shopper scans this QR code, and verifies the payment.

    If you are building a test integration, this payment is automatically Approved after 15 seconds. For information on testing other payment scenarios, such as an abandoned transaction, see Testing QR code wallets.

    The payment is sent to the Adyen payments platform for processing.

  4. You receive the result of the payment, as you would receive the result of a card payment.

You can view the details of a payment in your Customer Area, under Transactions > Payments.

Initiate from cash register

Using this flow is similar to making a regular payment request, but you additionally specify the wallet app the shopper will use for the transaction. When you send the payment request to the terminal, this shows a QR code for the specified wallet app. The shopper scans the QR code and verifies the payment. The terminal then sends the payment to Adyen for processing.

To initiate a QR code payment from your cash register:

  1. Ask the shopper which wallet app they will use for the payment.

  2. Make a payment request. In the PaymentTransaction object of this request, additionally specify:

    • TransactionConditions.AllowedPaymentBrand: the app being used for the payment. Use one of the following values:

      • affirm_pos: shows an Affirm QR code.
      • alipay: shows an Alipay QR code.
      • atome_pos: shows an Atome QR code.
      • grabpay_pos: shows a GrabPay QR code.
      • paybylink: shows a QR code with a payment link to an online Adyen checkout.

        Pay by Link is not a QR code wallet. But when Pay by Link is enabled for your account, you can use this method to directly launch a Pay by Link QR code on the terminal.

      • pix: shows a PIX QR code.
      • swish: shows a Swish QR code.
      • twint_pos: shows a TWINT QR code.
      • wechatpay_pos: shows a WeChat Pay QR code.
      • zip_pos: shows a Zip QR code.

    The example below shows a request for a EUR 10.99 Alipay payment from your cash register.

    {
       "SaleToPOIRequest":{
          "MessageHeader":{
             "ProtocolVersion":"3.0",
             "MessageClass":"Service",
             "MessageCategory":"Payment",
             "MessageType":"Request",
             "ServiceID":"0918171608",
             "SaleID":"POSSystemID12345",
             "POIID":"V400m-324688179"
          },
          "PaymentRequest":{
             "SaleData":{
                "SaleTransactionID":{
                   "TransactionID":"8954",
                   "TimeStamp":"2019-09-18T15:16:08+00:00"
                }
             },
             "PaymentTransaction":{
                "AmountsReq":{
                   "Currency":"EUR",
                   "RequestedAmount":10.99
                },
                "TransactionConditions":{
                   "AllowedPaymentBrand":[
                      "alipay"
                   ]
                }
             }
          }
       }
    }

    This directly initiates an Alipay QR code on the terminal display.

  3. Hand the terminal to the shopper, so they can scan the QR code and verify the payment.

    If you are building a test integration, this payment is automatically Approved after 15 seconds. For information on testing other payment scenarios, such as an abandoned transaction, see Testing QR code wallets.

    The payment is sent to the Adyen payments platform for processing.

  4. You receive the result of the payment, as you would receive the result of a card payment.

You can view the details of a payment in your Customer Area, under Transactions > Payments.

Initiate from barcode scanner

To use this flow, your integration must include a barcode scanner that can read a QR code. This can be an infrared scanner or a camera. Your integration also needs to translate the QR code into a numerical value.

You scan the QR code presented in the wallet app on the shopper's phone. Your cash register sends this QR code data to Adyen in a payment request, for processing.

To initiate a QR code payment from your barcode scanner:

  1. Scan the shopper's QR code with your barcode scanner.

  2. Translate the QR code data into a numeric value, to be passed in the payment request.
    For example, the numeric value contains:

    • 16-24 digits for Alipay.
    • 18 digits for WeChat Pay.
  3. Make a payment request. In the PaymentRequest object additionally specify:

    • PaymentData.PaymentInstrumentData.PaymentInstrumentType: StoredValue
    • PaymentData.PaymentInstrumentData.StoredValueAccountID: the details of the barcode or QR code:

      • StoredValueAccountType: Other
      • EntryMode: Scanned
      • IdentificationType: BarCode
      • StoredValueID: a numeric value representing the shopper's QR code.

    The example below shows a payment request for EUR 10.99, using a QR code with the numeric value 284687593190468703.

    {
       "SaleToPOIRequest":{
          "MessageHeader":{
             "ProtocolVersion":"3.0",
             "MessageClass":"Service",
             "MessageCategory":"Payment",
             "MessageType":"Request",
             "ServiceID":"0918171609",
             "SaleID":"POSSystemID12345",
             "POIID":"V400m-324688179"
          },
          "PaymentRequest":{
             "SaleData":{
                "SaleTransactionID":{
                   "TransactionID":"19630",
                   "TimeStamp":"2019-09-18T15:26:39+00:00"
                }
             },
             "PaymentData":{
                "PaymentInstrumentData":{
                   "PaymentInstrumentType":"StoredValue",
                   "StoredValueAccountID":{
                      "StoredValueAccountType":"Other",
                      "EntryMode":[
                         "Scanned"
                      ],
                      "IdentificationType":"BarCode",
                      "StoredValueID":"284687593190468703"
                   }
                }
             },
             "PaymentTransaction":{
                "AmountsReq":{
                   "Currency":"EUR",
                   "RequestedAmount":10.99
                }
             }
          }
       }
    }
  4. You receive the result of the payment, as you would receive the result of a card payment.

    If you are building a test integration, this payment is immediately Approved. For information on testing other payment scenarios, such as a refused transaction, see Testing QR code wallets.

You can view the details of a payment in your Customer Area, under Transactions > Payments.

Refunds

QR code wallets only support referenced refunds, so you have to make a ReversalRequest to refund a QR code wallet payment.

Both full and partial referenced refunds are allowed, except for GrabPay and PIX which only allow full referenced refunds.

Testing

We provide a simulator that you can use to test your integration. Some QR code payment methods also provide their own test environment. For more information, see Testing QR code payments.

See also