Starting from June 2024, all point-of-sale systems in Greece must be integrated with a payment terminal and an e-invoicing system. This ensures that all in-person transactions are recorded, matched to the sales of goods, and invoiced to the tax authorities (AADE).
To stay compliant with the Greek tax regulations, we accept the unique signature generated by your selected e-invoicing system and attach it to the unique identifier of the transaction. You can then pass the result the tax authorities, therefore proving the sale of goods for that transaction.
How it works
- You start a transaction from your POS app.
- Your POS app retrieves a unique signature from the integrated e-invoicing system.
- Your POS app sends a payment request to the Adyen payment terminal with the e-invoicing signature.
- The payment terminal checks the e-invoicing signature using the public key of the e-invoicing system.
- We process the payment and the terminal returns the response with the unique transaction identifier for that e-invoicing signature.
- Your POS app sends the transaction result to the e-invoicing system which forwards the result to the Tax office.
Standalone payment terminals can no longer be used in Greece.
Before you begin
To make in-person payments using Adyen payment terminals connected to the e-invoicing system:
- In your Customer Area, under Terminal settings > Customization configure:
- Country/region: Greece
- Timezone: Europe/Athens
- Update your payment terminals to software version 1.107.7 or later.
- Create an integration able to request a signature from the e-invoicing provider and pass it in the payment request.
Integrate with an e-invoicing provider
Adyen is able to receive the e-invoicing details in the Terminal API request and check them with the public key of the e-invoicing provider. However, you need to integrate your POS app with an e-invoicing system of your choice. How you retrieve the e-invoicing signature and send the transaction result is up to you.
Because e-invoicing systems use different message structure, you should refer to the integration documentation of the e-invoicing provider you selected.
Adyen currently supports the payment flow integrated through the following e-invoicing providers:
Make a payment
-
From your POS app, retrieve the signature from the e-invoicing system for the payment terminal you will use and the purchase amount of the transaction.
-
Create a
aadeData
JSON object with:aadeProviderId
: the unique identifier of the e-invoicing provider. Find the right provider code on the AADE website.aadeProviderSignature
: the unique signature for the payment request retrieved from the e-invoicing system.Do not send
aadeProviderSignature
in any other request other than the payment request.aadeProviderSignatureData
: the data used to verify the signature with the public key of the e-invoicing system.The e-invoicing timestamp inside
aadeProviderSignature
must not be older than 24 hours.
TID
in theaadeProviderSignature
must be set to thePOIID
of the payment terminal.
TheaadeProviderSignature
must be unique for every transaction.
-
Encode the
aadeData
JSON object to Base64. You will pass the resulting string inSaleData.SaleToPOIData
. -
Make a payment request with the Base64-encoded JSON object in the
SaleToPOIData
:The
AmountsReq.RequestedAmount
inside thePaymentRequest
must be equal to or lower than the amount payable in theaadeProviderSignature
. -
If the payment is successful, from the
AdditionalResponse
of the payment response save the following:aadeTransactionID
: the unique identifier of the paymentaadeProviderSignature
: the signature from the e-invoicing system
-
From your POS system, send the
aadeTransactionID
and theaadeProviderSignature
to the e-invoicing system.
If you need to refund a payment to a shopper, you can do a standard referenced refund using the ReversalRequest
. However, to make an unreferenced refund, you make a payment request with a negative amount and need to include another unique signature from the e-invoicing system inside the Base64-encoded aadeData
JSON object in the SaleToPOIData
.
Errors
During the payment flow, Adyen payment terminals perform the following validations:
- Checks if the
aadeProviderSignature
is unique for each payment request. - Checks if the timestamp in the
aadeProviderSignature
is older than 24 hours. - Checks if the transaction amount is lower or equal to the amount payable in the
aadeProviderSignature
. - If the terminal identifier in the
aadeProviderSignature
(TID
) matches thePOIID
from theMessageHeader
.
If any of these validations fails, the payment response returns an error with a Base64-encoded error message in the AdditionalResponse
:
Message | Description |
---|---|
No AADE signature data received |
There is no AADE data provided or some elements are missing. |
Invalid AADE provider signature |
We cannot verify the signature using the public key of the e-invoicing provider. |
Untimely AADE provider signature |
The timestamp in the signatureData is either in the future or older than 24h. |
AADE amounts mismatch |
The transaction amount in the request is not lower or equal to the amount in the signatureData . |
AADE Terminal ID mismatch |
The TID in the signatureData doesn't match the POIID of the terminal. |
Reused AADE provider signature |
The unique signature has already been sent to the terminal. |