*New - .Net SDK

Use the POS Lib .NET SDK to integrate payment acceptance into Windows-based POS applications and billing systems.
This guide provides step‑by‑step instructions for:

  • Configuration management
  • Transaction execution
  • Response handling

For environment setup and SDK details. refer to .Net SDK Library

Supported Connections

Connection TypeSupportedNotes
TCP/IP (Wi‑Fi)Recommended for network‑based integration
Serial (COM/USB)Supported using COM port communication

Transaction Flow

Initialize SDK → Configure POS → Connect Device → Pack Request → Execute Transaction → Receive Response → Parse Response

Integration Steps

Note: Always call posLibInitialize() before any API call.

Step 1: Initialize POS Lib

Initialize the library before scanning or configuring devices.

Call posLibInitialize() to set up the SDK:

// Signature
bool posLibInitialize(Context context)

// Code
PosLibManager.getInstance().posLibInitialize(applicationContext);

Step 2: Configure POS Library

Set communication parameters and priorities.

Call setConfiguration() with TCP/IP and COM settings:

public int setConfiguration(ConfigData configData, bool debugLog = false)
{
    if(debugLog)
        Log.Debug("entering setConfiguration()");
    ConfigData portSettings = new ConfigData
    {
        tcpIp = configData.tcpIp,
        tcpPort = configData.tcpPort,
        commPortNumber = configData.commPortNumber,
        connectionMode = configData.connectionMode,
        communicationPriorityList = configData.communicationPriorityList,
        CashregisterNumber = configData.CashregisterNumber,
        CashierName = configData.CashierName,
        retry = configdata.retry,
        connectionTimeOut = configData.connectionTimeOut,
        tcpIpaddress = configData.tcpIpaddress,
        comfullName = configData.comfullName,
        comTerminalSerialNo = configData.comTerminalSerialNo,
        tcpIpPort = configData.tcpIpPort,
        tcpIpDeviceId = configData.tcpIpDeviceId,
        tcpipTerminalSerialNo = configData.tcpipTerminalSerialNo,
        comDeviceId = configData.comDeviceId,
        LogPath = configData.LogPath,
        loglevel = configData.loglevel,
        isAppidle = configData.isAppidle,
        logtype=configdata.logtype,
        retainDay=configData.retainDay,
        isDeviceNumberMatch=configData.isDeviceNumberMatch,
    };
    if (!Directory.Exists(PortSettingsFilePath))
    {
        Directory.CreateDirectory(PortSettingsFilePath);
    }
    string fileName = PosLibConstant.FILE_NAME;
    string filePath = Path.Combine(PortSettingsFilePath, fileName);
    ReadSettingsFilePath = filePath;
    string json = JsonConvert.SerializeObject(configData);
    if (debugLog) 
        Log.Debug("set configuration data: " + json);
    try
    {
        File.WriteAllText(filePath, json);
    }
    catch(FileLoadException ex)
    {
        Log.Error("FileLoad Exception");
        Console.WriteLine(ex.Message);
        return -1;
    }
    catch (Exception ex)
    {
 
        Log.Error("FileLoad Exception");
        Console.WriteLine(ex.Message);
        return -1;
    }
    return 0;
}

Step 3: Get Configuration

Retrieve current configuration settings.

Call getConfiguration() to load saved parameters:

public int getConfiguration(out ConfigData configData, bool debugLog = false)
{
    if(debugLog)
        Log.Debug("entering GetConfigData()");
 
    configData = new ConfigData(); // Create a new instance of ConfigData
    try
    {
        if (File.Exists(ReadSettingsFilePath))
        {
            string json = File.ReadAllText(ReadSettingsFilePath);
            if (debugLog)
                Log.Debug("get configData: " + json);
            configData = JsonConvert.DeserializeObject<ConfigData>(json)!;
 
            if (configData != null)
            {
                return 0;
            }
        }
    }
    catch (IOException ex)
    {
 
        Console.WriteLine(ex);
    }
    return -1;
}

Step 4: Test Connectivity

Verify communication with the terminal.

// Signature
int getConfiguration(ConfigData configData)

// Code
ConfigData config = new ConfigData();
int result = PosLib.getInstance().getConfiguration(config);
  • TCP/IP Test

Use testTCP() to confirm network connection:

boolean result = PosLib.getInstance().testTCP("192.168.0.102", "8888");

Inline Usage (real implementation):

isOnlineDevice = obj.testTCP(tcpip.Text, tcpport.Text);
  • Serial Test

Use testSerialCom() to confirm COM port connection:

boolean result = PosLib.getInstance().testSerialCom("COM3");

Inline Usage (real implementation):

isOnlineDevice = obj.testSerialCom(intvalue);

Step 5: Execute Transaction

Send transaction requests to the terminal.

Call doTransaction() with request data and transaction type:

trxobj.doTransaction(inputReqData, int.Parse( transactionType), szSignature,transactionDrive);

Transaction Types

TypeAction
3Registration
6Payment Transaction
7Set Configuration
8Get Configuration
9Last Transaction

Code Example (Payment Transaction)

Send a payment request with transaction type 6:

String request = "4001,TX12345678,10000,,,,,,";
int txnType = 6;

PosLib.getInstance().doTransaction(request, txnType, new TransactionListener() {
    @Override
    public void onSuccess(String response) {
        // Payment response
    }
    @Override
    public void onNext(String action) {
        // Intermediate steps
    }
    @Override
    public void onFailure(String errorMsg, int errorCode) {
        // Handle error
    }
});

Step 6: Response Handling

Parse CSV response to extract transaction details:

Responses are returned in CSV format.
They contain:

  • Response Code
  • Approval Code
  • Transaction Status
  • Receipt Data

Example CSV string:

00,APPROVED,10000,140524193012,TX12345678,RECEIPT123

Parsed Output Mapping:

FieldExample ValueDescription
Response Code00Transaction result (00 = Approved)
Approval CodeAPPROVEDIssuer/host approval code
Amount10000Transaction amount (in minor units)
Timestamp140524193012Date/time in ddMMyyHHmmss format
ECR Reference NoTX12345678Merchant’s transaction reference number
Receipt DataRECEIPT123Printable receipt or structured payload

Parsing Example (C#):

string response = "00,APPROVED,10000,140524193012,TX12345678,RECEIPT123";
string[] fields = response.Split(',');

string responseCode = fields[0];
string approvalCode = fields[1];
string amount = fields[2];
string timestamp = fields[3];
string ecrRefNo = fields[4];
string receiptData = fields[5];

Step 7: Device Model Structure

Define the device model for discovery results by using the following code snippet:

public class Device {
    private String deviceIp;
    private String devicePort;
    private String devId;
    private String slNo;
    private boolean isCom;
    private String comPortNumber;
}

Step 8: Configuration Model

Define the configuration model for persistence by using the following code snippet:

public class ConfigData {
    private String tcpIP;
    private String tcpPort;
    private String comPortNumber;
    private int retryCount;
    private int connectionTimeOut;
    private boolean isConnectivityFallBackAllowed;
    private int priority1;
    private int priority2;
    private String logPath;
    private boolean isLogsEnabled;
    private int logLevel;
    private int dayToRetainLogs;
    private String cashierId;
    private String cashierName;
}

Key Rules

  • Always call posLibInitialize() first.
  • TCP/IP is preferred priority.
  • COM is fallback mode.
  • Transaction type 6 is end‑to‑end payment flow.
  • Other transaction types are internal system operations.

Final Integration Flow

Initialize POS Lib

Set Configuration

Test Connection

Select Device Priority

Execute Transaction (doTransaction)

Receive Response

Parse Response

Installation Notes

  • Requires Windows 10+.
  • JDK 1.8 (for controller layer if used).
  • POS Controller must be running for device discovery.
  • Cashier setup required at first launch.