FILTER BY TAG

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.
  1. Create a
    TransactionParameters
    object and provide the required information for the payment.
  2. Retrieve the
    transactionIntent
    variable from the
    mposUi
    object and use the
    startActivity
    method 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)
  3. After the transaction is complete and the Summary screen is dismissed, the
    onActivityResult
    method 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.
  1. Create a
    TransactionParameters
    object and provide the required information for the payment.
  2. Retrieve the
    transactionIntent
    variable from the
    mposUi
    object and use the
    startActivity
    method to initiate the transaction flow.
    val transactionParameters = TransactionParameters.Builder()              .refund("transactionIdentifier")              .build()  val transactionIntent = mposUi.offlineModule.createTransactionIntent(transactionParameters)  startActivityForResult(transactionIntent, MposUi.REQUEST_CODE_PAYMENT)
  3. After the transaction is complete and the Summary screen is dismissed, the
    onActivityResult
    method 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.
  1. Access the
    transactionIdentifier
    value in the
    onActivityResult
    method of the original transaction.
  2. Retrieve the transaction
    summaryIntent
    value from the
    mposUi
    object.
  3. Use the
    startActivity
    method to initiate the Summary screen.
    val summaryIntent = mposUi.offlineModule.createTransactionSummaryIntent(transactionIdentifier = "transactionIdentifier") startActivityForResult(summaryIntent, MposUi.REQUEST_CODE_SHOW_SUMMARY)
  4. After the Summary screen is dismissed, the
    onActivityResult
    is 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:
  1. Use the
    queryTransactions
    function from the
    mposUi
    object 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.
  1. Retrieve the
    batchSubmissionIntent
    from the
    mposUi
    object.
  2. Use the
    startActivity
    method to initiate the offline transactions batch submission.
    val batchSubmissionIntent = mposUi.offlineModule.submitOfflineTransactionBatchIntent() startActivityForResult(batchSubmissionIntent, MposUi.REQUEST_CODE_SUBMIT_BATCH)
  3. After the batch submission result is dismissed, the
    onActivityResult
    is 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()             }         }     } }