CardAcquisition

Read the card before the Payment or BalanceInquiry request, for example to look up, identify or onboard a loyalty customer.

Message categoryClassDirection
CardAcquisitionServiceECR → terminal

CardAcquisition is used to read card data from a card presented by the customer. Afterwards, based on the card data and a card reference provided in the CardAcquisition response, the following request types can be performed on the card.

Example request and response

cardacquisition

All fields

FunctionRequest typeDescription
PaymentPaymentUsed to initiate a payment or refund transaction. Since the CardAcquisition response, if available, provides a reference to a customer's loyalty program membership ID, the ECR may collect loyalty points, and/or update the payment amount before sending the Payment request.
Get customer identityNone (abort required)The customer ID could be returned in CardAcquisition response. If no Payment or BalanceInquiry request is performed after the CardAcquisition request, an abort is required, see Note below
Customer onboardingNone (abort required)The customer ID could be returned in CardAcquisition response. If no match, the customer could be asked to enter his mobile number in the terminal. Onboarding is then performed out of bounds via a link in an SMS. The customer is then linked to the card referenced in CardAcquisition response. If no Payment or BalanceInquiry request is performed after the CardAcquisition request, an abort is required, see Note below
Abort after CardAcquisition requestEnableServiceSee Note below

These functions are described in separate sections.

Note

If no Payment or BalanceInquiry request is to be performed after a CardAcquisition request, the ECR must send an EnableService request with the TransactionAction component set to “AbortTransaction” to terminate the card processing and remove the card from the card reader.

Example CardAcquisition request
{
  "SaleToPOIRequest": {
    "MessageHeader": {
      "ProtocolVersion": "3.1",
      "ServiceID": "2",
      "MessageClass": "Service",
      "MessageCategory": "CardAcquisition",
      "MessageType": "Request",
      "SaleID": "ECR123",
      "POIID": "AT12345"
    },
    "CardAcquisitionRequest": {
      "SaleData": {
        "SaleTransactionID": {
          "TransactionID": "12345678",
          "TimeStamp": "2024-04-18T22:16:13.178+02:00"
        }
      },
      "CardAcquisitionTransaction": {
        "TotalAmount": 125.00,
        "AeCashBackAmount": 200,
        "PaymentType": "Normal",
        "AllowedPaymentBrand": [
          "VISA",
          "MASTERCARD"
        ],
        "AeAllowedPaymentBrandCategory": [
          "VOUCHER"
        ],
        "AeAccessibilityMode": true
      }
    }
  }
}
FieldRequiredDescription
CardAcquisitionRequestRequiredContains the fields below
↳ SaleDataRequiredContains the fields below
    ↳ SaleTransactionIDRequiredContains the fields below
        ↳ TransactionIDRequiredECR provided transaction ID (same as for Payment request). Max length: 35
        ↳ TimeStampRequiredTimestamp of request from ECR (same as for Payment request)
↳ CardAcquisitionTransactionRequiredContains the fields below
    ↳ TotalAmountOptionalMandatory if the follow up request is Payment, Payment with cashback, or Refund. Otherwise absent.
    ↳ AeCashBackAmountOptionalMandatory if the follow up request is Payment with cashback
    ↳ AllowedPaymentBrandOptionalList of allowed payment brands for the current transaction, if restrictions are enforced. See Payment methods and card brands
    ↳ AeAllowedPaymentBrandCategoryOptionalList of allowed payment brand categories for the current transaction, if restrictions are enforced. See Payment methods and card brands
    ↳ AeAccessibilityModeOptionalBoolean. Enable accessibility mode for transaction. Default is false.
    ↳ PaymentTypeOptionalEnum: "Normal" or "Refund", or absent.
Set to "Normal" if the follow up request is a Payment or Payment with cashback.
Set to "Refund" if the follow up request is Refund.
Absent if the follow up request is Balance request, or if CardAcquisition is used to get customer identity only.
Example CardAcquisition response
{
  "SaleToPOIResponse": {
    "MessageHeader": {
      "ProtocolVersion": "3.1",
      "ServiceID": "2",
      "MessageClass": "Service",
      "MessageCategory": "CardAcquisition",
      "MessageType": "Response",
      "SaleID": "ECR123",
      "POIID": "AT12345"
    },
    "CardAcquisitionResponse": {
      "Response": {
        "Result": "Success",
        "AeResponseCode": "000"
      },
      "SaleData": {
        "SaleTransactionID": {
          "TransactionID": "12345678",
          "TimeStamp": "2024-04-18T22:16:13.178+02:00"
        },
        "AeHostToSaleData": "{\"AmountAndProductRestrictions\":{\"AcquirerResponseCode\": \"0\",\"MaxAmount\": 2000,\"ProductGroupsAllowed\": [100, 200]}}"
      },
      "POIData": {
        "POITransactionID": {
          "TransactionID": "87654321",
          "TimeStamp": "2024-04-18T22:16:13.478+02:00"
        }
      },
      "PaymentInstrumentData": {
        "PaymentInstrumentType": "Card",
        "CardData": {
          "PaymentBrand": "MASTERCARD",
          "MaskedPAN": "540481******1761",
          "SensitiveCardData": {
            "ExpiryDate": "2701"
          },
          "CardCountryCode": "578"
        }
      },
      "LoyaltyAccount": [
        {
          "LoyaltyBrand": "Rewards1",
          "LoyaltyAccountID": {
            "LoyaltyID": "LOYALTY1234567890"
          }
        }
      ]
    }
  }
}
FieldRequiredDescription
CardAcquisitionResponseRequiredContains the fields below
↳ ResponseRequiredContains the fields below
    ↳ ResultRequiredSuccess, Failure or Partial
    ↳ AeResponseCodeRequiredAera response code. The ECR shall use this response code. See Response codes
    ↳ AdditionalResponseOptionalAdditional information related to processing status of a message request
↳ SaleDataRequiredCopied from the request, optionally AeHostToSaleData in addition
    ↳ AeHostToSaleDataOptionalStringified JSON. Used to pass through data from the host to the ECR, e.g. a list of allowed products, see supported keys/values/structures below
↳ POIDataRequiredContains the fields below
    ↳ POITransactionIDRequiredContains the fields below
        ↳ TransactionIDRequiredTransaction ID generated by Aera, to be used in the CardAcquisitionReference of the request following the CardAcquisition
        ↳ TimeStampRequiredTime stamp, to be used in the CardAcquisitionReference of the request following the CardAcquisition
↳ PaymentInstrumentDataOptionalInformation about the payment instrument used for transaction, if available CardCountryCode is provided in ISO 3166-1 numeric See Payment methods and card brands for PaymentBrand values.
    ↳ PaymentInstrumentTypeOptional"Card" or "Mobile"
    ↳ CardDataOptionalContains the fields below
        ↳ PaymentBrandOptionalBrand of the selected payment card
        ↳ MaskedPANOptionalSee PaymentResponse
        ↳ PaymentAccountRefOptionalPAR if present, see PaymentResponse
↳ LoyaltyAccountOptionalList of loyalty look-ups (but normally only one), mandatory if loyalty lookup match, absent if no match
    ↳ LoyaltyBrandOptionalThe name of the loyalty program
    ↳ LoyaltyAccountIDOptionalMandatory if match
        ↳ LoyaltyIDOptionalThe loyalty ID within the loyalty program

Note

The AeHostToSaleData is a stringified JSON field used for passing data from the host to the ECR. Generally, there may be more than one JSON structure in the field, e.g. "{\"Structure1\":{\"DataElementList1\":[100, 200]},\"Structure2\":{\"DataElementList2\":[\"xxx\",\"yyy\",\"zzz\"]}}" Structures not relevant or not supported by the ECR must be ignored. The current structures are supported when applicable:

Currently supported keys

KeyDescription
AmountAndProductRestrictionsStructure containing the max amount and a list allowed product groups, example "{\"AmountAndProductRestrictions\":{\"MaxAmount\": 2000,\"ProductGroupsAllowed\":[100, 200]}}"
↳ AcquirerResponseCodeThe response code from the acquirer to the CardAcquisitionRequest
↳ MaxAmountThe maximum allowed gross amount for the purchase (decimal)
↳ ProductGroupsAllowedList of allowed product groups, e.g. [100, 200] (list of integers)

Get customer identity

To identify a customer the ECR can initiate a CardAcquisition request. If loyalty match, a customer id is included in the CardAcquisition response, see CardAcquisition.

If no Payment or BalanceInquiry request is initiated after the CardAcquisition request/response, the ECR must send an EnableService request with the TransactionAction component set to “AbortTransaction” to terminate the card processing and remove the card from the card reader.

Customer onboarding

Customer onboarding can be used to initiate an on-boarding process of a customer into the merchant's loyalty programme.

Initially, a CardAcquisition request is used to collect the customer identity. If there is no match, the cashier may ask the customer if he wants to become a member. If yes, the following steps are performed:

  1. At the POI:

    • a. The customer is prompted in the terminal to accept the terms & conditions and to enter the mobile number

    • b. A payment is initiated (same as a normal payment, potentially with a discounted amount), alternatively an EnableService request is initiated to abort the transaction.

  2. Afterwards, out of bounds:

    • a. The ECR sends the mobile number and the card reference collected in the CardAcquisition request to the loyalty programme system.

    • b. The loyalty programme system sends an SMS with an onboarding link to the customer.

    • c. Via the link, the customer onboards to the loyalty programme and is assigned a loyalty id.

    • d. The loyalty programme system sends an enrollment request, including the loyalty id and the CardAcquisition card reference, to Aera's loyalty lookup service.

    • e. The Aera lookup service enrolls the loyalty id and links it to the card used during the CardAcquisition.

For future payments using this card, the customer is recognised automatically via Aera's loyalty lookup service.

The terminal prompt for the mobile number uses the Input message.