*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 Type | Supported | Notes |
|---|---|---|
| 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
| Type | Action |
|---|---|
| 3 | Registration |
| 6 | Payment Transaction |
| 7 | Set Configuration |
| 8 | Get Configuration |
| 9 | Last 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:
| Field | Example Value | Description |
|---|---|---|
| Response Code | 00 | Transaction result (00 = Approved) |
| Approval Code | APPROVED | Issuer/host approval code |
| Amount | 10000 | Transaction amount (in minor units) |
| Timestamp | 140524193012 | Date/time in ddMMyyHHmmss format |
| ECR Reference No | TX12345678 | Merchant’s transaction reference number |
| Receipt Data | RECEIPT123 | Printable 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.
Updated about 2 hours ago
