All pages
Powered by GitBook
1 of 1

Loading...

Appendix F EMV Transaction Flow

Flow Chart

Sample Transaction Flow Code

// #1

MTSCRA m_SCRA = new MTSCRA();

// Delegate the MTSCRA Events. 
m_SCRA.OnDisplayMessageRequest += OnDisplayMessageRequest;
.
// Assign parameters. 
byte timeLimit = 0x3C; 
byte cardType = 0x07; 
byte option = 0x00;
byte[] amount = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x15, 0x00 }; 
byte transactionType = 0x00; // Purchase
byte[] cashBack = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 
byte[] currencyCode = new byte[] { 0x08, 0x40 };
byte reportingOption = 0x02; // All Status Changes

// Start transaction.
long result = m_SCRA.startTransaction( 
timeLimit,
cardType, 
option, 
amount,
transactionType, 
cashBack, 
currentCode, reportingOption);
// #2

protected void OnDisplayMessageRequest(obj sender, byte[] data)
{
    String message;

    // Get the message. 
    if (data != NULL)
    {
        message = System.Text.Encoding.UTF8.GetString(data);
    }

// A data size of 0 is an instruction to clear the display. 
if (data.Length == 0)
{
// Clear the display.
}
}
// #3

protected void OnUserSelectionRequest(object sender, byte[] data)
{
    /* data[0]	– selection type 
        data[1]	– timeout
        data[2..n] – remainder contains zero-terminated string items */

    // display/retrieve user selection.
    .
    // set status and selection result. 
    m_SCRA.setUserSelectionResult(status, selection);
}
// #4

protected void OnARQCReceived(object sender, byte[] data)
{
    /* data[0..1] – ARQC length
        data[2..n] – remainder contains the ARQC TLV object */


    // #4a Forward ARQC to Processor.
    
    /* An application function to forward the ARQC 
        to a Processor for approval. */
    proccesorResponse = sendARQCToProcesor(data);


    /* No need to send ARQC Response if transaction option 
        had enabled Quick Chip mode. */
    if (isQuickChipEnabled())
    {
        return;
    }


    // #4b Set Acquirer Response.

    // An application function to build Acquirer Response. 
    buildAcquirerResponse(processorResponse);

    // Set Acquirer Response.
    m_SCRA.setAcquirerResponse(response);

}
// #5

protected void OnDisplayMessageRequest(obj sender, byte[] data)
{
    String message;

    // Get the message. 
    if (data != NULL)
    {

        message = System.Text.Encoding.UTF8.GetString(data);
    }

    // A data size of 0 is an instruction to clear the display. if (data.Length == 0)
    {
        // Clear the display.
    }
}
// #6

protected void OnTransactionResult(obj sender, byte[] data)
{
    /* data[0]	– Signature Required 
        data[1..2] – Batch Data length
        data[3..n] – remainder contains the Batch Data TLV object */

    // Parse the TLV from data[].
    .
    // Abstract Approval status from TLV tag β€œDFDF1A”.
    .
    // Abstract Signature Required status from TLV tag data[0].
    .
}