*New - React Native ECR SDK (Android & iOS)
Use the react‑native‑ecr‑sdk to integrate payment acceptance into React Native apps. The SDK exposes native ECR APIs to JavaScript, enabling developers to initialize, connect, transact, and handle responses consistently across platforms. For environment setup and SDK details. refer to React Native ECR SDK Library.
Supported Connections
| Platform | Connection Types | Notes |
|---|---|---|
| iOS | TCP/IP | Stable network integration |
| Android | TCP/IP, Bluetooth, App‑to‑App | App‑to‑App requires mada app installed |
Transaction Flow
Initialize SDK → Configure POS → Connect Device → Register (txnType 17) → Start Session (txnType 18) → Execute Transaction → Receive Response → Parse Response
Integration Steps
Step 1: Initialize SDK
import { PosLibManager } from 'react-native-ecr-sdk';
// Initialize SDK
PosLibManager.getInstance().posLibInitialize(applicationContext);
Step 2: Connect Device
- TCP/IP: Provide terminal IP + port.
- Bluetooth (Android only): Pair device, then connect via SDK.
- App‑to‑App (Android only): Ensure mada app is installed, connect using CRN.
- Broadcast Receiver: Document how to register a broadcast receiver to handle incoming intents/responses for App‑to‑App flows.
Step 3: Disconnect Device
PosLibManager.getInstance().disconnect();
Step 4: Initiate Payment
- Set CRN (8‑digit numeric).
- Configure terminal printer (0 = disable, 1 = enable).
- Compute signature:
const signature = ECRTransactionManager.shared.computeSha256Hash(value);
- Generate ECR reference number.
- Get timestamp (
ddMMyyHHmmss). - Build transaction request string.
- Convert to Hex.
- Call
handleTransaction().
Step 5: Transaction Types
| Type | Required Data | Notes |
|---|---|---|
| Purchase | dateTimeStamp;amount;ecrRefNo! | Amount must be 12‑digit string |
| Purchase + Cashback | dateTimeStamp;totalAmount;naqdAmount;ecrRefNo! | Includes cashback |
| Refund | dateTimeStamp;amount;rrn;originalDate;ecrRefNo! | Requires RRN + original date |
| Pre‑Auth | dateTimeStamp;authAmount;ecrRefNo! | Authorization only |
| Advice | dateTimeStamp;amount;rrn;transactionDate;approvalCode;ecrRefNo! | Full/partial capture |
| Auth Extension | dateTimeStamp;rrn;transactionDate;approvalCode;ecrRefNo! | Extends validity |
| Auth Void | dateTimeStamp;amount;rrn;transactionDate;approvalCode;ecrRefNo! | Voids authorization |
| Cash Advance | dateTimeStamp;amount;ecrRefNo! | Cash advance |
| Reversal | dateTimeStamp;rrn;ecrRefNo! | Requires RRN |
| Reconciliation | dateTimeStamp;ecrRefNo! | Settlement reconciliation |
Step 6: Handling Response
Responses are returned in CSV format.
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 (minor units) |
| Timestamp | 140524193012 | Date/time (ddMMyyHHmmss) |
| ECR Ref No | TX12345678 | Merchant transaction reference |
| Receipt Data | RECEIPT123 | Printable receipt / structured payload |
Parsing Example (React Native / JavaScript):
const response = "00,APPROVED,10000,140524193012,TX12345678,RECEIPT123";
const fields = response.split(",");
const responseCode = fields[0];
const approvalCode = fields[1];
const amount = fields[2];
const timestamp = fields[3];
const ecrRefNo = fields[4];
const receiptData = fields[5];
Key Rules
- Always call
posLibInitialize()first. - TCP/IP is preferred; Bluetooth/App‑to‑App are Android‑only.
- Register (txnType 17) and Start Session (txnType 18) required for legacy ECR.
- Adapter integrations skip Register/Session.
- References must use mada app (not NamiPay).
- Broadcast receiver details must be documented for App‑to‑App flows.
Updated 2 days ago
