Search

Are you looking for test card numbers?

Would you like to contact support?

Point-of-sale icon

QR code payments

Learn how to accept wallet payments with a QR code.

Using our Standalone solution?

Refer to our Standalone terminal documentation for information on making QR code transactions.

More information

Shoppers are increasingly making in-store purchases with a wallet app, such as Alipay.

By linking this app to their bank account or credit card, the shopper can pay for goods or services with their phone, by opening the app and scanning a QR code.

Supported QR code wallet payment methods are:

  • Afterpay Touch, available in Australia and New Zealand.
  • Alipay and WeChat Pay, available in Australia, Canada, the European Union, Hong Kong, New Zealand, Singapore, the United Kingdom, and the United States.
  • Swish, available in Sweden.

QR code payment flows

With our API integrations, there are several flows you can use to initiate a QR code for scanning. Each flow varies in terms of the shopper experience, and the amount of additional integration work required.

The flows you can use are:

  • Terminal initiated: You make a payment request, then launch a QR code by tapping a button on the terminal screen. The shopper scans the QR code with their wallet app to complete the payment.

    This flow requires no additional integration work.

  • Cash register initiated: You make 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.

  • Barcode scanner initiated: 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 requires the most integration work, but is familiar to your shoppers from abroad. 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, make sure you have:

  1. Built an integration that can make a payment.
  2. Added the payment method to your Adyen account.

Initiate from terminal

If your integration is able to make a card payment, it can also make QR code payments by initiating a QR code from the terminal. After making a payment request, your store staff or the shopper can use the terminal to specify that you want to make a QR code payment. This presents a QR code on the terminal screen, 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, tap Wallets, and then select the app the shopper will use to make the payment.
    This initiates a QR code on the terminal screen.

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

    If you're 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 your integration.

    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

Initiating this flow is similar to making regular payment request, but you additionally specify the wallet app the shopper will use for the transaction. This routes the transaction to the terminal, which presents a QR code 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 cash register:

  1. Ask the shopper which wallet app they will use to make 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:

      • afterpaytouch_pos: Presents an Afterpay QR code.
      • alipay: Presents an Alipay QR code.
      • swish: Presents a Swish QR code.
      • wechat: Presents a WeChat Pay QR code.

    The example below shows how you would initiate a 10.99 EUR Alipay payment from your cash register.

    For more information on the Terminal API request structure, refer to the Terminal API fundamentals.

    {
       "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 a QR code on the terminal screen.

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

    If you're 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 your integration.

    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 will need to have a barcode scanner that can read a QR code. This can be either an infrared scanner or a camera. Your integration will also need 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.

Afterpay Touch does not support a barcode scanner initiated flow. If you want to accept Afterpay Touch payments, you will need to use either a terminal or cash register initiated flow.

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. For Alipay, the numeric value will contain 16-24 digits. For WeChat Pay, the value will contain 18 digits.

    You pass this numeric value in the payment request.

  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: Numeric value representing the shopper's QR code.

    The example below shows how you would initiate a 10.99 EUR payment, using a QR code with the numeric value 284687593190468703.

    For more information on the Terminal API request structure, refer to the Terminal API fundamentals.

    {
       "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"
                   }
                }
             }
          }
       }
    }
  4. You receive the result of the payment, as you would receive the result of a card payment.

    If you're building a test integration, this payment is immediately Approved. For information on testing other payment scenarios, such as a refused transaction, see Testing your integration.

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

Next steps