To process a transaction, the Adyen POS Mobile SDK needs to have internet access. When there is a temporary loss of internet connectivity, you can continue making mobile payments using a card reader by enabling offline payments.
With offline payments, the Adyen SDK approves a transaction and stores the payments for later processing. When the internet connection is back, the SDK sends the stored payments to the Adyen payment platform for further processing and verification by the issuer. This type of offline payment is called Store and Forward.
Store and Forward is supported for contact chip and contactless transactions by the major credit and debit card schemes. Store and Forward is not supported for most local card schemes and QR code wallet payments. Contact our Support Team to learn whether Store and Forward is supported for a specific local card scheme.
Magstripe is not accepted as an entry mode for offline mobile payments.
While your integration is offline you are unable to issue refunds.
How it works
To handle Store and Forward payments, the Adyen payment platform must have attested the security of your iOS device before the loss of internet connectivity. When online, the Adyen SDK evaluates the security of the device at various points, for example, at app initiation, or with every online transaction. Errors that occur during the attestation process need to be resolved. Check the troubleshooting section to see whether an error can be resolved offline or online. When the Adyen payment platform evaluates your iOS device as secure, the SDK can perform Store and Forward transactions for 24 consecutive hours. Store and Forward does not work in the event of an outage of the Adyen payment platform.
While offline, you must not:
- Delete your POS app: You will lose all stored card data and stored transaction details.
- Remove the passcode of your device: You will lose all stored card data and stored transaction details captured while that passcode was set.
- Restart your device: Your device cannot transact anymore after a restart until it connects to the internet again.
After you have configured Store and Forward payments, the flow is as follows:
- You initiate a payment like you usually do.
- Your POS app passes the payment request to the Adyen POS Mobile SDK.
- The SDK tries to reach the Adyen payments platform, but is unable to establish a connection.
- The transaction times out and the SDK starts a Store and Forward transaction.
- The SDK verifies whether the payment can be completed offline, by running the following checks:
- Is Store and Forward enabled? If no, the payment is declined.
- Has the payment terminal reached its maximum number of Store and Forward offline payments?
- Is the transaction amount within the configured maximum transaction amount?
- If approved, the SDK stores the details of the transaction.
- The shopper leaves with the goods.
- Later, when the SDK is able to connect to the internet again, it sends the stored payments to the Adyen payments platform for further processing.
Risk with offline payments
When you enable offline payments, your integration approves payments before the money is received from the shopper's account. That means it is possible that you will not receive the money for the goods that are taken by the shopper. There is also a higher risk that card fraud goes undetected.
You are fully liable for the risk of failed captures, chargebacks, and disputes related to payments that you process offline.
To reduce your exposure to these risks, you need to set up offline transaction limits before your integration can make offline payments.
Configure Store and Forward
If you have already enabled Store and Forward to work with your payment terminals, it will automatically work for mobile payments using a card reader.
To set up offline payments:
-
Ask our Support Team to enable Store and Forward payments and give them the following information:
- Max. payments: the maximum number of Store and Forward transactions per iOS device that you can process while offline.
- Store-and-forward max. amount: the maximum transaction amount that the iOS device accepts for a Store and Forward transaction. Transactions above this amount will be declined.
- Supported card types: normally, Store and Forward settings apply to all credit, debit, and prepaid cards in your account. If you want to exclude some of them, inform our Support Team.
-
After offline payments have been enabled, check that the settings are correct in your Customer Area under In-person payments > Terminal settings > Payment features > Store-and-forward payments.
-
Take care of any extra configuration on your side to reconcile payments that are made offline.
Recognize the offline payment response
Compared to an online payment response, the Terminal API response for an offline payment differs in some respects. Data that is generated by the Adyen payments platform, such as the PSP reference, is missing because your integration is unable to connect to Adyen. Authorisation data is missing as well, because the issuer has not authorized the payment yet. The response also includes some values to indicate the payment took place offline.
These differences are important because:
- They have consequences for refunding and reconciling offline payments.
- If your POS system normally uses the PSP reference, you need to make sure it is also able to handle responses that do not include a PSP reference.
To recognize Store and Forward payments in your Customer Area, under Transactions > Payments, use the gear icon to show the Store and forward column.
Offline payment response details
The PaymentResponse
for an offline transaction has the following characteristics:
-
POIData.POITransactionID.TransactionID
: misses the PSP reference. Only contains the tender reference. -
PaymentResult.OnlineFlag
: false -
PaymentResult.PaymentAcquirerData
: misses theAcquirerTransactionID
andApprovalCode
parameters. -
Response.AdditionalResponse
includes:offline
: trueofflineAuthCode
: indicates the type of offline payment.unconfirmedBatchCount
: the number of payments that the terminal hasn't been able to send to the Adyen payments platform.
-
There are also fields missing from the
Response.AdditionalResponse
. The most important missing data are:- authorization data:
authCode
,authorisationMID
,authorisedAmountCurrency
,authorisedAmountValue
,refusalReasonRaw
- PSP reference:
pspReference
,transactionReferenceNumber
- authorization data:
Below is an example of a Store and Forward offline payment response.
Refunding offline payments when back online
It is not possible to make refunds while your integration is offline.
When your integration is back online again, you can make a refund of a payment that was completed offline. Compared to how you would usually handle a refund, you have to manage the fact that the response for the offline payment does not contain the PSP reference. Use one of these options:
-
Make an unreferenced refund using a
PaymentRequest
withPaymentType
Refund. To make reconciliation easier, we recommend including the tender reference of the original payment inSaleData.SaleTransactionID.TransactionID
. -
Make a referenced refund using a
ReversalRequest
with the tender reference of the offline payment and the POIID of the payment terminal that was used for the offline payment. Even though you do not know the PSP reference, you can still make a referenced refund in this way. -
Find the PSP reference for the offline payment in your Customer Area or in the webhook (if you set that up). Then make a regular referenced refund using a
ReversalRequest
with the PSP reference.
Reconcile offline payments
Because the PSP reference is generated by the Adyen payments platform, the Terminal API response for an offline transaction does not have a PSP reference.
If you are using the PSP reference for reconciliation, we recommend you set up webhooks. When your integration is online again, you will receive webhooks for the stored payments, and these webhooks include the PSP reference. As an alternative, you can use the tender reference, which is generated by the terminal, to reconcile your payments. Also note that you can add the POS Store and Forward indicator column to your Received payment details report.
Because offline payments can be declined by the issuer, your financial operations specialist needs to set up a method of handling this type of declines. This would mean the goods are provided to the shopper and the money is not received for this type of payment. This is the inherent risk of processing Store and Forward transactions.
Test offline payments
To test an offline payment, proceed as follows.
- Make sure offline payments are configured.
- Send a payment request to the Adyen POS Mobile SDK and force an internet connection failure. For example, you can turn on Airplane Mode on your iOS device.
- Complete the offline payment using your test card. The test card enforces the configured offline limits.
- Verify that you are handling the offline payment response correctly.
- Re-enable the internet connection.
-
Verify the result:
- View the details of the test payment in your test Customer Area under Transactions > Payments. The details might not show immediately.
- View the webhooks received for the test payment (if you set up webhooks).
- View the Received payment details report.
This information should help your financial operations specialist to adapt your financial system to offline payments.