Description
The Sale function initiates the payment application to facilitate payment for goods or services rendered to customers.
Request
Sample Bundle: Sale
"launchType": "SALE"
"merchantID": "770000000000123"
"authenticationKey": "e27b5ce6-8ba6-4746-9453-536728f7cbeb"
"transactionAmount": 1000Parameters
PARAMETERS | TYPE | DESCRIPTION | EXAMPLE |
|---|---|---|---|
REQUIRED | |||
launchType | STRING | Must be“SALE” | SALE |
merchantID | STRING | The merchant ID assigned to the merchant. | 910100000000001 |
authenticationKey | STRING | The authentication token that was generated by the server on a successful retail auth call to the Ecentric Payment App. | e27b5456-8bff6-4746-94bg-367253356eb |
transactionAmount | LONG | The full transaction amount to be charged in cents. | 1000 |
OPTIONAL | |||
merchantName | STRING | The name of the merchant that requested the transaction, as stored at the bank. | Merchant A |
cashAmount | LONG | The amount of cash that was withdrawn in cents. | 500 |
transactionDescription | STRING | Reference description for the merchant’s records. | 3rd party app desc |
transactionReferenceNumber | STRING | Reference number field that also appears in a merchant portal when available. | ref#123456 |
cellNumberToSMSReceipt | STRING | 10-digit cell phone number for receipt SMS destination. Can be blank. | 0721234567 |
emailAddressToSendReceipt | ALPHANUMERIC | Valid email address for receipt email destination. Can be blank. | |
isReceiptRequired | BOOLEAN | If set to true, at least one of the receipt parameters above needs to be set. | true |
alwaysShowTransactionStatusScreen | BOOLEAN | Once the Ecentric Payment App has processed a transaction there is a status screen that shows the success/failure of processing. | true |
externalSTAN | STRING | A systems trace number generated by some 3rd party ERP systems. | 123456 |
externalRRN | STRING ALPHANUMERIC | A RRN generated by some 3rd party ERP systems. | ABCDEF123456 |
externalTransactionGUID | STRING ALPHANUMERIC | A GUID that identifies a specific transaction generated by 3rd party ERP systems. | 2fdca02f-3cbe-4e8c-82ad-86a1a16b72e8 |
externalInvoiceGUID | STRING ALPHANUMERIC | A GUID that identifies a particular invoice that may appear on more than one transaction. | 2fdca02f-3cbe-4e8c-82ad-86a1a16b72e9 |
transactionUuid | STRING ALPHANUMERIC | Unique ID of transaction | bdf9d0af-17b3-48ca-8a0b-37dc52bf49bc |
externalTransactionDateTime | STRING | A date and time the transaction was generated on the 3rd party ERP systems. Has the format of “yyyy-MM-dd'T'HH:mm:ss” | 2017-04-28T09:30:00 |
externalTerminalId | STRING | A terminal identifier for device configured on the 3rd party ERP system. | 98100010 |
latitude | STRING | A geolocation identifier indicating the latitude position of the device. | -28.1619942 |
longitude | STRING | A geolocation identifier indicating the longitude position of the device. | 30.2350981 |
accuracy | STRING | A accuracy indicator of the geolocation. | |
additionalData | OBJECT | See Additional Parameters section for the AdditionalData Object. | N/A |
Additional Parameters
AdditionalData Object
PARAMETERS | TYPE | SIZE(MAX) | DESCRIPTION | EXAMPLE |
|---|---|---|---|---|
Tokenization | OBJECT | N/A | See parameters under Tokenization Object. | N/A |
extendedTrxType | NUMERIC STRING | 12 | The unique 4 digit number configured on Postilion switch, which 3rd party integrators can use to route transactions to a different acquirer. | 1234 |
(*) | NUMERIC STRING | 15 | The unique ID for each sub merchant. Determined by the PayFac. | 574595612358745 |
Tokenization Object
| PARAMETERS | TYPE | SIZE(MAX) | DESCRIPTION | EXAMPLE |
|---|---|---|---|---|
| MerchantUserID | NUMERIC STRING | 16 | Creates the ability to tokenize a customer card, in order for a PSP to perform subsequent transaction on the terminal as another means of securing customer information during transaction processing. | 1 |
Sample Code
private void doSale() {
Intent intent = new Intent();
intent.setClassName("com.ecentric.ecentricpay", "com.ecentric.ecentricpay.MainActivity");
Bundle dataBundle = new Bundle();
dataBundle.putString("launchType", "SALE");
dataBundle.putString("merchantID", "910100000000001")
dataBundle.putString("authenticationKey", "received_authenticationKey");
dataBundle.putLong("transactionAmount", 1000); // amount in cents
JSONObject additionalData = new JSONObject();
try {
// Add subMid field
additionalData.put("subMid", "574595612358745");
// Add extendedTrxType
additionalData.put("extendedTrxType", "6705");
// Create a merchantInfo object
JSONObject merchantInfo = new JSONObject();
merchantInfo.put("Phone_No", "0114567891");
merchantInfo.put("Street", "cnr Von Willich Ave &, Leonie St);
merchantInfo.put("City", "Johannesburg");
merchantInfo.put("Province", "Gauteng");
merchantInfo.put("Country_Code", "ZA");
merchantInfo.put("Currency_Code", "710");
merchantInfo.put("Postal_Code", "0157");
additionalData.put("Merchant_Info", merchantInfo);
// Create a Tokenization object
JSONObject tokenization = new JSONObject();
tokenization.put("MerchantUserID", "1");
additionalData.put("Tokenization", tokenization);
dataBundle.putString("additionalData", additionalData.toString());
} catch (JSONException e) {
e.printStackTrace();
}
intent.putExtra("ecentricBundle", dataBundle);
try {
intentLauncher.launch(intent);
} catch (Exception e) {
Log.e(TAG, "Error launching intent: " + e);
}Response
Sample Bundle
"resultDescription": "APPROVED",
"buildInfo": "Ecentric",
"isReceiptDataAvailable": true,
"resultCode": "01",
"receiptBundle": {
"MERCHANT_REGION_CODE": "09",
"RC_ALT": "00",
"CASH_AMOUNT_CENTS": "0",
"SEQ_NO": "000",
"STATUS": "APPROVED",
"BUDGET_PERIOD": "0",
"CARD_TYPE": "",
"PAN_WITH_BIN": "445143******2309",
"MERCHANT_ID": "770000000000123",
"TIMESTAMP": "1745476020950",
"EXTERNAL_TRANSACTION_DATETIME": "",
"PROCESSING_CODE": "0",
"RC_DESCRIPTION": "Approved",
"EXTERNAL_INVOICE_GUID": "",
"CURRENT_BALANCE_CENTS" = "705000",
"REPLACEMENT_MERCHANT_ID": "",
"BATCH_NO": "000",
"AVAILABLE_BALANCE_FORMATTED" = "R 7000.00"
"AUTH_PROFILE": "0",
"INTERCHANGE": "null",
"ESC_BY_AUTH_CODE": "226 00 IH 15882",
"TX_TYPE": "0",
"ACC_TYPE_DESC": "Default",
"TIP_AMOUNT": "",
"AVAILABLE_BALANCE_CENTS" = "700000",
"CURRENCY_CODE": "0710",
"AUTH_CODE": "15882",
"RC": "00",
"AID": "A0000000031010",
"ATC": "055D",
"CRY": "13A531FAFC4D29F6",
"CVM": "none",
"IAD": "06010A03A04000",
"PAN": "************2309",
"RRN": "511427060006",
"TSI": "0000",
"TVR": "0000000000",
"APSN": "",
"DATE": "2025-04-24T06:27:06.749+0000",
"STAN": "",
"NAME_ON_CARD": "UnknownCardholderName",
"AMOUNT_CENTS": "1000",
"ABS_AMOUNT": "10.00",
"TOKEN": "",
"RECEIPT_NUMBER": "",
"EXTENDED_TRX_TYPE": "",
"TERMINAL_ID": "77012398",
"TX_TYPE_DESCRIPTION": "SALE",
"EXTERNAL_TERMINAL_ID": "",
"FORMATTED_AMOUNT": "R 10.00",
"DESCRIPTION": "511427060006",
"BATCH_NUMBER": "0",
"SETTLEMENT_DATE": "",
"SURCHARGE_AMOUNT": "0.00",
"CURRENT_BALANCE_FORMATTED" = "R 7050.00",
"EXTERNAL_TRANSACTION_GUID": "",
"CARD_BIN": "445143",
"TRANSACTION_INFO": "22600IH15882",
"REPLACEMENT_TERMINAL_ID": "",
"POS_ENTRY": "701",
"RC_ISO_DESCRIPTION": "Approved or completed successfully",
"APPLICATION_LABEL": "VISA SAVINGS",
"MERCHANT_CITY": "Cape Town",
"MERCHANT_NAME": "Istore",
"CUSTOMER_NAME": "",
"APP_VERSION": "",
"CARD_SEQ_NO": "0",
"APP_LABEL": "VISA SAVINGS",
"INVOICE_NUM": "",
"MESSAGE_1": "",
"MESSAGE_2": "",
"CARD_TRANSACTION_TYPE": "CONTACTLESS",
"FORMATTED_CASH_AMOUNT": "R 0.00",
"CASH_AMOUNT": "0.00",
"RESULT_CODE": "00",
"MERCHANT_COUNTRY_CODE": "ZA",
"REPRINT": "false",
"PAN_HASH": "3f5c9f528a4bfa5d5e4137824d0b08491b5bc30b062ad778a818770f10771019",
"AMOUNT": "10.00",
"TIP_LABEL": "",
"DIGITS": "2309",
"CVM_ABSA": ""
},
"merchantID": "770000000000123",
"serialNumber": "PC05P2CG10036",
"isApproved": "true",
"launchType": "SALE",
"cashAmount": "0",
"transactionUuid": "bdf9d0af-17b3-48ca-8a0b-37dc52bf49bc",
"appVersion": "1.9.2",
"transactionAmount": "1000"Parameters
PARAMETERS | TYPE | DESCRIPTION | EXAMPLE |
|---|---|---|---|
launchType | STRING | Echo of the launchType used to launch the Ecentric Payment App. | SALE |
resultCode | STRING | Represents the result status of the intent call to the Ecentric Payment App | 00 |
resultDescription | STRING | A user readable representation of the above resultCode i.e. Approved for resultCode 01. | APPROVED |
merchantID | STRING | Echo of the merchantID used in the request. | 910100000000001 |
merchantName | STRING | The name of the merchant that requested the transaction as stored at the bank. | Merchant A |
transactionAmount | STRING | Approved total transactionAmount. | 1000 |
cashAmount | STRING | Approved cashAmount. | 500 |
transactionDescription | STRING | Echo of the transactionDescription used to launch the Ecentric Payment App. | 3rd party app desc |
cellNumberToSMSReceipt | STRING | Masked out value of the cell number used to send the receipt to. |
|
emailAddressToSendReceipt | STRING | Masked out value of the email address used to send the receipt to. |
|
isReceiptRequired | STRING | Echo of the isReceiptRequired used to launch the Ecentric Payment App. | true |
isReceiptDataAvailable | STRING | Boolean indicating whether a receiptBundle object is available. Will always be included for approved or declined transactions. | true |
receiptBundle | STRING | Consists of a sub-bundle of server parameters that can be used by the partner application to create a receipt. | See Sample ecentricBundle SALE Response. |
appVersion | STRING | The software version currently running on the Ecentric Payment App. | 1.9.2 |
externalSTAN | STRING | Echo of the systems trace number generated by some 3rd party ERP systems. | 123456 |
externalRRN | STRING | Echo of the RRN generated by some 3rd party ERP systems. | ABCDEF123456 |
externalTransactionGUID | STRING | Echo of the GUID that identifies a specific transaction generated by 3rd party ERP systems. | 2fdca02f-3cbe-4e8c-82ad-86a1a16b72e8 |
externalInvoiceGUID | STRING | Echo of the GUID that identifies a particular invoice that may appear on more than one transaction. | 2fdca02f-3cbe-4e8c-82ad-86a1a16b72e9 |
externalTransactionDateTime | STRING | Echo of the date and time the transaction was generated on the 3rd party ERP systems. Has the format of “yyyy-MM-dd'T'HH:mm:ss” | 2017-04-28T09:30:00 |
externalTerminalId | STRING | Echo of the terminal identifier for device configured on the 3rd party ERP system. | 98100010 |
transactionUuid | STRING | Echo of the Unique ID of a transaction. | bdf9d0af-17b3-48ca-8a0b-37dc52bf49bc |
terminalId | STRING | This is an automatically system-assigned terminalID of the payment terminal’s identity number, which can be used to assist with settlement information and is returned in BASE36 format. | 77012398 |
latitude | STRING | Echo of geolocation identifier indicating the latitude position of the device. | -28.1619942 |
longitude | STRING | Echo of geolocation identifier indicating the longitude position of the device. | 30.2350981 |
accuracy | STRING | Echo of accuracy indicator of the geolocation. | |
serialNumber | STRING | The serial number for the device that was used for the RETAIL_AUTH intent call. | PC05P2CG10036 |
Sample Code
private final ActivityResultLauncher<Intent> intentLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent data = result.getData();
if (data != null) {
Bundle responseBundle = new Bundle(data.getBundleExtra("ecentricApplicationResponse"));
String launchType = responseBundle.getString("launchType");
String resultCode = responseBundle.getString("resultCode");
// Determine if the transaction was successfully executed using returned resultCode
Boolean success = false;
if (resultCode != null && (resultCode.matches("00") || resultCode.matches("01"))) {
success = true;
}
if (responseBundle.get("errorBundle") != null) {
Bundle errorBundle = new Bundle(responseBundle.getBundle("errorBundle"));
}
}
} else {
Log.e(TAG, "Received error resultCode: " + result.getResultCode());
}
}
);Error Handling
Sample Bundle
"resultDescription": "ABORTED",
"errorBundle": {
"description": "ERROR",
"reference": "",
"errorType": "TRANSACTION",
"message": "Transaction cancelled by user"
},
"buildInfo": "Ecentric_DEBUG_Ecentric_INT",
"isReceiptDataAvailable": false,
"resultCode": "03",
"merchantID": "910100000000001",
"serialNumber": "PC05P2CG10036",
"launchType": "SALE",
"cashAmount": "0",
"appVersion": "1.9.8",
"transactionAmount": "1000"