No momento, esta página não está disponível em português
Default icon

Architecture overview

High-level design of the Adyen mobile payments solution for Android.

The Adyen mobile payments solution provides merchants with an SDK (version TBD) that they need to integrate into their POS application. The SDK allows them to start online transactions with and without PIN using one of the following payment interfaces:

  • Tap to Pay.
  • Card reader.

Supported devices and operating system versions

  • Supported operating system versions: Android 11 and later.

  • Supported COTS device types — non-rooted Android smartphone or tablet with:

    • NFC reader.
    • Support for hardware key attestation.
  • Supported card readers: Adyen card readers NYC1-SCR and NYC1-SCRP.

Adyen NYC1 card readers

There are two PCI-approved secure card readers that can be used in our mobile payments solution: NYC1-SCR and NYC1-SCRP.

For both readers, add info about the MSR (hardware, firmware and validation details; supported functionality)

NYC1-SCR

The NYC1-SCR is a secure card reader that doesn't support PIN. This device is approved by the PCI Security Standards Council (SSC) with the following details.

  • Approval number: 4-30492.
  • Version: 6.x
  • Approval class: SCR
  • Expiry date: April 30, 20
  • SRED key management: Triple DES and AES DUKPT.
  • Functions: ICC reader, contactless reader, and magnetic stripe reader in accordance with OP and SRED requirements.

For more information, see:

NYC1-SCRP

The NYC1-SCRP is a secure card reader that supports PIN. This device is approved by the PCI Security Standards Council (SSC) with the following details.

  • Approval number:
  • Version:
  • Approval class: SCRP
  • Expiry date:
  • SRED key management:
  • Functions:

For more information, see:

Communication flow

Transactions start in the merchant's app. To start a transaction, the merchant needs to create a Terminal API payment request and specify the payment interface to use. The payment request initializes our SDK.

The next step is to ensure a valid authentication session exists. If there is no valid session, the merchant needs to send an authentication session request. This request contains a setupToken that is sent from the app to the merchant’s server, and from the merchant's server to Adyen, in order to validate the authenticity of the app. It is the merchant's responsibility to authenticate their app and to secure the communication with their own server.

When an authentication session is established, the SDK communicates directly with Adyen's servers for tasks like loading encryption keys, getting updated configurations, and initializing the transaction.

The authentication step establishes a secure communications channel between the SDK and the Adyen servers. For details, see Mutual authentication.

SDK boundaries

To improve security, some functionality is implemented in a native layer. This ensures stronger obfuscation and makes it harder for bad actors to use mechanisms like hooking and debugging.

Modular structure

We modularized our code for separation of concerns and improved build times. Each module is a separate library. Merchants only interact with the top library, shown in yellow in the following diagram. The other libraries come as transitive dependencies.