The cashback feature lets shoppers get cash in hand from their account, either with their purchase or without a purchase. Cashback without a purchase is often called cashout.
This feature is supported for:
- eftpos debit cards in Australia
- girocard debit cards in Germany
- Mastercard in Europe
- Visa in Europe
Enable cashbacks
Contact our POS Support Team to enable cashbacks.
Issue a cashback
-
Determine the following values that you'll need to pass in your payment request:
- The cashback amount.
-
The sum of the cashback amount and the amount due for the shopper's purchases.
-
Make a
PaymentRequest
with:-
PaymentTransaction
: the total and cashback amounts.Parameter Description AmountsReq.RequestedAmount
The total amount to be paid by the shopper: the amount for the purchase plus the amount for the cashback. AmountsReq.CashBackAmount
The cashback amount.
The example below shows the request for a shopper who purchased goods for 10 AUD, and wants to obtain a cashback of 2 AUD:
{ "SaleToPOIRequest": { "MessageHeader": { "ProtocolVersion": "3.0", "MessageClass": "Service", "MessageCategory": "Payment", "MessageType": "Request", "ServiceID": "0501160930", "SaleID": "POSSystemID12345", "POIID": "P400Plus-540004072" }, "PaymentRequest": { "SaleData": { "SaleTransactionID": { "TransactionID": "3375", "TimeStamp": "2018-05-01T14:09:30+00:00" } }, "PaymentTransaction": { "AmountsReq": { "Currency": "AUD", "RequestedAmount": 12.00, "CashBackAmount": 2.00 } } } } }
String serviceID = "YOUR_UNIQUE_ATTEMPT_ID"; String saleID = "YOUR_CASH_REGISTER_ID"; String POIID = "YOUR_TERMINAL_ID"; String transactionID = "YOUR_UNIQUE_TRANSACTION_ID"; SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest(); MessageHeader messageHeader = new MessageHeader(); messageHeader.setProtocolVersion("3.0"); messageHeader.setMessageClass( MessageClassType.SERVICE ); messageHeader.setMessageCategory( MessageCategoryType.PAYMENT ); messageHeader.setMessageType( MessageType.REQUEST ); messageHeader.setServiceID(serviceID); messageHeader.setSaleID(saleID); messageHeader.setPOIID(POIID); saleToPOIRequest.setMessageHeader(messageHeader); PaymentRequest paymentRequest = new PaymentRequest(); SaleData saleData = new SaleData(); TransactionIdentification saleTransactionID = new TransactionIdentification(); saleTransactionID.setTransactionID(transactionID); saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar())); saleData.setSaleTransactionID(saleTransactionID); paymentRequest.setSaleData(saleData); PaymentTransaction paymentTransaction = new PaymentTransaction(); AmountsReq amountsReq = new AmountsReq(); amountsReq.setCurrency("AUD"); amountsReq.setRequestedAmount( BigDecimal.valueOf(12.00) ); amountsReq.setCashBackAmount( BigDecimal.valueOf(2.00) ); paymentTransaction.setAmountsReq(amountsReq); paymentRequest.setPaymentTransaction(paymentTransaction); saleToPOIRequest.setPaymentRequest(paymentRequest); terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
-
-
When you receive the payment response, check the
Response.Result
:-
Success means the issuer authorised both the payment and the cashback.
The amount in thePaymentResult.AmountsResp.CashBackAmount
field is the amount that you need to pay to the shopper in cash. -
Partial means the issuer authorised the payment but not the cashback.
{ "SaleToPOIResponse": { "PaymentResponse": { "POIData": { "POITransactionID": { "TimeStamp": "2018-05-01T14:09:30.000Z", "TransactionID": "u6W7001525183770000.NC6HT9CRT65ZGN82" } }, "SaleData": { "SaleTransactionID": { "TimeStamp": "2018-05-01T14:09:30.000Z", "TransactionID": "3375" } }, "PaymentResult": { "AuthenticationMethod": [ "OnlinePIN" ], "PaymentAcquirerData": {...}, "PaymentInstrumentData": { "CardData": { "EntryMode": [ "MagStripe" ], "PaymentBrand": "eftpos_australia_sav", "MaskedPan": "637204 **** 0025", "SensitiveCardData": { "ExpiryDate": "1220" } }, "PaymentInstrumentType": "Card" }, "AmountsResp": { "AuthorizedAmount": 12, "CashBackAmount": 2, "Currency": "AUD" } }, "Response": { "Result": "Success", "AdditionalResponse": "...cashBackAmountValue=200" } }, "MessageHeader": {...} } }
-
See the PaymentRequest API reference and the PaymentResponse API reference.