Amadis

MOTO Transactions

A MOTO transaction is a manual entry transaction that is qualified as MOTO.

In order to qualify a transaction as MOTO, the MOTO Transaction flag must be set.

MOTO transactions are not allowed for the Services Deferred Payment, Deferred Payment Completion, Original Credit, Instalment Payment, Recurring Payment, Cash Advance, Quasi Cash, Voice Authorisation, Cardholder Detection.

How to configure MOTO transactions?

Ensure that in tag, Terminal Settings (DF34), byte 2 bit 7 is set to 1.

How to start a MOTO transaction?

Below is a snippet code on starting a MOTO transaction. As mentioned above, MOTO transactions do not work with Deferred Payment, Deferred Payment Completion, Original Credit, Instalment Payment, Recurring Payment, Cash Advance, Quasi Cash, Voice Authorisation, Cardholder Detection.

It goes without saying that it is exactly like starting a payment transaction. The main difference here is setting the ArkosTags.MotoTransaction to 1 telling Arkos to start this transaction as a MOTO one.

params.paramTree.AddBin(ArkosTags.MotoTransaction, new byte[]{0x01});

 

In the example below, the tag has already been added and is set to true when the boolean param

bMoto is set to TRUE ( When the corresponding button is touched).

public static PaymentParams CreateWithOptions(PaymentServiceID service, int amount, int tipAmount, int cashbackAmount, boolean bMoTo) { PaymentParams params = new PaymentParams(); //Date //Time //Timezone Calendar cal = Calendar.getInstance(); int utcOffsetMinutes = cal.getTimeZone().getOffset(cal.getTimeInMillis()) / 1000 / 60; byte[] utcOffset = new byte[2]; utcOffset[0] = (byte) (utcOffsetMinutes / 60); utcOffset[1] = (byte) (utcOffsetMinutes % 60); params.paramTree.AddEMVDate(ArkosTags.TransactionDate, cal.get(Calendar.YEAR) % 100, cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH)); params.paramTree.AddEMVTime(ArkosTags.TransactionTime, cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); params.paramTree.SetBin(ArkosTags.LocalTimezone, utcOffset); params.paramTree.SetAscii(ArkosTags.SelectedLanguage, LangHelper.getTerminalDefaultLanguage()); //service params.paramTree.AddEnum(ArkosTags.SelectedService, service); // tip amount if (tipAmount != 0) { params.paramTree.AddBin(ArkosTags.SupplementaryAmount, IntToBCD(tipAmount)); } // cashback amount if (cashbackAmount != 0) { params.paramTree.AddBin(ArkosTags.CashbackAmount, IntToBCD(cashbackAmount)); } //Moto option if (bMoTo) { params.paramTree.AddBin(ArkosTags.MotoTransaction, new byte[]{0x01}); } //total amount byte[] bcdAmount = IntToBCD(tipAmount + cashbackAmount + amount); if (bcdAmount == null) { return null; } params.paramTree.AddBin(TransactionAmount, bcdAmount); params.paramTree.AddBin(AmountAuthorised, bcdAmount); params.paramTree.AddBin(TransactionAmountBeforeAdjustment, bcdAmount); return params; }

 

NOTES: When MOTO is the chosen method, Please insert card step will be skipped as it will no longer be needed as this polling method will no longer be required.

Expected Arkos Callbacks :

Upon starting out a MOTO transaction, there will be one or more callback that requires additional user input depending on your config.

Below are the corresponding callbacks:

  • public byte[] merchantManualEntry()

  • public byte[] merchantCVDEntry()

 

The Card Validation Digits are not necessary for a manual transaction. However, it can be configured if required and the following callback will be called to ask the user for CVV input.

How to configure cvv?

Ensure that in tag, Application Profile Settings (DF27), byte 2 bit 6 is set to 1.

 

Please refer to the doc provided below for further explanation regarding the entry callbacks.