On This Page
Offline Transactions
Use this information to process offline sale or refund transactions when internet
connectivity is unavailable.
Using offline transaction functionality involves risk. Because these
transactions are not authorized in real time, you assume responsibility for potential
issues such as failed transactions, increased fraud, and higher chargeback rates. Only
use offline transactions when necessary such as during temporary internet outages.
Whenever possible, it is recommended to process online sale transactions to ensure
secure and immediate authorization. For more information, see Sale.
Review these considerations before performing offline transactions:
- Contactless transactions are not supported for offline sales.
- A terminal must have successfully processed at least one online transaction before it can perform offline transactions.
- Offline transactions must be submitted for authorization once internet connectivity is restored. For more information, see Submit an Offline Transactions Batch for Authorization.
Process an Offline Sale
Use this information to process an offline sale. This transaction is also called a
deferred authorization
or store-and-forward
transaction.Offline sales can be performed only on terminals that have
successfully processed at least one online transaction.
When internet connectivity is unavailable, an offline sale enables you to capture
transaction details locally. These stored transactions must be submitted for
authorization when connectivity is restored. For more information, see Submit an Offline Transactions Batch for Authorization.
Only process offline sales when required. The recommendation is
to process online sale transactions whenever possible. For more information, see
Sale.
Follow these steps to process an offline sale.
- Create aTransactionParametersobject and provide the required information for the payment.
- Retrieve thetransactionIntentvariable from themposUiobject and use thestartActivitymethod to initiate the transaction flow.// Use this to configure the maximum amount per offline transaction and maximum amount for an offline batch. // MposUI.offlineModule.offlineTransactionConfiguration = OfflineTransactionConfiguration( // maximumAmountPerTransaction = BigDecimal("100.00"), // maximumTotalAmountForBatch = BigDecimal("1000.00") // ) val transactionParameters = TransactionParameters.Builder() .charge(BigDecimal("1.00"), Currency.EUR) .customIdentifier("yourReferenceForTheTransaction") .build() val transactionIntent = mposUi.offlineModule.createTransactionIntent(transactionParameters) startActivityForResult(transactionIntent, MposUi.REQUEST_CODE_PAYMENT)
- After the transaction is complete and the Summary screen is dismissed, theonActivityResultmethod is triggered. This action returns information about the last transaction.override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == MposUi.REQUEST_CODE_PAYMENT) { when (resultCode) { // Result code from a successful transaction MposUi.RESULT_CODE_APPROVED -> { val transactionIdentifier = data?.getStringExtra(MposUi.RESULT_EXTRA_TRANSACTION_IDENTIFIER) Toast.makeText(findViewById(android.R.id.content),"Transaction approved!\nIdentifier: $transactionIdentifier", Toast.LENGTH_LONG).show() } // Result code from a declined, aborted or failed transaction MposUi.RESULT_CODE_FAILED -> { Toast.makeText(findViewById(android.R.id.content), "Transaction was declined, aborted, or failed", Toast.LENGTH_LONG).show() } } } }
Refund an Offline Sale Pending Submission
Use this information to process a refund for an offline sale before it is submitted
for authorization.
Follow these steps to refund an offline sale pending submission.
- Create aTransactionParametersobject and provide the required information for the payment.
- Retrieve thetransactionIntentvariable from themposUiobject and use thestartActivitymethod to initiate the transaction flow.val transactionParameters = TransactionParameters.Builder() .refund("transactionIdentifier") .build() val transactionIntent = mposUi.offlineModule.createTransactionIntent(transactionParameters) startActivityForResult(transactionIntent, MposUi.REQUEST_CODE_PAYMENT)
- After the transaction is complete and the Summary screen is dismissed, theonActivityResultmethod is triggered. This action returns information about the last transaction.override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == MposUi.REQUEST_CODE_PAYMENT) { when (resultCode) { // Result code from a successful transaction MposUi.RESULT_CODE_APPROVED -> { val transactionIdentifier = data?.getStringExtra(MposUi.RESULT_EXTRA_TRANSACTION_IDENTIFIER) Toast.makeText(findViewById(android.R.id.content),"Transaction approved!\nIdentifier: $transactionIdentifier", Toast.LENGTH_LONG).show() } // Result code from a declined, aborted or failed transaction MposUi.RESULT_CODE_FAILED -> { Toast.makeText(findViewById(android.R.id.content), "Transaction was declined, aborted, or failed", Toast.LENGTH_LONG).show() } } } }
Request a Check Transaction Status for an Offline Sale Pending Submission
Use this information to request a check transaction status for a single offline sale
transaction before it is submitted for authorization. The transaction status shows
on the Summary screen.
Follow these steps to request a check transaction status for an offline sale pending
submission.
- Access thetransactionIdentifiervalue in theonActivityResultmethod of the original transaction.
- Retrieve the transactionsummaryIntentvalue from themposUiobject.
- Use thestartActivitymethod to initiate the Summary screen.val summaryIntent = mposUi.offlineModule.createTransactionSummaryIntent(transactionIdentifier = "transactionIdentifier") startActivityForResult(summaryIntent, MposUi.REQUEST_CODE_SHOW_SUMMARY)
- After the Summary screen is dismissed, theonActivityResultis triggered. This action returns information about the previous transaction.override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == MposUi.REQUEST_CODE_SHOW_SUMMARY) { when (resultCode) { // Result code from a successful transaction MposUi.RESULT_CODE_APPROVED -> { val transactionIdentifier = data?.getStringExtra(MposUi.RESULT_EXTRA_TRANSACTION_IDENTIFIER) Toast.makeText(findViewById(android.R.id.content),"Transaction approved!\nIdentifier: $transactionIdentifier", Toast.LENGTH_LONG).show() } // Result code from a declined, aborted or failed transaction MposUi.RESULT_CODE_FAILED -> { Toast.makeText(findViewById(android.R.id.content), "Transaction was declined, aborted, or failed", Toast.LENGTH_LONG).show() } } } }
Retrieve a List of Offline Transactions Pending Submission
Use this information to retrieve a list of stored offline transactions before they
are submitted for authorization.
Follow this step to retrieve a list of offline transactions pending submission:
- Use thequeryTransactionsfunction from themposUiobject to retrieve the list.mposUi.offlineModule.queryTransactions( filterParameters = FilterParameters.Builder().build(), includeReceipts = false, offset = 0, limit = 20 ) { _, _, _, _, transactions, mposError -> if (transactions != null && transactions.isNotEmpty()) { // Handle Success scenario } else { // Handle Error Scenario } }
Submit an Offline Transactions Batch for Authorization
Use this information to submit an offline transactions batch for authorization. After
processing offline sale transactions, you must submit these transactions for
authorization. The recommendation is to submit the batch as soon as internet
connectivity is available.
Follow these steps to submit an offline transactions batch for authorization.
- Retrieve thebatchSubmissionIntentfrom themposUiobject.
- Use thestartActivitymethod to initiate the offline transactions batch submission.val batchSubmissionIntent = mposUi.offlineModule.submitOfflineTransactionBatchIntent() startActivityForResult(batchSubmissionIntent, MposUi.REQUEST_CODE_SUBMIT_BATCH)
- After the batch submission result is dismissed, theonActivityResultis triggered. This action returns information about the last batch submission.override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == MposUi.REQUEST_CODE_SUBMIT_BATCH) { when (resultCode) { // Result code from a successful batch submission MposUi.RESULT_CODE_SUBMIT_BATCH_SUCCESS -> { Toast.makeText(findViewById(android.R.id.content),"Batch submission successful", Toast.LENGTH_LONG).show() } // Result code from a failed batch submission MposUi.RESULT_CODE_SUBMIT_BATCH_FAILED -> { Toast.makeText(findViewById(android.R.id.content),"Batch submission failed", Toast.LENGTH_LONG).show() } } } }