Versions Compared

Key

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

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).

Code Block
    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;
    }

Expected Arkos Callbacks :

Please refer to this section for the expected callbacks.

MoTo Transactions Callbacks