*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

PlatformConnection TypesNotes
iOSTCP/IPStable network integration
AndroidTCP/IP, Bluetooth, App‑to‑AppApp‑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

TypeRequired DataNotes
PurchasedateTimeStamp;amount;ecrRefNo!Amount must be 12‑digit string
Purchase + CashbackdateTimeStamp;totalAmount;naqdAmount;ecrRefNo!Includes cashback
RefunddateTimeStamp;amount;rrn;originalDate;ecrRefNo!Requires RRN + original date
Pre‑AuthdateTimeStamp;authAmount;ecrRefNo!Authorization only
AdvicedateTimeStamp;amount;rrn;transactionDate;approvalCode;ecrRefNo!Full/partial capture
Auth ExtensiondateTimeStamp;rrn;transactionDate;approvalCode;ecrRefNo!Extends validity
Auth VoiddateTimeStamp;amount;rrn;transactionDate;approvalCode;ecrRefNo!Voids authorization
Cash AdvancedateTimeStamp;amount;ecrRefNo!Cash advance
ReversaldateTimeStamp;rrn;ecrRefNo!Requires RRN
ReconciliationdateTimeStamp;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:

FieldExample ValueDescription
Response Code00Transaction result (00 = Approved)
Approval CodeAPPROVEDIssuer/host approval code
Amount10000Transaction amount (minor units)
Timestamp140524193012Date/time (ddMMyyHHmmss)
ECR Ref NoTX12345678Merchant transaction reference
Receipt DataRECEIPT123Printable 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.