
Appendix F EMV Transaction Flow
Last updated
// #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].
.
}