Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The cancellation service has been modified to support an online cancellation without searching from the log. From now on, a merchant is able to do :

  • Online Cancellation using the transaction log ( As in previous versions).

  • Offline Cancellation ( As in previous versions).

  • Online Cancellation without searching from the log.

It is to be noted that a slight modification was made to the flow of the latter (Online Cancellation without searching from the log) to help retrieve some Infos; such as AcquirerID, TerminalID, and etc. As it stands, this seems to be lackluster from Nexofast as they haven't thought out this solution properly. Upon implementing the flow they provided to us (nexoFAST 3.2), we ended up having some issues.

A new function was introduced as a solution to the problem.

The function setSelectedApplicationProfileNumberToDefaultFromServiceEntry allows us to set a profile, initialized the application, and finally, construct valid messages.

Below is the modified diagram.

...

Steps Taken for a successful online cancellation without searching from the log:

  • Terminal Settings ( Tag DF34 byte 3, bit 8 and bit 6 set to 1 , bit 7 set to 0).

...

Reference data has been included in the Original Transaction section of CancellationAuth and CancellationAdvice.

Below is an example derived from a cancellation of an original transaction(payment).

Code Block
 paymentParams.AddBin(ArkosTags.TransactionAmount, new byte[] { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00 });
 paymentParams.AddBin(ArkosTags.AmountAuthorised, new byte[] { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00 });
 paymentParams.AddBin(ArkosTags.TransactionAmountBeforeAdjustment, new byte[] { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00 });

TlvTree originalTransaction = paymentParams.AddChild(ArkosTags.OriginalTransaction);
originalTransaction.AddEMVDate(ArkosTags.TransactionDate, cal.get(Calendar.YEAR) % 100, cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH));
originalTransaction.AddEMVTime(ArkosTags.TransactionTime, cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
originalTransaction.AddBin(ArkosTags.LocalTimezone, utcOffset);
originalTransaction.AddAscii(ArkosTags.ReferenceData,"1234567890");
originalTransaction.AddEnum(ArkosTags.SelectedService, PaymentServiceID.Payment);

paymentParams.AddAscii(ArkosTags.ReferenceData,"1234567890");