Commit b0f590b8 authored by Abdullah Hafizh's avatar Abdullah Hafizh

add readme

parent be8f4edd
# Prepaid Bank Simulator
## 1. Inisiasi Library
Note : untuk menginisiasi library ke aplikasi.
- debugResponse = 8ED5A3240F19B3CEF2E80ECD37A217A9BEBB5E2E28DCD30DF63819243EC6C119A4A31F6821DBB259D4809041E3B42F35F218F992A0FC0B1BD6CA7CEE2D2BFD2B70FDD3A030F0C6C7A698BB3BFAE1973183D4681E9A8F14035FD32443F483C1B5242AE78D49220BB47A7E826A3E0C8DF76A043921C46CA021A251B480E75454064FAEDAF6E0215A5412B468DD903CBCDC183DCB8A89E7A10F272F10110BDDF0108E7612E3F4C2B40DA895634840AD335ECA39BDB5A91C74BE5C6230E2AA7AFEC9CE41278990FD997337A14B205620EF6EA12380024DC6C1751C9003035C9DBE342B611ACFF5D5D8CEC75363FE9D3AEF357E35AC316C4712EB3C5B15C2434D54DCEC94246571D7DD8C5B271DD3136445A89EA6118397AC0BDD978A16F0E70A685A5B7ED527461064E218B04C348FF4D6E568DB0C69CFE1B1EC5B21E1E44C17AAF2E456FE1DD60CC79D619EA140B8A034A0E1017B5652E1BA1520712E9262E51423423988A387F8A474
| Variable | value | Type | Length | Remark |
| :--------------- | :---------------: | :---------------: | :---------------: | :--------------------------: |
| debugResponse | *contoh di atas | String | | didapat dari API unlockAAR |
```
val unlockAarResponse: UnlockAarResponse = aarDevice.unlockLibrary(
accessToken,
DeviceEnvironment.UNLOCK,
aarDevice.getDeviceId(),
debugToken,
"1"
)
val debugResponse: String = unlockAarResponse.data.debugResponse
```
Log dari library
```
2025-03-21 07:59:35.976 16741-16741 NATIVE LIBRARY id.mdd.prepaidbank V 1.02
2025-03-21 07:59:36.088 16741-16741 native-lib id.mdd.prepaidbank W Version: [20300331.235959]
2025-03-21 07:59:36.088 16741-16741 native-lib id.mdd.prepaidbank D builds: 158688023.000000
2025-03-21 07:59:36.088 16741-16741 native-lib id.mdd.prepaidbank D Lets fireup Cryptographic Enggine
2025-03-21 07:59:36.088 16741-16741 native-lib id.mdd.prepaidbank D Load everything
2025-03-21 07:59:36.088 16741-16741 native-lib id.mdd.prepaidbank D Load Driver 10 = 10
2025-03-21 07:59:36.095 16741-16741 Lib BCA id.mdd.prepaidbank D Version : BCAdll v.1.0.4
2025-03-21 07:59:36.112 16741-16741 ReaderLib id.mdd.prepaidbank V 1.09
2025-03-21 07:59:36.147 16741-16741 NATIVE LIBRARY id.mdd.prepaidbank D IMEI = 869583050017388
2025-03-21 07:59:36.153 16741-16741 NATIVE LIBRARY id.mdd.prepaidbank D strData = ���${e 2026-03-21
SIGNATURE 1.00
Mac (Wifi) = 02:00:00:00:00:00
Mac (lan) = BE:F8:A6:EF:69:99
DeviceId(IMEI) = 869583050017388
DeviceSoftwareVersion = 78
MANDIRI = OK
BNI = OK
BRI = OK
BCA = OK
DEBUG = OK
DKI = OK
NOBU = OK
MDD = OK
ICONOX = OK
MDRTOPOFF = OK
MDRC2C = OK
MDRAPI = OK
BNIC2C = OK
BNIAPI = OK
BRIAPI = OK
MEGA = OK
LOKET = OK
DKITOPAPI = OK
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[2026-03-21]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[SIGNATURE 1.00]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[Mac (Wifi) = 02:00:00:00:00:00]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[Mac (lan) = BE:F8:A6:EF:69:99]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[DeviceId(IMEI) = 869583050017388]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[DeviceSoftwareVersion = 78]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[MANDIRI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[BNI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[BRI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[BCA = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[DEBUG = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[DKI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[NOBU = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[MDD = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[ICONOX = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[MDRTOPOFF = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[MDRC2C = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[MDRAPI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[BNIC2C = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[BNIAPI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[BRIAPI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[MEGA = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[LOKET = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[DKITOPAPI = OK]
2025-03-21 07:59:36.153 16741-16741 native-lib id.mdd.prepaidbank D key=[ ]
2025-03-21 07:59:36.625 16741-16741 native-lib id.mdd.prepaidbank D Expirity : 31507224.000000
```
## 2. Fungsi findCard
Note : untuk mendeteksi kartu yang ditempel.
- DEFAULT_TIMEOUT = lama menunggu kartu untuk ditempel ke reader
- uid = id kartu yang didapat dari reader
- uidLen = panjang uid yang didapatkan
- cardType = tipe kartu yang ditempel
```
myReader.findCard(DEFAULT_TIMEOUT, uid, uidLen, cardType)
```
## 3. Fungsi samInit*
Note : untuk menginisiasi konfigurasi SAM (Secure Access Module) Bank.
### 3.1 Bank Mandiri
- samPin = pin sam Mandiri
- mid = mid sam Mandiri
- tid = tid sam Mandiri
```
if (myReader.mandiriEnabled()) {
val samPin: String = "$sampin"
val mid: String = "$mid"
val tid: String = "$tid"
val bpin = utilsLib.HexStringToByteArray(samPin)
val bmid = utilsLib.HexStringToByteArray(mid)
val btid = utilsLib.HexStringToByteArray(tid)
myReader.mandiriDeductSetConfig(bpin, bmid, btid)
myReader.readerMandiriSetSamSlot(OrganicDriver.ORGANIC_SAM2)
myReader.readerMandiriEnableFastDeduct()
}
```
### 3.2 Bank BNI
- merriedCode = merriedcode sam BNI
- bniTid = tid sam BNI
```
if (myReader.bniEnabled()) {
val merriedCode = utilsLib.HexStringToByteArray("$merriedCode")
val bniTid = utilsLib.HexStringToByteArray("$bniTid")
myReader.bniSetConfig(merriedCode, bniTid)
myReader.readerBniSetSamSlot(OrganicDriver.ORGANIC_SAM3)
}
```
### 3.3 Bank BRI
- brimid = mid sam BRI
- britid = tid sam BRI
- briprocode = procode sam BRI
- batch = batchnumber transaction
- reference = reference number transaction
```
if (myReader.briEnabled()) {
val brimid = utilsLib.HexStringToByteArray("$brimid")
val britid = utilsLib.HexStringToByteArray("$britid")
val briprocode = utilsLib.HexStringToByteArray("$briprocode")
val batch: Int = 3
val reference: Int = 1
myReader.briSetConfig(brimid, britid, briprocode, batch.toByte(), reference)
myReader.readerBriSetSamSlot(OrganicDriver.ORGANIC_SAM1)
}
```
### 3.4 Bank BCA
- bcamid = mid sam BCA
- bcatid = tid sam BCA
- bcaMinBalance = minimum balance transaction
```
if (myReader.bcaEnabled()) {
val bcamid: String = "$bcamid"
val bcatid: String = "$bcatid"
val bcaMinBalance: Int = 0
myReader.readerBcaSetSamSlot(OrganicDriver.ORGANIC_SAM4)
val strlogRsp = arrayOfNulls<String>(1)
myReader.bcaSetConfig(bcamid, bcatid, bcaMinBalance, strlogRsp)
}
```
### 3.5 Bank DKI
- dkimid = mid sam DKI
- dkitid = tid sam DKI
- reff = refference number transaksi
```
val dkimid: ByteArray = utilsLib.HexStringToByteArray("$dkimid")
val dkitid: ByteArray = utilsLib.HexStringToByteArray("$dkitid")
val reff: Int = 0
myReader.readerDkiSetSamSlot(OrganicDriver.ORGANIC_SAM2)
myReader.dkiSetDevMode(true)
myReader.dkiSetConfig(dkimid, dkitid, reff.toByte())
```
## 4. Fungsi readerDeduct
Note : untuk memotong saldo kartu prepaid.
- cardType = tipe kartu yang didapat dari findCard
- StrDate = tanggal dilakukannya transaksi (yyyyMMddHHmmss)
- value = amount yang akan dideduct
- bankType = respon tipe bank dari kartu prepaid yang digunakan
- balance = respon balance kartu prepaid setelah transaksi
- cardNumber = respon nomor kartu prepaid yang digunakan
- report = respon deduct report (disimpan untuk generate settlement)
- errorCode = code error deduct process
- deductMode = mode untuk deduct (readerLib.DEDUCT_SIMULATE_NORMAL)
```
myReader.readerDeduct(cardType[0], StrDate, value, bankType, balance, cardNumber, report, errorCode)
```
## 5. Fungsi readerBalance
Note : untuk mendapatkan saldo kartu prepaid.
- cardType = tipe kartu yang didapat dari findCard
- StrDate = tanggal dilakukannya transaksi (yyyyMMddHHmmss)
- bankType = respon tipe bank dari kartu prepaid yang digunakan
- balance = respon balance kartu prepaid
- cardNumber = respon nomor kartu prepaid yang digunakan
- errorCode = code error deduct process
```
myReader.readerGetBalance(cardType[0], StrDate, bankType, balance, cardNumber, errorCode)
```
## 6. Error Code
Berikut pengertian dari Error Code yang mungkin terjadi :
| Return Code | Remarks |
| :--------: | :-------------------------- |
| 0x9000 | APDU_ERROR_NONE (SUCCESS) |
| 0x00BE | ERROR_BRI_INSUFFICIENT_FUND |
| 0x1001 | ERROR_SAM_NOT_INIT |
| 0x1002 | ERROR_INIT_PARAM |
| 0x1003 | ERROR_INSUFFICIENT_FUND |
| 0x1004 | ERROR_TIMEOUT |
| 0x1005 | ERROR_INVALID_PIN |
| 0x1006 | ERROR_WRONG_INSTITUTION |
| 0x1007 | ERROR_OVERLIMIT |
| 0x1008 | ERROR_INACTIVECARD |
| 0x100A | ERROR_GRACE_PERIOD |
| 0x100B | ERROR_INSUFFICIENT_FUND1 |
| 0x100C | ERROR_UNCOMPLETTE (PARTIAL) |
| 0x100E | ERROR_SAM_NOT_SUPPORT |
| 0x100D | ERROR_DEDUCT_TOO_FAST |
| 0x100F | ERROR_EXPIRED_CARD |
| 0x1022 | ERROR_WRONG_NOCOMPLETTE_CARD|
| 0x1025 | ERROR_BANK_NOT_SUPPORTED |
| 0x1026 | ERROR_UNKNOWN_CMD |
| 0x1027 | ERROR_CRC_ERROR |
| 0x1100 | ERROR_UNCOMPLETTE |
| 0x5000 | ERROR_MIFARE_LOADKEY |
| 0x5001 | ERROR_MIFARE_AUTH |
| 0x5002 | ERROR_CARD_TYPE |
| 0x5003 | ERROR_REQUEST_DATA |
| 0x5004 | ERROR_REQUEST_LOGOUT |
| 0x5005 | ERROR_MIFARE_READ |
| 0x5006 | ERROR_MIFARE_WRITE |
| 0x5103 | ERROR_BNI_PURSE_DISABLED |
| 0x5104 | ERROR_BNI_UNMERRIED_SAM |
| 0xD000 | ERROR_CLASS_NOT_INIT |
| 0xE000 | ERROR_ACTIVATION_VAILED |
| 0xE001 | ERROR_ACTIVATION_REQUIRED |
| 0xE002 | ERROR_SELECTED_BANK_DISABLED|
| 0xFFEC | ERROR_APDU_EXCHANGE |
| 0xFFED | ERROR_HW_NOACK |
| 0xFFEF | SW_ERROR_LOOP |
| 0xFFFE | HW_ERROR_UNKNOWN |
| 0x6C00 | MANDIRI_SAM_BLOCKED |
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment