The Refunds feature enables your merchants to transfer the amount of a previous charge transaction back to the shopper.
Refunds are implemented as Linked Refunds, which requires you to provide the
of the previous charge transaction in order to perform the refund. For Linked Refunds, the shopper is not required to present their card again and the refund is paid to the same card used for the charge.
To perform a refund, you must create new
of the previous charge transaction.
For partial refunds, you must specify the amount that will be refunded.
TransactionParameters parameters = new TransactionParameters.Builder()
// For partial refunds, specify the amount to be refunded
// and the currency from the original transaction
//.amountAndCurrency(new BigDecimal("1.00"), io.mpos.transactions.Currency.EUR)
This is a modification to an existing transaction so you are now passing the parameters to the
As a result, you will receive either:
The original transaction that now contains information about the refund in the
An error message indicating why refunding the charge failed.
To check if a transaction can be refunded, see
There might be a rare occasion when the
of the previous charge transaction is not available. For example, this situation could occur if your POS system does not allow the merchant to retrieve the original invoice containing the
. In this scenario, Standalone Refunds enable the merchant to perform a refund without reference to the previous charge transaction. The shopper must present their card again for this type of refund.
Standalone Refunds have a high risk profile because merchant money can be paid without limitations. Only consider offering standalone refunds after you are absolutely sure that Linked Refunds are not possible in your setup.
Should your merchants require Standalone Refunds, please talk to your account manager before starting your integration to ensure all prerequisites are met. Specifically you must ensure that:
Each merchant provides you with a written confirmation that they understand that Standalone Refunds potentially allow for pay out of merchant money without limitations and that only authorized store personal must be allowed to use them.
Your POS system protects the use of the Standalone Refund feature. This protection would include your POS system only allowing authorized store personal (such as a store owner or supervisor) to use the feature, and that the use of the feature is protected by a password or PIN. Note that before allowing you to go LIVE with Standalone Refunds, we will verify this requirements is met as part of our testing requirements
Standalone Refunds are run similarly to charge transactions, but use the
instead of the
when building the
TransactionParameters transactionParameters = new TransactionParameters.Builder()
.refund(new BigDecimal("5.00"), io.mpos.transactions.Currency.EUR)
.subject("Refund for Bouquet of Flowers")
TransactionProcess paymentProcess = transactionProvider.startTransaction(...);