Cancel request

The client app must implement a mechanism to send messages using Android intents and URI calls and to receive the result in a custom URI callback.

Cancel request

For a typical cancel request, or refund, the client app must provide the following information:

Field Description Example Card terminal support
scheme The Viva's custom URL scheme, the host and the version. 'vivapayclient://pay/v1' Android Card TerminalsViva Wallet POS app for Android
merchantKey The merchant's key. For successful validation, should not be empty.
Deprecated: you may pass any value.
'SG23323424EXS3' Android Card TerminalsViva Wallet POS app for Android
appId The client app ID. For successful validation, should not be empty. 'com.example.myapp' Android Card TerminalsViva Wallet POS app for Android
action Cancel transaction. For successful validation, should not be empty. 'cancel' Android Card TerminalsViva Wallet POS app for Android
referenceNumber The STAN number of the transaction to be cancelled. If empty, after card presentment, the app will provide a list of the last 3 transactions made with the presented card, allowing the user to select the transaction to be canceled. If action is cancel and if not empty should be integer bigger than zero. Android Card TerminalsViva Wallet POS app for Android
callback The URI callback that will handle the result. For successful validation, should not be empty. 'mycallbackscheme://result' Android Card TerminalsViva Wallet POS app for Android
orderCode If not empty should be integer bigger than zero and length 16. '1020304050607080' Android Card TerminalsViva Wallet POS app for Android
shortOrderCode If not empty should be integer bigger than zero and length 10. '1234567890' Android Card TerminalsViva Wallet POS app for Android
txnDateFrom If action is cancel and if not empty should be in "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" format. '2021-03-18T14:42:53.341Z' Viva Wallet POS app for Android
txnDateTo If action is cancel and if not empty should be in "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" format, txnDateFrom should be provided and txnDateTo should be after txnDateFrom. `2021-03-19T14:42:53.341Z` Viva Wallet POS app for Android
show_receipt A flag indicating if the receipt and transaction result will be shown. If true both transaction result and receipt will be shown. If false receipt will not be shown and result will be shown if show_transaction_result is true. 'true' Viva Wallet POS app for Android
show_transaction_result A flag indicating if transaction result will be shown. 'true' Viva Wallet POS app for Android
show_rating A flag indicating if the rating flow will be shown. 'true' Viva Wallet POS app for Android
protocol The protocol used. Always pass this value: int_default

The above information elements must create a URI call, i.e.

Intent payIntent = new Intent(Intent.ACTION_VIEW, Uri.parse( "vivapayclient://pay/v1"
				+ "?merchantKey="MY_MERCHANT_KEY"
				+ "&appId=com.example.myapp"
				+ "&action=cancel"
				+ "&referenceNumber=123456"
				+ "&callback=mycallbackscheme://result"
				+ "&orderCode=1020304050607080"
				+ "&shortOrderCode=1234567890"
				+ "&txnDateFrom=2021-03-18T14:42:53.341Z"
				+ "&txnDateTo=2021-03-19T14:42:53.341Z"
				+ "&amount=100"
				+ "&show_receipt="+true
				+ "&show_transaction_result="+true
				+ "&show_rating="+true ));


payIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
payIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
payIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
payIntent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                startActivity(payIntent);

Cancel response

After executing a cancel transaction, or refund, the card terminal app responds with a cancel response result to indicate if the refund has been approved or not.

The result is received as a URI in the callback activity intent:

Uri result = getIntent().getData()

The table below summarises the contents of an approved response.

Field Description Example Card terminal support
callback The URI callback that will handle the result. 'mycallbackscheme://result' Android Card TerminalsViva Wallet POS app for Android
status The status of the transaction 'success' Android Card TerminalsViva Wallet POS app for Android
message A string containing information about the transaction status. 'Transaction successful' Android Card TerminalsViva Wallet POS app for Android
action Cancel transaction. 'cancel' Android Card TerminalsViva Wallet POS app for Android
amount The amount in cents without any decimal digits. '1200' = 12 euro Android Card TerminalsViva Wallet POS app for Android
cardType The card type. 'VISA' Android Card TerminalsViva Wallet POS app for Android
accountNumber The card number. Note that only the 6 first and the 4 last digits are provided. All other digits are masked with stars. '479275\*\*\*\*\*\*9999' Android Card TerminalsViva Wallet POS app for Android
tid A 12-character string indicating the terminal's TID number. '16016684' Android Card TerminalsViva Wallet POS app for Android
orderCode 16-digit integer. '1020304050607080' Android Card TerminalsViva Wallet POS app for Android
shortOrderCode 10-digit integer. '1234567890' Android Card TerminalsViva Wallet POS app for Android
transactionDate The transaction date in ISO 8601 format. '2019-09-13T12:14:19.8703452+03:00' Android Card TerminalsViva Wallet POS app for Android
transactionId A unique identifier for the transaction. 'a78e045c-49c3-4743-9071-f1e0ed71810c' Android Card TerminalsViva Wallet POS app for Android
aid A string indicating the AID of the card.
(Used in successful receipts)
'A000000003101001' Android Card Terminals
vatNumber The VAT number of merchant.
(if print VAT is enabled in the Viva POS app settings)
(Used in successful and declined receipts)
'123412341' Android Card Terminals
address The address of merchant
(if print address is enabled in the Viva POS app settings)
(Used in successful receipts)
‘Main St 123, 12312 Anytown’ Android Card Terminals
businessDescription Merchant’s Business/Trade/Store name (depending on what option is selected in the Viva POS app settings),
(Used in successful receipts)
'Wonka Industries' Android Card Terminals
printLogoOnMerchantReceipt A boolean indicating weather the VivaWallet logo should be printed on merchant receipt.
(Used in successful receipts)
'false' Android Card Terminals
merchantReceiptPAN This field contains the value of the PAN (and additional clipping) that should be printed in merchant receipt. If is empty, then apply the default clipping.
(Used in successful receipts)
'629914XXXXXXXXX6770' Android Card Terminals
cardholderReceiptPAN This field contains the value of the PAN (and additional clipping) that should be printed in customer receipt. If is empty, then apply the default clipping. '629914XXXXXXXXX6770' Android Card Terminals
transactionReceiptAcquirerZone If it is not empty then this value should be printed at the end of the customer receipt.
(Used in successful receipts)
'qwerty123456' Android Card Terminals
cardholderReceiptText If is not empty then this value should be printed at the end of the customer receipt.
(Used in successful receipts)
'qwerty123456' Android Card Terminals
merchantReceiptText If is not empty then this value should be printed at the end of the customer receipt.
(Used in successful receipts)
'qwerty123456' Android Card Terminals
cardholderName Name of the cardholder.
(Used in successful receipts)
'JOHN DOE' Android Card Terminals
cardExpirationDate Expiration date of the card (YYMM).
(Used in successful receipts)
'2212' Android Card Terminals
cardholderNameExpirationDateFlags Each char may be 0 (false) or 1 (true) and indicates if the cardholder name and the expiration date should be printed on the merchant/cardholder receipts)

1st char: if 1 then the Cardholder Name should be printed in the merchant's receipt. If 0, then it should not.

2nd char: if 1 then the Cardholder Name should be printed in the cardholder's receipt. If 0, then it should not.

3rd char: if 1 then the Expiration Date should be printed in the merchant's receipt. If 0, then it should not.

4rd char: if 1 then the Expiration Date should be printed in the cardholder's receipt. If 0, then it should not.
(Used in successful receipts)
'1010' Android Card Terminals
needsSignature A boolean indicating if the receipt needs a signature section.
(Used in successful receipts)
false Android Card Terminals
addQRCode A boolean indicating if the order code should be printed as a QR.
(Used in successful receipts)
false Android Card Terminals
terminalSerialNumber The serial number of the terminal.
(Used in successful receipts)
“1234567891“ Android Card Terminals
currency The currency of the transaction.
(Used in successful receipts)
“EUR“ Android Card Terminals
errorText Text to print on the receipt stating the error description and the error ccode.
(Used in declined receipts)
“Transaction failed - Z-3“ Android Card Terminals
applicationVersion The version off the application.
(Used in declined receipts)
'v3.7.0(1956)' Android Card Terminals

A cancel response result for an approved refund looks as follows:

mycallbackscheme://result?status=success&message=Transaction successful&action=cancel&clientTransactionId=1234567801234&amount=1200&tipAmount=0&verificationMethod=CONTACTLESS - NO CVM&rrn=107715996464&cardType=MASTERCARD&referenceNumber=996471&accountNumber=************9666&tid=16000223&orderCode=1077172694000223&shortOrderCode=1077172694&transactionDate=2021-03-18T17:09:50.8747721+02:00&transactionId=5f3ecbbe-d2da-4e59-9d38-610fddd79c73

It is expected that certain transactions will fail for various reasons. A cancel response result for a failed refund looks as follows:

`mycallbackscheme://result?status=fail&message=(-24) REFUND_INVALID_AMOUNT&action=&amount=10000&tipAmount=0&verificationMethod=CONTACTLESS - NO CVM&cardType=Debit Mastercard&referenceNumber=0&accountNumber=537488******9666&tid=16000223&orderCode=0&shortOrderCode=0

The structure of the message is the same as in the case of an approved refund.

Get Support

If you have any questions about our solutions, or questions about how to integrate with our solutions, please refer to our Get Support page.