My Profile_


Transaction Flow for American Express Level 2/3

This transaction set includes a suite of corporate card financial transactions as well as a transaction that allows for the passing of Level 2/3 data. Please ensure that AMEX Level 2/3 support is enabled on your merchant account. Batch CloseOpen Totals and Pre-Authorization are identical to the non-level 2/3 transactions outlined here.

  • When the Pre-Authorization response contains CorporateCard equal to true then you can submit the AMEX transactions.
  • If CorporateCard is false then the card does not support Level 2/3 data, non Level 2/3 transactions are to be used. If the card is not a corporate card, please refer to Non-Level 2/3 transactions  for the appropriate non-corporate card transactions.

Note: This transaction set is intended for transactions where Corporate Card is true and Level 2/3 data will be submitted.

If the credit card is found to be a corporate card but you do not wish to send any Level 2/3 data then you may submit AMEX transactions using the transaction set outlined in Non-Level 2/3 transactions

Pre-Authorization

Pre-authorization verifies and locks funds on the customer’s credit card. The funds are locked for a specified amount of time, based on the card issuer. To retrieve the funds from a pre-authorization so that they may be settled in the merchant account a pre-authorization completion must be performed. CorporateCard will return as true if the card supports Level 2/3.

For a list of all possible pre-Authorization options, please refer to this section.

Note: Refer to CorporateCard being returned within the response to determine the next transaction. If the value is”true” proceed with AxCompletion. If false, return to Non-Level 2/3 Transactions

Predecessors:
  • None
Successors:
  •  If CorporateCard is true and Level 2/3 data will be submitted
  •  Otherwise
    • Pre-Authorization Completion ( API | Batch File)
    • Vault Tokenize Credit Card ( API )

AX Completion

Once a Pre-authorization is obtained the funds that are locked need to be retrieved from the customer’s credit card. The AX Completion transaction is used to secure the funds locked by a pre-authorization transaction. The pre-authorization completion retrieves the locked funds and readies them for settlement in to the merchant account.

Canada Code Sample

package Level23;
import JavaAPI.*;

public class TestAxCompletion
{
	public static void main(String[] args)
	{
		String store_id = "moneris";
		String api_token = "hurgle";
		String processing_country_code = "CA";
		boolean status_check = false;
		
		String order_id="ord-210916-12:06:38";
		String comp_amount="62.37";
		String txn_number = "18924-0_11";
		String crypt="7";
		
		//Create Table 1 with details
		String n101 = "R6";	//Entity ID Code
		String n102 = "Retailing Inc. International";	//Name
		String n301 = "919 Oriole Rd.";		//Address Line 1
		String n401 = "Toronto";		//City
		String n402 = "On";			//State or Province
		String n403 = "H1T6W3";			//Postal Code

		String[] ref01 = {"4C", "CR"};	//Reference ID Qualifier
		String[] ref02 = {"M5T3A5", "16802309004"}; //Reference ID

		String big04 = "PO7758545";	//Purchase Order Number
		String big05 = "RN0049858";	//Release Number
		String big10 = "INV99870E";      //Invoice Number

		AxRef axRef1 = new AxRef();
		axRef1.setRef(ref01[0], ref02[0]);
		axRef1.setRef(ref01[1], ref02[1]);

		AxN1Loop n1Loop = new AxN1Loop();
		n1Loop.setN1Loop(n101, n102, n301, n401, n402, n403, axRef1);

		AxTable1 table1 = new AxTable1();
		table1.setBig04(big04);
		table1.setBig05(big05);
		table1.setBig10(big10);
		table1.setN1Loop(n1Loop);
		
		//Create Table 2 with details
		//the sum of the extended amount field (pam05) must equal the level 1 amount field				
		String[] it102 = {"1", "1", "1", "1", "1"};	//Line item quantity invoiced
		String[] it103 = {"EA", "EA", "EA", "EA", "EA"};  //Line item unit or basis of measurement code
		String[] it104 = {"10.00", "25.00", "8.62", "10.00", "-10.00"};   //Line item unit price
		String[] it105 = {"", "", "", "", ""};	//Line item basis of unit price code
		
		String[] it10618 = {"MG", "MG", "MG", "MG", "MG"};   //Product/Service ID qualifier
		String[] it10719 = {"DJFR4", "JFJ49", "FEF33", "FEE43", "DISCOUNT"};   //Product/Service ID (corresponds to it10618)
		
		String[] txi01_GST = {"GS", "GS", "GS", "GS", "GS"};	//Tax type code
		String[] txi02_GST = {"0.70", "1.75", "1.00", "0.80","0.00"};	//Monetary amount
		String[] txi03_GST = {"", "", "", "",""};		//Percent
		String[] txi06_GST = {"", "", "", "",""};		//Tax exempt code
		
		String[] txi01_PST = {"PG", "PG", "PG","PG","PG"};	//Tax type code
		String[] txi02_PST = {"0.80", "2.00", "1.00", "0.80","0.00"};	//Monetary amount
		String[] txi03_PST = {"", "", "", "",""};		//Percent
		String[] txi06_PST = {"", "", "", "",""};		//Tax exempt code

		String[] pam05 = {"11.50", "28.75", "10.62", "11.50", "-10.00"};	//Extended line-item amount
		String[] pid05 = {"Stapler", "Lamp", "Bottled Water", "Fountain Pen", "DISCOUNT"};	//Line item description

		AxIt106s[] it106s = {new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s()};
		
		it106s[0].setIt10618(it10618[0]);
		it106s[0].setIt10719(it10719[0]);
		
		it106s[1].setIt10618(it10618[1]);
		it106s[1].setIt10719(it10719[1]);
		
		it106s[2].setIt10618(it10618[2]);
		it106s[2].setIt10719(it10719[2]);
		
		it106s[3].setIt10618(it10618[3]);
		it106s[3].setIt10719(it10719[3]);
		
		it106s[4].setIt10618(it10618[4]);
		it106s[4].setIt10719(it10719[4]);

		AxTxi[] txi = {new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi()};

		txi[0].setTxi(txi01_GST[0], txi02_GST[0], txi03_GST[0], txi06_GST[0]);
		txi[0].setTxi(txi01_PST[0], txi02_PST[0], txi03_PST[0], txi06_PST[0]);

		txi[1].setTxi(txi01_GST[1], txi02_GST[1], txi03_GST[1], txi06_GST[1]);
		txi[1].setTxi(txi01_PST[1], txi02_PST[1], txi03_PST[1], txi06_PST[1]);

		txi[2].setTxi(txi01_GST[2], txi02_GST[2], txi03_GST[2], txi06_GST[2]);
		txi[2].setTxi(txi01_PST[2], txi02_PST[2], txi03_PST[2], txi06_PST[2]);

		txi[3].setTxi(txi01_GST[3], txi02_GST[3], txi03_GST[3], txi06_GST[3]);
		txi[3].setTxi(txi01_PST[3], txi02_PST[3], txi03_PST[3], txi06_PST[3]);

		txi[4].setTxi(txi01_GST[4], txi02_GST[4], txi03_GST[4], txi06_GST[4]);
		txi[4].setTxi(txi01_PST[4], txi02_PST[4], txi03_PST[4], txi06_PST[4]);

		AxIt1Loop it1Loop = new AxIt1Loop();
		it1Loop.setIt1Loop(it102[0], it103[0], it104[0], it105[0], it106s[0], txi[0], pam05[0], pid05[0]);
		it1Loop.setIt1Loop(it102[1], it103[1], it104[1], it105[1], it106s[1], txi[1], pam05[1], pid05[1]);
		it1Loop.setIt1Loop(it102[2], it103[2], it104[2], it105[2], it106s[2], txi[2], pam05[2], pid05[2]);
		it1Loop.setIt1Loop(it102[3], it103[3], it104[3], it105[3], it106s[3], txi[3], pam05[3], pid05[3]);
		it1Loop.setIt1Loop(it102[4], it103[4], it104[4], it105[4], it106s[4], txi[4], pam05[4], pid05[4]);

		AxTable2 table2 = new AxTable2();
		table2.setIt1Loop(it1Loop);

		//Create Table 3 with details
		AxTxi taxTbl3 = new AxTxi();
		taxTbl3.setTxi("GS", "4.25","","");	//sum of GST taxes
		taxTbl3.setTxi("PG", "4.60","","");	//sum of PST taxes
		taxTbl3.setTxi("TX", "8.85","","");	//sum of all taxes

		AxTable3 table3 = new AxTable3();
		table3.setTxi(taxTbl3);
		
		//Create and set Level23 Object
		AxLevel23 level23 = new AxLevel23();
		level23.setTable1(table1);
		level23.setTable2(table2);
		level23.setTable3(table3);

		AxCompletion axCompletion = new AxCompletion();
		axCompletion.setOrderId(order_id);
		axCompletion.setCompAmount(comp_amount);
		axCompletion.setTxnNumber(txn_number);
		axCompletion.setCryptType(crypt);
		axCompletion.setAxLevel23(level23);

		HttpsPostRequest mpgReq = new HttpsPostRequest();
		mpgReq.setProcCountryCode(processing_country_code);
		mpgReq.setTestMode(true); //false or comment out this line for production transactions
		mpgReq.setStoreId(store_id);
		mpgReq.setApiToken(api_token);
		mpgReq.setTransaction(axCompletion);
		mpgReq.setStatusCheck(status_check);
		mpgReq.send();

		try
		{
			Receipt receipt = mpgReq.getReceipt();

			System.out.println("CardType = " + receipt.getCardType());
			System.out.println("TransAmount = " + receipt.getTransAmount());
			System.out.println("TxnNumber = " + receipt.getTxnNumber());
			System.out.println("ReceiptId = " + receipt.getReceiptId());
			System.out.println("TransType = " + receipt.getTransType());
			System.out.println("ReferenceNum = " + receipt.getReferenceNum());
			System.out.println("ResponseCode = " + receipt.getResponseCode());
			System.out.println("ISO = " + receipt.getISO());
			System.out.println("BankTotals = " + receipt.getBankTotals());
			System.out.println("Message = " + receipt.getMessage());
			System.out.println("AuthCode = " + receipt.getAuthCode());
			System.out.println("Complete = " + receipt.getComplete());
			System.out.println("TransDate = " + receipt.getTransDate());
			System.out.println("TransTime = " + receipt.getTransTime());
			System.out.println("Ticket = " + receipt.getTicket());
			System.out.println("TimedOut = " + receipt.getTimedOut());
			System.out.println("CavvResultCode = " + receipt.getCavvResultCode());
		}
		catch (Exception e)
		{
			System.out.println(e);
		}

	}
}
                

AXCompletion - Transaction Values

AxCompletion axCompletion = new AxCompletion()

HttpsPostRequest mpgReq = new HttpsPostRequest();

mpgReq.setTransaction(axCompletion);

AXCompletion object mandatory values

Value

Type

Limits

Variable

Description

Order ID

String

50-character alphanumeric

axCompletion.setOrderId(order_id);

Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.

For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.

The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.

A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.

If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.

Amount

String

10-character decimal

axCompletion.setCompAmount(comp_amount);

Transaction amount This must contain at least 3 digits, two of which are penny values.
The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.

Transaction Number String 255-character alphanumeric axCompletion.setTxnNumber(txn_number);

Used when performing follow-on transactions. (That is, Completion, Purchase Correction or Refund.) This must be the value that was returned as the transaction number in the response of the original transaction.

 When performing a Completion, this value must reference the Pre-Authorization. When performing a Refund or a Purchase Correction, this value must reference the Completion or the Purchase.

E-Commerce indicator

String

1-character alphanumeric

axCompletion.setCryptType(crypt);

Describes the category of e-commerce transaction being processed. Allowable values are:


  • 1 - Mail Order / Telephone Order—Single
  • 2 - Mail Order / Telephone Order—Recurring
  • 3 - Mail Order / Telephone Order—Instalment
  • 4 - Mail Order / Telephone Order—Unknown classification
  • 5 - Authenticated e-commerce transaction (VBV)
  • 6 - Non-authenticated e-commerce transaction (VBV)
  • 7 - SSL-enabled merchant

In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:


if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7

Level 2/3 Data

Object

Object

axCompletion.setAxLevel23(level23);

Object to include level 2/3 addendum data. For further details on how to populate this data see below.

Predecessors:
Successors:
  • AX Purchase Correction
  • AX Refund

  • AX Forcepost

    This transaction is an alternative to AxCompletion to obtain the funds locked on Pre-authorization obtained from IVR or equivalent terminal. The AX Forcepost requires that the original Pre-authorization’s auth code is provided and it retrieves the locked funds and readies them for settlement in to the merchant account.

    Canada Code Sample
    
    package Level23;
    import JavaAPI.*;
    
    public class TestAxForcePost
    {
    	public static void main(String[] args)
    	{
    		String store_id = "moneris";
    		String api_token = "hurgle";
    		String processing_country_code = "CA";
    		boolean status_check = false;
    		
    		java.util.Date createDate = new java.util.Date(); 
    		String order_id="Test"+createDate.getTime();
    		String cust_id="CUST13343";
    		String amount="62.37";
    		String pan="373269005095005";
    		String expiry_date="2012"; //YYMM
    		String auth_code="123456";
    		String crypt="7";
    		
    		//Create Table 1 with details
    		String n101 = "R6";	//Entity ID Code
    		String n102 = "Retailing Inc. International";	//Name
    		String n301 = "919 Oriole Rd.";		//Address Line 1
    		String n401 = "Toronto";		//City
    		String n402 = "On";			//State or Province
    		String n403 = "H1T6W3";			//Postal Code
    
    		String[] ref01 = {"4C", "CR"};	//Reference ID Qualifier
    		String[] ref02 = {"M5T3A5", "16802309004"}; //Reference ID
    
    
    		String big04 = "PO7758545";	//Purchase Order Number
    		String big05 = "RN0049858";	//Release Number
    		String big10 = "INV99870E";      //Invoice Number
    
    		AxRef axRef1 = new AxRef();
    		axRef1.setRef(ref01[0], ref02[0]);
    		axRef1.setRef(ref01[1], ref02[1]);
    
    		AxN1Loop n1Loop = new AxN1Loop();
    		n1Loop.setN1Loop(n101, n102, n301, n401, n402, n403, axRef1);
    
    		AxTable1 table1 = new AxTable1();
    		table1.setBig04(big04);
    		table1.setBig05(big05);
    		table1.setBig10(big10);
    		table1.setN1Loop(n1Loop);
    		
    		//Create Table 2 with details
    		//the sum of the extended amount field (pam05) must equal the level 1 amount field
    		
    		String[] it102 = {"1", "1", "1", "1", "1"};	//Line item quantity invoiced
    		String[] it103 = {"EA", "EA", "EA", "EA", "EA"};  //Line item unit or basis of measurement code
    		String[] it104 = {"10.00", "25.00", "8.62", "10.00", "-10.00"};   //Line item unit price
    		String[] it105 = {"", "", "", "", ""};	//Line item basis of unit price code
    		
    		String[] it10618 = {"MG", "MG", "MG", "MG", "MG"};   //Product/Service ID qualifier
    		String[] it10719 = {"DJFR4", "JFJ49", "FEF33", "FEE43", "DISCOUNT"};   //Product/Service ID (corresponds to it10618)
    		
    		String[] txi01_GST = {"GS", "GS", "GS", "GS", "GS"};	//Tax type code
    		String[] txi02_GST = {"0.70", "1.75", "1.00", "0.80","0.00"};	//Monetary amount
    		String[] txi03_GST = {"", "", "", "",""};		//Percent
    		String[] txi06_GST = {"", "", "", "",""};		//Tax exempt code
    		
    		String[] txi01_PST = {"PG", "PG", "PG","PG","PG"};	//Tax type code
    		String[] txi02_PST = {"0.80", "2.00", "1.00", "0.80","0.00"};	//Monetary amount
    		String[] txi03_PST = {"", "", "", "",""};		//Percent
    		String[] txi06_PST = {"", "", "", "",""};		//Tax exempt code
    
    		String[] pam05 = {"11.50", "28.75", "10.62", "11.50", "-10.00"};	//Extended line-item amount
    		String[] pid05 = {"Stapler", "Lamp", "Bottled Water", "Fountain Pen", "DISCOUNT"};	//Line item description
    
    		AxIt106s[] it106s = {new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s()};
    		
    		it106s[0].setIt10618(it10618[0]);
    		it106s[0].setIt10719(it10719[0]);
    		
    		it106s[1].setIt10618(it10618[1]);
    		it106s[1].setIt10719(it10719[1]);
    		
    		it106s[2].setIt10618(it10618[2]);
    		it106s[2].setIt10719(it10719[2]);
    		
    		it106s[3].setIt10618(it10618[3]);
    		it106s[3].setIt10719(it10719[3]);
    		
    		it106s[4].setIt10618(it10618[4]);
    		it106s[4].setIt10719(it10719[4]);
    
    		AxTxi[] txi = {new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi()};
    
    		txi[0].setTxi(txi01_GST[0], txi02_GST[0], txi03_GST[0], txi06_GST[0]);
    		txi[0].setTxi(txi01_PST[0], txi02_PST[0], txi03_PST[0], txi06_PST[0]);
    
    		txi[1].setTxi(txi01_GST[1], txi02_GST[1], txi03_GST[1], txi06_GST[1]);
    		txi[1].setTxi(txi01_PST[1], txi02_PST[1], txi03_PST[1], txi06_PST[1]);
    
    		txi[2].setTxi(txi01_GST[2], txi02_GST[2], txi03_GST[2], txi06_GST[2]);
    		txi[2].setTxi(txi01_PST[2], txi02_PST[2], txi03_PST[2], txi06_PST[2]);
    
    		txi[3].setTxi(txi01_GST[3], txi02_GST[3], txi03_GST[3], txi06_GST[3]);
    		txi[3].setTxi(txi01_PST[3], txi02_PST[3], txi03_PST[3], txi06_PST[3]);
    
    		txi[4].setTxi(txi01_GST[4], txi02_GST[4], txi03_GST[4], txi06_GST[4]);
    		txi[4].setTxi(txi01_PST[4], txi02_PST[4], txi03_PST[4], txi06_PST[4]);
    
    		AxIt1Loop it1Loop = new AxIt1Loop();
    		it1Loop.setIt1Loop(it102[0], it103[0], it104[0], it105[0], it106s[0], txi[0], pam05[0], pid05[0]);
    		it1Loop.setIt1Loop(it102[1], it103[1], it104[1], it105[1], it106s[1], txi[1], pam05[1], pid05[1]);
    		it1Loop.setIt1Loop(it102[2], it103[2], it104[2], it105[2], it106s[2], txi[2], pam05[2], pid05[2]);
    		it1Loop.setIt1Loop(it102[3], it103[3], it104[3], it105[3], it106s[3], txi[3], pam05[3], pid05[3]);
    		it1Loop.setIt1Loop(it102[4], it103[4], it104[4], it105[4], it106s[4], txi[4], pam05[4], pid05[4]);
    
    		AxTable2 table2 = new AxTable2();
    		table2.setIt1Loop(it1Loop);
    
    		//Create Table 3 with details
    
    		AxTxi taxTbl3 = new AxTxi();
    		taxTbl3.setTxi("GS", "4.25","","");	//sum of GST taxes
    		taxTbl3.setTxi("PG", "4.60","","");	//sum of PST taxes
    		taxTbl3.setTxi("TX", "8.85","","");	//sum of all taxes
    
    		AxTable3 table3 = new AxTable3();
    		table3.setTxi(taxTbl3);
    		
    		AxLevel23 level23 = new AxLevel23();
    		level23.setTable1(table1);
    		level23.setTable2(table2);
    		level23.setTable3(table3);
    
    
    		AxForcePost axForcePost = new AxForcePost();
    		axForcePost.setOrderId(order_id);
    		axForcePost.setCustId(cust_id);
    		axForcePost.setAmount(amount);
    		axForcePost.setPan(pan);
    		axForcePost.setExpDate(expiry_date);
    		axForcePost.setAuthCode(auth_code);
    		axForcePost.setCryptType(crypt);
    		axForcePost.setAxLevel23(level23);
    
    		HttpsPostRequest mpgReq = new HttpsPostRequest();
    		mpgReq.setProcCountryCode(processing_country_code);
    		mpgReq.setTestMode(true); //false or comment out this line for production transactions
    		mpgReq.setStoreId(store_id);
    		mpgReq.setApiToken(api_token);
    		mpgReq.setTransaction(axForcePost);
    		mpgReq.setStatusCheck(status_check);
    		mpgReq.send();
    
    		try
    		{
    			Receipt receipt = mpgReq.getReceipt();
    			
    			System.out.println("CardType = " + receipt.getCardType());
    			System.out.println("TransAmount = " + receipt.getTransAmount());
    			System.out.println("TxnNumber = " + receipt.getTxnNumber());
    			System.out.println("ReceiptId = " + receipt.getReceiptId());
    			System.out.println("TransType = " + receipt.getTransType());
    			System.out.println("ReferenceNum = " + receipt.getReferenceNum());
    			System.out.println("ResponseCode = " + receipt.getResponseCode());
    			System.out.println("ISO = " + receipt.getISO());
    			System.out.println("BankTotals = " + receipt.getBankTotals());
    			System.out.println("Message = " + receipt.getMessage());
    			System.out.println("AuthCode = " + receipt.getAuthCode());
    			System.out.println("Complete = " + receipt.getComplete());
    			System.out.println("TransDate = " + receipt.getTransDate());
    			System.out.println("TransTime = " + receipt.getTransTime());
    			System.out.println("Ticket = " + receipt.getTicket());
    			System.out.println("TimedOut = " + receipt.getTimedOut());
    			System.out.println("CavvResultCode = " + receipt.getCavvResultCode());
    		}
    		catch (Exception e)
    		{
    			System.out.println(e);
    		}
    
    	}
    }
                    

    AX ForcePost - Transaction Values

    AxForcePost axForcePost = new AxForcePost();

    HttpsPostRequest mpgReq = new HttpsPostRequest();

    mpgReq.setTransaction(axForcePost);

    AX ForcePost Object Mandatory Values

    Value

    Type

    Limits

    Variable

    Description

    Order ID

    String

    50-character alphanumeric

    axForcePost.setOrderId(order_id);

    Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.

    For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.

    The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.

    A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.

    If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.

    Amount

    String

    10-character decimal

    axForcePost.setAmount(amount);

    Transaction amount This must contain at least 3 digits, two of which are penny values.
    The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.

    Credit card number

    String

    20-character numeric

    axForcePost.setPan(pan);

    Most credit card numbers today are 16 digits, but some 13-digit numbers are still accepted by some issuers. This field has been intentionally expanded to 20 digits in consideration for future expansion and potential support of private label card ranges.

    Expiry date

    String

    4-character numeric
    YYMM format.

    axForcePost.setExpDate(expiry_date);

    Submit in YYMM format.
    Note: This is the reverse of the date displayed on the physical card, which is MMYY.

    Authorization code String 8-character alphanumeric axForcePost.setAuthCode(auth_code); Authorization code provided in the transaction response from the issuing bank. This is required for Force Post transactions.

    E-Commerce indicator

    String

    1-character alphanumeric

    axForcePost.setCryptType(crypt);

    Describes the category of e-commerce transaction being processed. Allowable values are:


    • 1 - Mail Order / Telephone Order—Single
    • 2 - Mail Order / Telephone Order—Recurring
    • 3 - Mail Order / Telephone Order—Instalment
    • 4 - Mail Order / Telephone Order—Unknown classification
    • 5 - Authenticated e-commerce transaction (VBV)
    • 6 - Non-authenticated e-commerce transaction (VBV)
    • 7 - SSL-enabled merchant

    In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:


    if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
    if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
    if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
    if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7

    Level 2/3 Data

    Object

    Object

    axForcePost.setAxLevel23(level23);

    Object to include level 2/3 addendum data. For further details on how to populate this data see below.


    AX ForcePost transaction object optional values

    Value Type Limits Set method Description
    Customer ID String 50-character alphanumeric

    axForcePost.setCustId(cust_id);

    This can be used for policy number, membership number, student ID, invoice number and so on.

    This field is searchable from the Moneris Merchant Resource Centre.

     

    Predecessors:
    • Pre-Authorization completed on an independent system
    Successors:

    AX Purchase Correction

    The AX Purchase Correction (Void) transaction is used to cancel a transaction that was performed in the current batch. No amount is required because a purchase correction is always for 100% of the original transaction.

    * An AXPurchaseCorrection can be performed against a transaction as long as the batch that contains the original transaction remains open. When using the automated closing feature batch close occurs daily between 10 – 11 pm EST.

    Canada Code Sample
    
    package Level23;
    import JavaAPI.*;
    
    public class TestAxPurchaseCorrection
    {
    	public static void main(String[] args)
    	{
    		String store_id = "moneris";
    		String api_token = "hurgle";
    		String processing_country_code = "CA";
    		boolean status_check = false;
    		
    		String order_id="Test1485206180427";
    		String txn_number = "660117311902017023161620759-0_11";
    		String crypt="7";
    
    		AxPurchaseCorrection axPurchaseCorrection = new AxPurchaseCorrection();
    		axPurchaseCorrection.setOrderId(order_id);
    		axPurchaseCorrection.setTxnNumber(txn_number);
    		axPurchaseCorrection.setCryptType(crypt);
    
    		HttpsPostRequest mpgReq = new HttpsPostRequest();
    		mpgReq.setProcCountryCode(processing_country_code);
    		mpgReq.setTestMode(true); //false or comment out this line for production transactions
    		mpgReq.setStoreId(store_id);
    		mpgReq.setApiToken(api_token);
    		mpgReq.setTransaction(axPurchaseCorrection);
    		mpgReq.setStatusCheck(status_check);
    		mpgReq.send();
    
    		try
    		{
    			Receipt receipt = mpgReq.getReceipt();
    
    			System.out.println("CardType = " + receipt.getCardType());
    			System.out.println("TransAmount = " + receipt.getTransAmount());
    			System.out.println("TxnNumber = " + receipt.getTxnNumber());
    			System.out.println("ReceiptId = " + receipt.getReceiptId());
    			System.out.println("TransType = " + receipt.getTransType());
    			System.out.println("ReferenceNum = " + receipt.getReferenceNum());
    			System.out.println("ResponseCode = " + receipt.getResponseCode());
    			System.out.println("ISO = " + receipt.getISO());
    			System.out.println("BankTotals = " + receipt.getBankTotals());
    			System.out.println("Message = " + receipt.getMessage());
    			System.out.println("AuthCode = " + receipt.getAuthCode());
    			System.out.println("Complete = " + receipt.getComplete());
    			System.out.println("TransDate = " + receipt.getTransDate());
    			System.out.println("TransTime = " + receipt.getTransTime());
    			System.out.println("Ticket = " + receipt.getTicket());
    			System.out.println("TimedOut = " + receipt.getTimedOut());
    			System.out.println("CavvResultCode = " + receipt.getCavvResultCode());
    		}
    		catch (Exception e)
    		{
    			System.out.println(e);
    		}
    
    	}
    }
                    

    AX Purchase Correction - Transaction Values

    AxPurchaseCorrection axPurchaseCorrection = new AxPurchaseCorrection();

    HttpsPostRequest mpgReq = new HttpsPostRequest();

    mpgReq.setTransaction(axPurchaseCorrection);

    AX PurchaseCorrection Object Mandatory Values

    Value

    Type

    Limits

    Variable

    Description

    Order ID

    String

    50-character alphanumeric

    axPurchaseCorrection.setOrderId(order_id);

    Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.

    For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.

    The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.

    A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.

    If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.

    Transaction Number

    String

    255 – character alphanumeric

    axPurchaseCorrection.setTxnNumber(txn_number);

    Used when performing follow-on transactions. (That is, Completion, Purchase Correction or Refund.) This must be the value that was returned as the transaction number in the response of the original transaction.

    When performing a Completion, this value must reference the Pre-Authorization. When performing a Refund or a Purchase Correction, this value must reference the Completion or the Purchase.

    E-Commerce indicator

    String

    1-character alphanumeric

    axPurchaseCorrection.setCryptType(crypt);

    Describes the category of e-commerce transaction being processed. Allowable values are:


    • 1 - Mail Order / Telephone Order—Single
    • 2 - Mail Order / Telephone Order—Recurring
    • 3 - Mail Order / Telephone Order—Instalment
    • 4 - Mail Order / Telephone Order—Unknown classification
    • 5 - Authenticated e-commerce transaction (VBV)
    • 6 - Non-authenticated e-commerce transaction (VBV)
    • 7 - SSL-enabled merchant

    In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:


    if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
    if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
    if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
    if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7


    Predecessors:
    Successors:
    • None

    AX Refund

    The AX Refund will credit a specified amount to the cardholder’s credit card. A refund can be sent up to the full value of the original pre-authorization completion

    Canada Code Sample
    
    package Level23;
    import JavaAPI.*;
    
    public class TestAxRefund
    {
    	public static void main(String[] args)
    	{
    		String store_id = "moneris";
    		String api_token = "hurgle";
    		String processing_country_code = "CA";
    		boolean status_check = false;
    		
    		String order_id="Test1485206231878";
    		String amount="62.37";
    		String txn_number = "660117311902017023161712265-0_11";
    		String crypt="7";
    		
    		//Create Table 1 with details
    		String n101 = "R6";	//Entity ID Code
    		String n102 = "Retailing Inc. International";	//Name
    		String n301 = "919 Oriole Rd.";		//Address Line 1
    		String n401 = "Toronto";		//City
    		String n402 = "On";			//State or Province
    		String n403 = "H1T6W3";			//Postal Code
    
    		String[] ref01 = {"4C", "CR"};	//Reference ID Qualifier
    		String[] ref02 = {"M5T3A5", "16802309004"}; //Reference ID
    
    		String big04 = "PO7758545";	//Purchase Order Number
    		String big05 = "RN0049858";	//Release Number
    		String big10 = "INV99870E";      //Invoice Number
    
    		AxRef axRef1 = new AxRef();
    		axRef1.setRef(ref01[0], ref02[0]);
    		axRef1.setRef(ref01[1], ref02[1]);
    
    		AxN1Loop n1Loop = new AxN1Loop();
    		n1Loop.setN1Loop(n101, n102, n301, n401, n402, n403, axRef1);
    
    		AxTable1 table1 = new AxTable1();
    		table1.setBig04(big04);
    		table1.setBig05(big05);
    		table1.setBig10(big10);
    		table1.setN1Loop(n1Loop);
    		
    		//Create Table 2 with details
    		//the sum of the extended amount field (pam05) must equal the level 1 amount field				
    		String[] it102 = {"1", "1", "1", "1", "1"};	//Line item quantity invoiced
    		String[] it103 = {"EA", "EA", "EA", "EA", "EA"};  //Line item unit or basis of measurement code
    		String[] it104 = {"10.00", "25.00", "8.62", "10.00", "-10.00"};   //Line item unit price
    		String[] it105 = {"", "", "", "", ""};	//Line item basis of unit price code
    		
    		String[] it10618 = {"MG", "MG", "MG", "MG", "MG"};   //Product/Service ID qualifier
    		String[] it10719 = {"DJFR4", "JFJ49", "FEF33", "FEE43", "DISCOUNT"};   //Product/Service ID (corresponds to it10618)
    		
    		String[] txi01_GST = {"GS", "GS", "GS", "GS", "GS"};	//Tax type code
    		String[] txi02_GST = {"0.70", "1.75", "1.00", "0.80","0.00"};	//Monetary amount
    		String[] txi03_GST = {"", "", "", "",""};		//Percent
    		String[] txi06_GST = {"", "", "", "",""};		//Tax exempt code
    		
    		String[] txi01_PST = {"PG", "PG", "PG","PG","PG"};	//Tax type code
    		String[] txi02_PST = {"0.80", "2.00", "1.00", "0.80","0.00"};	//Monetary amount
    		String[] txi03_PST = {"", "", "", "",""};		//Percent
    		String[] txi06_PST = {"", "", "", "",""};		//Tax exempt code
    
    		String[] pam05 = {"11.50", "28.75", "10.62", "11.50", "-10.00"};	//Extended line-item amount
    		String[] pid05 = {"Stapler", "Lamp", "Bottled Water", "Fountain Pen", "DISCOUNT"};	//Line item description
    
    		AxIt106s[] it106s = {new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s()};
    		
    		it106s[0].setIt10618(it10618[0]);
    		it106s[0].setIt10719(it10719[0]);
    		
    		it106s[1].setIt10618(it10618[1]);
    		it106s[1].setIt10719(it10719[1]);
    		
    		it106s[2].setIt10618(it10618[2]);
    		it106s[2].setIt10719(it10719[2]);
    		
    		it106s[3].setIt10618(it10618[3]);
    		it106s[3].setIt10719(it10719[3]);
    		
    		it106s[4].setIt10618(it10618[4]);
    		it106s[4].setIt10719(it10719[4]);
    
    		AxTxi[] txi = {new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi()};
    
    		txi[0].setTxi(txi01_GST[0], txi02_GST[0], txi03_GST[0], txi06_GST[0]);
    		txi[0].setTxi(txi01_PST[0], txi02_PST[0], txi03_PST[0], txi06_PST[0]);
    
    		txi[1].setTxi(txi01_GST[1], txi02_GST[1], txi03_GST[1], txi06_GST[1]);
    		txi[1].setTxi(txi01_PST[1], txi02_PST[1], txi03_PST[1], txi06_PST[1]);
    
    		txi[2].setTxi(txi01_GST[2], txi02_GST[2], txi03_GST[2], txi06_GST[2]);
    		txi[2].setTxi(txi01_PST[2], txi02_PST[2], txi03_PST[2], txi06_PST[2]);
    
    		txi[3].setTxi(txi01_GST[3], txi02_GST[3], txi03_GST[3], txi06_GST[3]);
    		txi[3].setTxi(txi01_PST[3], txi02_PST[3], txi03_PST[3], txi06_PST[3]);
    
    		txi[4].setTxi(txi01_GST[4], txi02_GST[4], txi03_GST[4], txi06_GST[4]);
    		txi[4].setTxi(txi01_PST[4], txi02_PST[4], txi03_PST[4], txi06_PST[4]);
    
    		AxIt1Loop it1Loop = new AxIt1Loop();
    		it1Loop.setIt1Loop(it102[0], it103[0], it104[0], it105[0], it106s[0], txi[0], pam05[0], pid05[0]);
    		it1Loop.setIt1Loop(it102[1], it103[1], it104[1], it105[1], it106s[1], txi[1], pam05[1], pid05[1]);
    		it1Loop.setIt1Loop(it102[2], it103[2], it104[2], it105[2], it106s[2], txi[2], pam05[2], pid05[2]);
    		it1Loop.setIt1Loop(it102[3], it103[3], it104[3], it105[3], it106s[3], txi[3], pam05[3], pid05[3]);
    		it1Loop.setIt1Loop(it102[4], it103[4], it104[4], it105[4], it106s[4], txi[4], pam05[4], pid05[4]);
    
    		AxTable2 table2 = new AxTable2();
    		table2.setIt1Loop(it1Loop);
    
    		//Create Table 3 with details
    		AxTxi taxTbl3 = new AxTxi();
    		taxTbl3.setTxi("GS", "4.25","","");	//sum of GST taxes
    		taxTbl3.setTxi("PG", "4.60","","");	//sum of PST taxes
    		taxTbl3.setTxi("TX", "8.85","","");	//sum of all taxes
    
    		AxTable3 table3 = new AxTable3();
    		table3.setTxi(taxTbl3);
    		
    		//Create and set Level23 Object
    		AxLevel23 level23 = new AxLevel23();
    		level23.setTable1(table1);
    		level23.setTable2(table2);
    		level23.setTable3(table3);
    
    		AxRefund axRefund = new AxRefund();
    		axRefund.setOrderId(order_id);
    		axRefund.setAmount(amount);
    		axRefund.setTxnNumber(txn_number);
    		axRefund.setCryptType(crypt);
    		axRefund.setAxLevel23(level23);
    
    		HttpsPostRequest mpgReq = new HttpsPostRequest();
    		mpgReq.setProcCountryCode(processing_country_code);
    		mpgReq.setTestMode(true); //false or comment out this line for production transactions
    		mpgReq.setStoreId(store_id);
    		mpgReq.setApiToken(api_token);
    		mpgReq.setTransaction(axRefund);
    		mpgReq.setStatusCheck(status_check);
    		mpgReq.send();
    
    		try
    		{
    			Receipt receipt = mpgReq.getReceipt();
    
    			System.out.println("CardType = " + receipt.getCardType());
    			System.out.println("TransAmount = " + receipt.getTransAmount());
    			System.out.println("TxnNumber = " + receipt.getTxnNumber());
    			System.out.println("ReceiptId = " + receipt.getReceiptId());
    			System.out.println("TransType = " + receipt.getTransType());
    			System.out.println("ReferenceNum = " + receipt.getReferenceNum());
    			System.out.println("ResponseCode = " + receipt.getResponseCode());
    			System.out.println("ISO = " + receipt.getISO());
    			System.out.println("BankTotals = " + receipt.getBankTotals());
    			System.out.println("Message = " + receipt.getMessage());
    			System.out.println("AuthCode = " + receipt.getAuthCode());
    			System.out.println("Complete = " + receipt.getComplete());
    			System.out.println("TransDate = " + receipt.getTransDate());
    			System.out.println("TransTime = " + receipt.getTransTime());
    			System.out.println("Ticket = " + receipt.getTicket());
    			System.out.println("TimedOut = " + receipt.getTimedOut());
    			System.out.println("CavvResultCode = " + receipt.getCavvResultCode());
    		}
    		catch (Exception e)
    		{
    			System.out.println(e);
    		}
    
    	}
    }
                    

    AX Refund - Transaction Values

    AxRefund axRefund = new AxRefund();

    HttpsPostRequest mpgReq = new HttpsPostRequest();

    mpgReq.setTransaction(axRefund);

    AX Refund Object Mandatory Values

    Value

    Type

    Limits

    Variable

    Description

    Order ID

    String

    50-character alphanumeric

    axRefund.setOrderId(order_id);

    Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.

    For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.

    The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.

    A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.

    If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.

    Transaction Number

    String

    255 – character alphanumeric

    axRefund.setTxnNumber(txn_number);

    Used when performing follow-on transactions. (That is, Completion, Purchase Correction or Refund.) This must be the value that was returned as the transaction number in the response of the original transaction.

     

     When performing a Completion, this value must reference the Pre-Authorization. When performing a Refund or a Purchase Correction, this value must reference the Completion or the Purchase.

    Amount

    String

    10-character decimal

    axRefund.setAmount(amount);

    Transaction amount This must contain at least 3 digits, two of which are penny values.
    The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.

    E-Commerce indicator

    String

    1-character alphanumeric

    axRefund.setCryptType(crypt);

    Describes the category of e-commerce transaction being processed. Allowable values are:


    • 1 - Mail Order / Telephone Order—Single
    • 2 - Mail Order / Telephone Order—Recurring
    • 3 - Mail Order / Telephone Order—Instalment
    • 4 - Mail Order / Telephone Order—Unknown classification
    • 5 - Authenticated e-commerce transaction (VBV)
    • 6 - Non-authenticated e-commerce transaction (VBV)
    • 7 - SSL-enabled merchant

    In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:


    if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
    if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
    if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
    if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7

    Level 2/3 Data

    Object

    Object

    axRefund.setAxLevel23(level23);

    Object to include level 2/3 addendum data. For further details on how to populate this data see below.

     

    Predecessors:
    Successors:
    • None

    AX Independent Refund

    The AXIndependentRefund is used when the originating transaction was not performed through Moneris Gateway. The AXIndependentRefund will credit a specified amount to the cardholder’s credit card. Please note, the Independent Refund transaction may or may not be supported on your account. If you receive a transaction not allowed error when attempting an independent refund, it may mean the transaction is not supported on your account. If you wish to have the Independent Refund transaction type temporarily enabled (or re-enabled), please contact the Service Centre at 1-866-319-7450.

    Canada Code Sample
    
    package Level23;
    import JavaAPI.*;
    
    public class TestAxRefund
    {
    	public static void main(String[] args)
    	{
    		String store_id = "moneris";
    		String api_token = "hurgle";
    		String processing_country_code = "CA";
    		boolean status_check = false;
    		
    		String order_id="Test1485206231878";
    		String amount="62.37";
    		String txn_number = "660117311902017023161712265-0_11";
    		String crypt="7";
    		
    		//Create Table 1 with details
    		String n101 = "R6";	//Entity ID Code
    		String n102 = "Retailing Inc. International";	//Name
    		String n301 = "919 Oriole Rd.";		//Address Line 1
    		String n401 = "Toronto";		//City
    		String n402 = "On";			//State or Province
    		String n403 = "H1T6W3";			//Postal Code
    
    		String[] ref01 = {"4C", "CR"};	//Reference ID Qualifier
    		String[] ref02 = {"M5T3A5", "16802309004"}; //Reference ID
    
    		String big04 = "PO7758545";	//Purchase Order Number
    		String big05 = "RN0049858";	//Release Number
    		String big10 = "INV99870E";      //Invoice Number
    
    		AxRef axRef1 = new AxRef();
    		axRef1.setRef(ref01[0], ref02[0]);
    		axRef1.setRef(ref01[1], ref02[1]);
    
    		AxN1Loop n1Loop = new AxN1Loop();
    		n1Loop.setN1Loop(n101, n102, n301, n401, n402, n403, axRef1);
    
    		AxTable1 table1 = new AxTable1();
    		table1.setBig04(big04);
    		table1.setBig05(big05);
    		table1.setBig10(big10);
    		table1.setN1Loop(n1Loop);
    		
    		//Create Table 2 with details
    		//the sum of the extended amount field (pam05) must equal the level 1 amount field				
    		String[] it102 = {"1", "1", "1", "1", "1"};	//Line item quantity invoiced
    		String[] it103 = {"EA", "EA", "EA", "EA", "EA"};  //Line item unit or basis of measurement code
    		String[] it104 = {"10.00", "25.00", "8.62", "10.00", "-10.00"};   //Line item unit price
    		String[] it105 = {"", "", "", "", ""};	//Line item basis of unit price code
    		
    		String[] it10618 = {"MG", "MG", "MG", "MG", "MG"};   //Product/Service ID qualifier
    		String[] it10719 = {"DJFR4", "JFJ49", "FEF33", "FEE43", "DISCOUNT"};   //Product/Service ID (corresponds to it10618)
    		
    		String[] txi01_GST = {"GS", "GS", "GS", "GS", "GS"};	//Tax type code
    		String[] txi02_GST = {"0.70", "1.75", "1.00", "0.80","0.00"};	//Monetary amount
    		String[] txi03_GST = {"", "", "", "",""};		//Percent
    		String[] txi06_GST = {"", "", "", "",""};		//Tax exempt code
    		
    		String[] txi01_PST = {"PG", "PG", "PG","PG","PG"};	//Tax type code
    		String[] txi02_PST = {"0.80", "2.00", "1.00", "0.80","0.00"};	//Monetary amount
    		String[] txi03_PST = {"", "", "", "",""};		//Percent
    		String[] txi06_PST = {"", "", "", "",""};		//Tax exempt code
    
    		String[] pam05 = {"11.50", "28.75", "10.62", "11.50", "-10.00"};	//Extended line-item amount
    		String[] pid05 = {"Stapler", "Lamp", "Bottled Water", "Fountain Pen", "DISCOUNT"};	//Line item description
    
    		AxIt106s[] it106s = {new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s()};
    		
    		it106s[0].setIt10618(it10618[0]);
    		it106s[0].setIt10719(it10719[0]);
    		
    		it106s[1].setIt10618(it10618[1]);
    		it106s[1].setIt10719(it10719[1]);
    		
    		it106s[2].setIt10618(it10618[2]);
    		it106s[2].setIt10719(it10719[2]);
    		
    		it106s[3].setIt10618(it10618[3]);
    		it106s[3].setIt10719(it10719[3]);
    		
    		it106s[4].setIt10618(it10618[4]);
    		it106s[4].setIt10719(it10719[4]);
    
    		AxTxi[] txi = {new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi()};
    
    		txi[0].setTxi(txi01_GST[0], txi02_GST[0], txi03_GST[0], txi06_GST[0]);
    		txi[0].setTxi(txi01_PST[0], txi02_PST[0], txi03_PST[0], txi06_PST[0]);
    
    		txi[1].setTxi(txi01_GST[1], txi02_GST[1], txi03_GST[1], txi06_GST[1]);
    		txi[1].setTxi(txi01_PST[1], txi02_PST[1], txi03_PST[1], txi06_PST[1]);
    
    		txi[2].setTxi(txi01_GST[2], txi02_GST[2], txi03_GST[2], txi06_GST[2]);
    		txi[2].setTxi(txi01_PST[2], txi02_PST[2], txi03_PST[2], txi06_PST[2]);
    
    		txi[3].setTxi(txi01_GST[3], txi02_GST[3], txi03_GST[3], txi06_GST[3]);
    		txi[3].setTxi(txi01_PST[3], txi02_PST[3], txi03_PST[3], txi06_PST[3]);
    
    		txi[4].setTxi(txi01_GST[4], txi02_GST[4], txi03_GST[4], txi06_GST[4]);
    		txi[4].setTxi(txi01_PST[4], txi02_PST[4], txi03_PST[4], txi06_PST[4]);
    
    		AxIt1Loop it1Loop = new AxIt1Loop();
    		it1Loop.setIt1Loop(it102[0], it103[0], it104[0], it105[0], it106s[0], txi[0], pam05[0], pid05[0]);
    		it1Loop.setIt1Loop(it102[1], it103[1], it104[1], it105[1], it106s[1], txi[1], pam05[1], pid05[1]);
    		it1Loop.setIt1Loop(it102[2], it103[2], it104[2], it105[2], it106s[2], txi[2], pam05[2], pid05[2]);
    		it1Loop.setIt1Loop(it102[3], it103[3], it104[3], it105[3], it106s[3], txi[3], pam05[3], pid05[3]);
    		it1Loop.setIt1Loop(it102[4], it103[4], it104[4], it105[4], it106s[4], txi[4], pam05[4], pid05[4]);
    
    		AxTable2 table2 = new AxTable2();
    		table2.setIt1Loop(it1Loop);
    
    		//Create Table 3 with details
    		AxTxi taxTbl3 = new AxTxi();
    		taxTbl3.setTxi("GS", "4.25","","");	//sum of GST taxes
    		taxTbl3.setTxi("PG", "4.60","","");	//sum of PST taxes
    		taxTbl3.setTxi("TX", "8.85","","");	//sum of all taxes
    
    		AxTable3 table3 = new AxTable3();
    		table3.setTxi(taxTbl3);
    		
    		//Create and set Level23 Object
    		AxLevel23 level23 = new AxLevel23();
    		level23.setTable1(table1);
    		level23.setTable2(table2);
    		level23.setTable3(table3);
    
    		AxRefund axRefund = new AxRefund();
    		axRefund.setOrderId(order_id);
    		axRefund.setAmount(amount);
    		axRefund.setTxnNumber(txn_number);
    		axRefund.setCryptType(crypt);
    		axRefund.setAxLevel23(level23);
    
    		HttpsPostRequest mpgReq = new HttpsPostRequest();
    		mpgReq.setProcCountryCode(processing_country_code);
    		mpgReq.setTestMode(true); //false or comment out this line for production transactions
    		mpgReq.setStoreId(store_id);
    		mpgReq.setApiToken(api_token);
    		mpgReq.setTransaction(axRefund);
    		mpgReq.setStatusCheck(status_check);
    		mpgReq.send();
    
    		try
    		{
    			Receipt receipt = mpgReq.getReceipt();
    
    			System.out.println("CardType = " + receipt.getCardType());
    			System.out.println("TransAmount = " + receipt.getTransAmount());
    			System.out.println("TxnNumber = " + receipt.getTxnNumber());
    			System.out.println("ReceiptId = " + receipt.getReceiptId());
    			System.out.println("TransType = " + receipt.getTransType());
    			System.out.println("ReferenceNum = " + receipt.getReferenceNum());
    			System.out.println("ResponseCode = " + receipt.getResponseCode());
    			System.out.println("ISO = " + receipt.getISO());
    			System.out.println("BankTotals = " + receipt.getBankTotals());
    			System.out.println("Message = " + receipt.getMessage());
    			System.out.println("AuthCode = " + receipt.getAuthCode());
    			System.out.println("Complete = " + receipt.getComplete());
    			System.out.println("TransDate = " + receipt.getTransDate());
    			System.out.println("TransTime = " + receipt.getTransTime());
    			System.out.println("Ticket = " + receipt.getTicket());
    			System.out.println("TimedOut = " + receipt.getTimedOut());
    			System.out.println("CavvResultCode = " + receipt.getCavvResultCode());
    		}
    		catch (Exception e)
    		{
    			System.out.println(e);
    		}
    
    	}
    }
                    

    AX Independent Refund - Transaction Values

    AxIndependentRefund axIndependentRefund = new AxIndependentRefund();

    HttpsPostRequest mpgReq = new HttpsPostRequest();

    mpgReq.setTransaction(axIndependentRefund);

    AX Independent Refund Object Mandatory Values

    Value

    Type

    Limits

    Variable

    Description

    Order ID

    String

    50-character alphanumeric

    axIndependentRefund.setOrderId(order_id);

    Merchant-defined transaction identifier that must be unique for every Purchase, Pre-Authorization and Independent Refund transaction. No two transactions of these types may have the same order ID.

    For Refund, Completion and Purchase Correction transactions, the order ID must be the same as that of the original transaction.

    The last 10 characters of the order ID are displayed in the “Invoice Number” field on the Merchant Direct Reports. However only letters, numbers and spaces are sent to Merchant Direct.

    A minimum of 3 and a maximum of 10 valid characters are sent to Merchant Direct. Only the last characters beginning after any invalid characters are sent. For example, if the order ID is 1234-567890, only 567890 is sent to Merchant Direct.

    If the order ID has fewer than 3 characters, it may display a blank or 0000000000 in the Invoice Number field.

    Amount

    String

    10-character decimal

    axIndependentRefund.setAmount(amount);

    Transaction amount This must contain at least 3 digits, two of which are penny values.
    The minimum allowable value is $0.01, and the maximum allowable value is $9999999.99. Transaction amounts of $0.00 are not allowed.

    Credit card number

    String

    20-character numeric

    axIndependentRefund.setPan(pan);

    Most credit card numbers today are 16 digits, but some 13-digit numbers are still accepted by some issuers. This field has been intentionally expanded to 20 digits in consideration for future expansion and potential support of private label card ranges.

    Expiry date

    String

    4-character numeric
    YYMM format.

    axIndependentRefund.setExpDate(expdate);

    Submit in YYMM format.
    Note: This is the reverse of the date displayed on the physical card, which is MMYY.

    E-Commerce indicator

    String

    1-character alphanumeric

    axIndependentRefund.setCryptType(crypt);

    Describes the category of e-commerce transaction being processed. Allowable values are:


    • 1 - Mail Order / Telephone Order—Single
    • 2 - Mail Order / Telephone Order—Recurring
    • 3 - Mail Order / Telephone Order—Instalment
    • 4 - Mail Order / Telephone Order—Unknown classification
    • 5 - Authenticated e-commerce transaction (VBV)
    • 6 - Non-authenticated e-commerce transaction (VBV)
    • 7 - SSL-enabled merchant

    In Credential on File transactions where the request field e-commerce indicator is also being sent: the allowable values for e-commerce indicator are dependent on the value sent for payment indicator, as follows:


    if payment indicator = R, then allowable values for e-commerce indicator: 2, 5 or 6
    if payment indicator = C, then allowable values for e-commerce indicator: 1, 5, 6 or 7
    if payment indicator = U, then allowable values for e-commerce indicator: 1 or 7
    if payment indicator = Z, then allowable values for e-commerce indicator: 1, 5, 6 or 7

    Level 2/3 Data

    Object

    Object

    axIndependentRefund.setAxLevel23(level23);

    Object to include level 2/3 addendum data. For further details on how to populate this data see below.

    AX Independent Refund transaction object optional values

    Value Type Limits Set method Description

    Customer ID

    String

    50-character alphanumeric

    axIndependentRefund.setCustId(cust_id);

    This can be used for policy number, membership number, student ID, invoice number and so on.

    This field is searchable from the Moneris Merchant Resource Centre.


    Predecessors:
    • Transaction that was completed on an independent system
    Successors:
    • None

    Definition of American Express Level 2/3 Request Fields

    The Level 2/3 addendum data below pertains to purchasing card data processing. The Level 2/3 data within this section applies to all of the following transactions and is passed as part of the transaction request:

    Things to consider:

    • Please ensure the addendum data below is complete and accurate.
    • Please ensure the math on quantities calculations, amounts, discounts, taxes, etc properly adds up to the overall transaction amount. Incorrect amounts will cause the transaction to be rejected.
    Object definition

    AxLevel23 level23 = new AxLevel23();

    Required

    Value

    Limits

    Set Method

    Description

    Yes

    Table1

    Object

    AxTable1 table1 = new AxTable1();
    level23.setTable1(table1);

    Refer below for further breakdown and definition of table1

    Yes

    Table2

    Object

    AxTable2 table2 = new AxTable2();
    level23.setTable2(table2);

    Refer below for further breakdown and definition of table2

    Yes

    Table3

    Object

    AxTable3 table3 = new AxTable3();
    level23.setTable3(table3);

    Refer below for further breakdown and definition of table3

     

    Table 1

    Table 1 contains the addendum data heading information. Contains information such as identification elements that uniquely identify an invoice (transaction), the customer name and shipping address.

    Object definition

    AxTable1 table1 = new AxTable1();

    Required

    Value

    Limits

    Variable

    Description

    Conditonal*

    Purchase Order Number

    22-character alphanumeric

    table1.setBig04(big04);

    The cardholder supplied Purchase Order Number, which is entered by the merchant at the point-of-sale. This entry is used in the Statement/Reporting process and may include accounting information specific to the client. *This element is mandatory, if the merchant’s customer provides a Purchase Order Number. 

    No

    Release Number

    30-character alphanumeric

    table1.setBig05(big05);

    A number that identifies a release against a Purchase Order previously placed by the parties involved in the transaction.

    No

    Invoice Number

    8-character alphanumeric

    table1.setBig10(big10);

    Contains the Amex invoice/reference number.

    No

    N1Loop

    Object

    table1.setN1Loop(n1Loop)

    Refer below for further breakdown and definition of N1Loop object

     

    Table 1 - Setting N1Loop object 

    The N1Loop data set contains the Requester names. It can also optionally contain the buying group, ship from, ship to and receiver details. A minimum of at least 1 n1Loop must be set. Up to 5 n1Loop can be set.

    • Mandatory:
      • Requester (i.e. cardholder/buyer) details – this should be populated as the first occurrence of n101 where n101 = R6
    • Optional:
      • Buying group
      • Ship From
      • Ship To
      • Receiver
    Object definition

    n1Loop.setN1Loop(n101, n102, n301, n401, n402, n403, axRef1);

    Required

    Value

    Limits

    Variable

    Description

    Yes

    Entity Identifier Code

    2-character alphanumeric

    n101

    Supported values:

    • R6 - Requester (required)
    • BG - Buying Group (optional)
    • SF - Ship From (optional)
    • ST - Ship To (optional)
    • 40 - Receiver (optional) 

    Yes

    Name

    40-character alphanumeric

    n102

    This name field is populated depending on the Entity Identifier Code defined in n101.

    n101 value

    n102 denotation

    R6

    Must contain the Requester name, which is the name of the individual (not the company) requesting the goods or services. (Mandatory)

    BG

    Buying Group Name

    SF

    Ship From Name

    ST

    Ship To Name

    40

    Receiver Name

    No

    Address

    40-character alphanumeric

    n301

    Address Information. This field is populated depending on the Entity Identifier Code defined in n101.

    n101 value

    N301 denotation

    R6

    Must contain the Requester address, which is the address of the individual (not the company) requesting the goods or services. (Mandatory)

    BG

    Buying Group Address

    SF

    Ship From Address

    ST

    Ship To Address

    40

    Receiver Address

    No

    City

    30-character alphanumeric

    n401

    City Name. If the city name is longer than 30 characters please use proper and meaningful abbreviations when possible. Do not truncate the data. This field is populated depending on the Entity Identifier Code defined in n101.

    n101 value

    N401 denotation

    R6

    Must contain the Requester city name, which is the city of the individual (not the company) requesting the goods or services. (Mandatory)

    BG

    Buying Group City Name

    SF

    Ship From City Name

    ST

    Ship To City Name

    40

    Receiver City Name

    No

    State or Province

    2-character alphanumeric

    n402

    State or Province Code. This field is populated depending on the Entity Identifier Code defined in n101. Please use ISO 3166-2:CA or ISO 3166-2:US format or EDI format – ASC X12-4050.

    n101 value

    N402 denotation

    R6

    Must contain the Requester State or Province Code, which is the state/province of the individual (not the company) requesting the goods or services. (Mandatory)

    BG

    Buying Group State or Province Code

    SF

    Ship From State or Province Code

    ST

    Ship To State or Province Code

    40

    Receiver State or Province Code

    No

    Postal Code

    15-character alphanumeric

    n403

    Postal Code. This field is populated depending on the Entity Identifier Code defined in n101. For Canadian address please use ANA<space>NAN format.

    n101 value

    N403 denotation

    R6

    Must contain the Requester Postal Code, which is the postal code of the individual (not the company) requesting the goods or services. (Mandatory)

    BG

    Buying Group Postal Code

    SF

    Ship From Postal Code

    ST

    Ship To Postal Code

    40

    Receiver Postal Code

    No

    AxRef

    Object

    AxRef axRef1 = new AxRef();

    Refer below for further breakdown and definition of AxRef object. This object contains the customer postal code (mandatory) and customer reference number (optional). A minimum of 1 axRef1 must be set. A maximum of 2 axRef1’s may be set.

     

    Table 1 - Setting AxRef object

    AxRef axRef1 = new AxRef();

    String[] ref01 = {"4C", "CR"}; //Reference ID Qualifier
    String[] ref02 = {"M5T3A5", "16802309004"}; //Reference ID

    axRef1.setRef(ref01[0], ref02[0]);
    axRef1.setRef(ref01[1], ref02[1]);

    Required

    Value

    Limits

    Variable

    Description

    Yes

    Reference Identification Qualifier

    2-character alphanumeric

    ref01

    Reference Identification Qualifier. This element may contain the following qualifiers for the corresponding occurrences of the N1 loop:

    n101 value

    ref01 denotation

    R6

    Supported values:

    • 4C - Shipment Destination Code (mandatory)
    • CR - Customer Reference Number (conditional)

    BG

    n/a

    SF

    n/a

    ST

    n/a

    40

    n/a

    Yes

    Reference Identification

    15-character alphanumeric

    ref02

    This field must be populated for each ref01 provided.

    n101 value

    ref01 value

    ref02 denotation

    R6

    4C

    This element must contain the Amex Ship-to Postal Code of the destination where the commodity was shipped. If the Ship-to Postal Code is unavailable, the postal code of the merchant location where the transaction took place may be substituted.

    R6

    CR

    This element must contain the Amex Card member Reference Number (e.g., purchase order, cost center, project number, etc.) that corresponds to this transaction, if provided by the Cardholder. This information may be displayed in the statement/reporting process and may include client-specific accounting information.

    BG

    n/a

     

    SF

    n/a

     

    ST

    n/a

     

    40

    n/a

     

     

    Table 2

    Table 2 includes the transaction’s addendum detail.  It contains transaction data including reference codes, debit or credit and tax amounts, line item detail descriptions, shipping information and much more. All transaction data in an invoice relate to a single transaction and cardholder account number.

    Object definition

    AxTable2 table2 = new AxTable2();

    Required

    Variable

    Value

    Limits

    Description

    No

    It1 loop 

    table2.setIt1Loop(it1Loop);

    Object

    Refer below for further breakdown and definition of object details.

     

    Table 2 - Setting AxIt1Loop object

    The AxIt1Loop data defines the baseline item data for the invoice. This data is defined for each item/service purchased and included within this invoice. This data set contains basic transaction data, including quantity, unit of measure, unit price and goods/services reference information.

    • A minimum of 1 it1Loop required.
    • A maximum of 999 it1Loop’s supported.
    Object definition

    AxIt1Loop it1Loop = new AxIt1Loop();

    it1Loop.setIt1Loop(it102[0], it103[0], it104[0], it105[0], it106s[0], txi[0], pam05[0], pid05[0]);

    it1Loop.setIt1Loop(it102[1], it103[1], it104[1], it105[1], it106s[1], txi[1], pam05[1], pid05[1]);

    Required

    Variable

    Value

    Limits

    Description

    Yes

    it102

    Line Item Quantity
    Invoiced

    10-character decimal

    Quantity of line item. Up to 2 decimal places supported. Minimum amount is 0.0 and maximum is 9999999999.

    Yes

    it103

    Unit or Basis for
    Measurement
    Code

    2-character alphanumeric

    The line item unit of measurement code. Must contain a code that specifies the units in which the value is expressed or the manner in which a measurement is taken. Example, EA = each, E5=inches. See ANSI X-12 EDI Allowable Units of Measure and Codes for the list of codes.

    Yes

    it104

    Unit Price

    15-character decimal

    Line item cost per unit. Must contain 2 decimal places. Minimum amount is 0.00 and maximum is 999999.99

    No

    it105

    Basis or Unit Price
    Code

    2-character alphanumeric

    Code identifying the type of unit price for an item. Example, DR = dealer, AP = advise price. See ASC X12 004010 Element 639 for list of codes. 

    No

    AxIt106s

     

    Object

    Refer below for further breakdown and definition of object details.

    No

    AxTxi

     

    Object

    Refer below for further breakdown and definition of object details.. A maximum of 12 AxTxi (tax information data sets) may be defined. Please note that if line item level tax information is populated in AxTxi in Table2, then tax totals for the entire invoice (transaction) must be entered in Table3.

    Yes

    pam05

    Line Item
    Extended Amount

    8-character decimal

     Contains the individual item amount that is normally calculated as price multiplied by quantity. Must contain 2 decimal places. Minimum amount is 0.00 and maximum is 99999.99

    Yes

    pid05

    Line Item
    Description

    80-character alphanumeric

    Line Item description. Contains the description of the individual item purchased. This field pertain to each line item in the transaction. 

     

    Table 2 - Setting AxIt106s object

    AxIt106s[] it106s = {new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s(), new AxIt106s()};
    String[] it10618 = {"MG", "MG", "MG", "MG", "MG"}; //Product/Service ID qualifier
    String[] it10719 = {"DJFR4", "JFJ49", "FEF33", "FEE43", "DISCOUNT"}; //Product/Service ID (corresponds to it10618)

    Required

    Value

    Limits

    Variable

    Description

    No

    it106s[0].setIt10618(it10618[0]);

    it106s[1].setIt10618(it10618[1]);

    Product/Service ID
    Qualifier

    2-character alphanumeric

    Supported values:

    • MG - Manufacturer’s Part Number
    • VC - Supplier Catalog Number
    • SK - Supplier Stock Keeping Unit Number
    • UP - Universal Product Code
    • VP – Vendor Part Number
    • PO – Purchase Order Number
    • AN – Client Defined Asset Code

    No

    it106s[0].setIt10719(it10719[0]);

    it106s[1].setIt10719(it10719[1]);

     

    Product/Service ID

    it10618

    it10719 - size/type

    VC

    20-character alphanumeric

    PO

    22-character alphanumeric

    Other

    30-character alphanumeric

     

    Product/Service ID corresponds to the preceding qualifier defined in it10618. The maximum length depends on the qualifier defined in it10618.

     

    Table 2 - Setting AxTxi object

    //Create Table 2 with details
    String[] txi01_GST = {"GS", "GS", "GS", "GS", "GS"}; //Tax type code
    String[] txi02_GST = {"0.70", "1.75", "1.00", "0.80","0.00"}; //Monetary amount
    String[] txi03_GST = {"5.0", "5.0", "5.0", "5.0","5.0"}; //Percent
    String[] txi06_GST = {"", "", "", "",""}; //Tax exempt code

    String[] txi01_PST = {"PG", "PG", "PG","PG","PG"}; //Tax type code
    String[] txi02_PST = {"0.80", "2.00", "1.00", "0.80","0.00"}; //Monetary amount
    String[] txi03_PST = {"7.0", "7.0", "7.0", "7.0","7.0"}; //Percent
    String[] txi06_PST = {"", "", "", "",""}; //Tax exempt code

     

    AxTxi[] txi = {new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi(), new AxTxi()};
    txi[0].setTxi(txi01_GST[0], txi02_GST[0], txi03_GST[0], txi06_GST[0]);
    txi[0].setTxi(txi01_PST[0], txi02_PST[0], txi03_PST[0], txi06_PST[0]);
    txi[1].setTxi(txi01_GST[1], txi02_GST[1], txi03_GST[1], txi06_GST[1]);
    txi[1].setTxi(txi01_PST[1], txi02_PST[1], txi03_PST[1], txi06_PST[1]);
    txi[2].setTxi(txi01_GST[2], txi02_GST[2], txi03_GST[2], txi06_GST[2]);
    txi[2].setTxi(txi01_PST[2], txi02_PST[2], txi03_PST[2], txi06_PST[2]);
    txi[3].setTxi(txi01_GST[3], txi02_GST[3], txi03_GST[3], txi06_GST[3]);
    txi[3].setTxi(txi01_PST[3], txi02_PST[3], txi03_PST[3], txi06_PST[3]);
    txi[4].setTxi(txi01_GST[4], txi02_GST[4], txi03_GST[4], txi06_GST[4]);
    txi[4].setTxi(txi01_PST[4], txi02_PST[4], txi03_PST[4], txi06_PST[4]);

    Required

    Variable

    Value 

    Limits

    Description 

    Conditional*

    txi01

    Tax Type code

    2-character alphanumeric

    Tax type code applicable to Canada and US only.  For Canada, this field must contain a code that specifies the type of tax. If txi01 is used, then txi02, txi03 or txi06 must be populated. Valid codes include the following:

    • CT – County/Tax (optional)
    • CA – City Tax (optional)
    • EV – Environmental Tax (optional)
    • GS – Good and Services Tax (GST) (optional)
    • LS – State and Local Sales Tax (optional)
    • LT – Local Sales Tax (optional)
    • PG – Provincial Sales Tax (PST) (optional)
    • SP – State/Provincial Tax a.k.a. Quebec Sales Tax (QST) (optional)
    • ST – State Sales Tax (optional)
    • TX – All Taxes (required)
    • VA – Value-Added Tax a.k.a. Canadian Harmonized Sales Tax (HST) (optional)

    Conditional*

    txi02

    Monetary Amount

    6-character decimal

     This element may contain the monetary tax amount that corresponds to the Tax Type Code in txi01. This amount will be in CAD currency.

    Notes:

    1. If txi02 is used in mandatory occurrence txi01=TX, txi02 must contain the total tax amount applicable to the entire invoice (transaction)
    2. If taxes are not applicable for the entire invoice (transaction), txi02 must be 0.00.

    The maximum value that can be entered in this field is “9999.99”, which is $9,999.99 (CAD).

    A debit is entered as: 9999.99

    A credit is entered as: –9999.99

    Conditional*

    txi03

    Percent

    10-character decimal

    Contains the tax percentage (in decimal format) that corresponds to the tax type code defined in txi01. Up to 2 decimal places supported.

    Conditional*

    txi06

    Tax Exempt Code

    1-character alphanumeric

    This element may contain the Tax Exempt Code that identifies the exemption status from sales and tax that corresponds to the Tax Type Code in txi01. Supported values:

    • 1 – Yes (Tax Exempt)
    • 2 – No (Not Tax Exempt)
    • 4 – Not Exempt/For Resale
    • A – Labor Taxable, Material Exempt
    • B – Material Taxable, Labor Exempt
    • C – Not Taxable
    • F – Exempt (Good / Services Tax)
    • G – Exempt (Provincial Sales Tax)
    • L – Exempt Local Service
    • R – Recurring Exempt
    • U – Usage Exempt

     

    Table 3

    Table 3 includes the transaction addendum summary. It contains the total invoice (transaction) amount, sales tax, freight and/or handling charges and invoice summary information, including total line items, number of segments in the invoice, and the transaction set control number (a.k.a., batch number).

    Object definition

    AxTable3 table3 = new AxTable3();

    Required

    Variable

    Value

    Limits

    Description

    Conditional*

    AxTxi

    table3.setTxi(taxTbl3);

    Object 

    Refer below for further breakdown and definition of object details.Please note that if line item level tax information is populated in AxTxi in Table2, then tax totals for the entire invoice (transaction) must be entered in Table3. A maximum of 10 AxTxi’s may be set in Table3. 

    Table 3 - Setting AxTxi object

    The mandatory tax information data set must contain the total tax amount applicable to the entire invoice (transaction) which includes all line items identified in Table2. If taxes are not applicable for the entire invoice (transaction), then txi02 must be set to 0.00.

    Tax totals must be entered in this mandatory tax information segment in Table 3, even if line item detail level tax data is reported in Table 2.

    At least one occurrence of txi02, txi03 or txi06 is required.

    AxTxi taxTbl3 = new AxTxi();
    taxTbl3.setTxi("GS", "4.25","5.0",""); //sum of GST taxes
    taxTbl3.setTxi("PG", "4.60","7.0",""); //sum of PST taxes
    taxTbl3.setTxi("TX", "8.85","13.0",""); //sum of all taxes

    Required

    Variable

    Value 

    Limits

    Description 

    Conditional*

    txi01

    Tax Type code

    2-character alphanumeric

    Tax type code applicable to Canada and US only.  For Canada, this field must contain a code that specifies the type of tax. If txi01 is used, then txi02, txi03 or txi06 must be populated. Valid codes include the following:

    • CT – County/Tax (optional)
    • CA – City Tax (optional)
    • EV – Environmental Tax (optional)
    • GS – Good and Services Tax (GST) (optional)
    • LS – State and Local Sales Tax (optional)
    • LT – Local Sales Tax (optional)
    • PG – Provincial Sales Tax (PST) (optional)
    • SP – State/Provincial Tax a.k.a. Quebec Sales Tax (QST) (optional)
    • ST – State Sales Tax (optional)
    • TX – All Taxes (required)
    • VA – Value-Added Tax a.k.a. Canadian Harmonized Sales Tax (HST) (optional)

    Conditional*

    txi02

    Monetary Amount

    6-character decimal

     This element may contain the monetary tax amount that corresponds to the Tax Type Code in txi01. This amount will be in CAD currency.

    Notes:

    1. If txi02 is used in mandatory occurrence txi01=TX, txi02 must contain the total tax amount applicable to the entire invoice (transaction)
    2. If taxes are not applicable for the entire invoice (transaction), txi02 must be 0.00.

    The maximum value that can be entered in this field is “9999.99”, which is $9,999.99 (CAD).

    A debit is entered as: 9999.99

    A credit is entered as: –9999.99

    Conditional*

    txi03

    Percent

    10-character decimal

    Contains the tax percentage (in decimal format) that corresponds to the tax type code defined in txi01. Up to 2 decimal places supported.

    Conditional*

    txi06

    Tax Exempt Code

    1-character alphanumeric

    This element may contain the Tax Exempt Code that identifies the exemption status from sales and tax that corresponds to the Tax Type Code in txi01. Supported values:

    • 1 – Yes (Tax Exempt)
    • 2 – No (Not Tax Exempt)
    • 4 – Not Exempt/For Resale
    • A – Labor Taxable, Material Exempt
    • B – Material Taxable, Labor Exempt
    • C – Not Taxable
    • F – Exempt (Good / Services Tax)
    • G – Exempt (Provincial Sales Tax)
    • L – Exempt Local Service
    • R – Recurring Exempt
    • U – Usage Exempt