From 4d30d0134cf80b3346c3c052b24923d9966b0abe Mon Sep 17 00:00:00 2001 From: kizzy Date: Mon, 19 Jan 2026 23:46:55 +0700 Subject: [PATCH] added bin list and its features --- .../main/java/com/utsmm/kbz/MainActivity.java | 26 +++++++++------- .../main/java/com/utsmm/kbz/MainFragment.java | 4 +-- .../utsmm/kbz/service/AutoSettleService.java | 4 +-- .../ui/core_ui/ProcessingCardFragment.java | 8 +++++ .../com/utsmm/kbz/util/TransactionUtil.java | 26 ++++++++++++++++ .../com/utsmm/kbz/util/tms/TMSSetupsImpl.java | 3 ++ .../test/java/com/utsmm/kbz/GeneralTest.java | 30 +++++++++++++++++++ .../utsmyanmar/baselib/di/NetworkModule.java | 4 +-- .../checkxread/model/CardDataX.java | 11 +++++++ .../core_utils/SystemParamsOperation.java | 12 ++++++++ .../core_utils/SystemParamsSettings.java | 10 +++++++ 11 files changed, 122 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/MainActivity.java b/app/src/main/java/com/utsmm/kbz/MainActivity.java index acd42c7..189f63a 100644 --- a/app/src/main/java/com/utsmm/kbz/MainActivity.java +++ b/app/src/main/java/com/utsmm/kbz/MainActivity.java @@ -39,6 +39,8 @@ import com.utsmyanmar.checkxread.sdk.NexGoSDK; import com.utsmyanmar.ecr.ECRHelper; import com.utsmyanmar.paylibs.Constant; import com.utsmyanmar.paylibs.model.PayDetail; +import com.utsmyanmar.paylibs.model.SettleData; +import com.utsmyanmar.paylibs.model.TradeData; import com.utsmyanmar.paylibs.print.printx.PrintXReceipt; import com.utsmyanmar.paylibs.utils.POSUtil; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; @@ -71,6 +73,8 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; import com.utsmyanmar.paylibs.utils.LogUtil; +import com.utsmyanmar.paylibs.utils.params.Params; + /** * Main Activity handling application navigation and fragment interactions */ @@ -153,9 +157,9 @@ public class MainActivity extends AppCompatActivity implements } private void initKey(){ -// SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius"); + SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius"); // SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com"); -// SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt"); + SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt"); // SystemParamsOperation.getInstance().setEReceiptAddress("http://receipt-nest.utsmyanmar.com"); PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad(); @@ -452,10 +456,12 @@ public class MainActivity extends AppCompatActivity implements // Handle regular auto settlement boolean auto = intent.getBooleanExtra("AUTO_SETTLEMENT", false); if (auto) { - com.utsmyanmar.paylibs.model.PayDetail payDetail = (com.utsmyanmar.paylibs.model.PayDetail) intent.getSerializableExtra("EXTRA_PAY_DETAIL"); + PayDetail payDetail = (PayDetail) intent.getSerializableExtra("EXTRA_PAY_DETAIL"); if (payDetail != null) { + sharedViewModel.payDetail.setValue(payDetail); - sharedViewModel.transactionsType.setValue(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.SETTLEMENT); + sharedViewModel.transactionsType.setValue(TransactionsType.SETTLEMENT); + sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(payDetail.getAmount())); try { navController.navigate(R.id.transactionResultFragment); } catch (Exception e) { @@ -476,14 +482,14 @@ public class MainActivity extends AppCompatActivity implements List qrTransList = (List) intent.getSerializableExtra("QR_TRANS_LIST"); // Create QR settlement PayDetail - com.utsmyanmar.paylibs.model.SettleData settleData = new com.utsmyanmar.paylibs.model.SettleData( + SettleData settleData = new SettleData( qrSaleCount, qrSaleAmount, 0, 0L, qrRefundCount, qrRefundAmount, 0, 0L); - com.utsmyanmar.paylibs.model.TradeData tradeData = com.utsmyanmar.paylibs.utils.params.Params.newTrade(false); - com.utsmyanmar.paylibs.model.PayDetail payDetail = tradeData.getPayDetail(); + TradeData tradeData = Params.newTrade(false); + PayDetail payDetail = tradeData.getPayDetail(); payDetail.setSettleDataObj(settleData); - payDetail.setTransactionType(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.MMQR_SETTLEMENT.value); - payDetail.setTransType(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.MMQR_SETTLEMENT.name); + payDetail.setTransactionType(TransactionsType.MMQR_SETTLEMENT.value); + payDetail.setTransType(TransactionsType.MMQR_SETTLEMENT.name); payDetail.setAmount(totalAmount); payDetail.setTradeAnswerCode("000"); @@ -491,7 +497,7 @@ public class MainActivity extends AppCompatActivity implements sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(totalAmount)); sharedViewModel.payDetails.setValue(qrTransList); sharedViewModel.payDetail.setValue(payDetail); - sharedViewModel.transactionsType.setValue(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.MMQR_SETTLEMENT); + sharedViewModel.transactionsType.setValue(TransactionsType.MMQR_SETTLEMENT); try { navController.navigate(R.id.transactionResultFragment); diff --git a/app/src/main/java/com/utsmm/kbz/MainFragment.java b/app/src/main/java/com/utsmm/kbz/MainFragment.java index ee03da5..2eb523b 100644 --- a/app/src/main/java/com/utsmm/kbz/MainFragment.java +++ b/app/src/main/java/com/utsmm/kbz/MainFragment.java @@ -146,10 +146,10 @@ public class MainFragment extends DataBindingFragment { delayFunctionCall(() -> { NexGoSDK.getInstance().cancelCheckCard(); NexGoSDK.getInstance().closeReader(); -// enableHomeButton(); + enableHomeButton(); // disableTaskButton(); // BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar(); -// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar(); + BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar(); }); } diff --git a/app/src/main/java/com/utsmm/kbz/service/AutoSettleService.java b/app/src/main/java/com/utsmm/kbz/service/AutoSettleService.java index dca9384..e397ac3 100644 --- a/app/src/main/java/com/utsmm/kbz/service/AutoSettleService.java +++ b/app/src/main/java/com/utsmm/kbz/service/AutoSettleService.java @@ -155,8 +155,8 @@ public class AutoSettleService extends Service { createNotification(); if (SystemParamsOperation.getInstance().getSettlementStatus()) { -// performSettlement(); - regularSettlementCompleted = true; + performSettlement(); +// regularSettlementCompleted = true; performQRSettlement(); } else { LogUtil.d(TAG, "Settlement is disabled in system parameters"); diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java index aae313e..d835222 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java @@ -129,6 +129,14 @@ public class ProcessingCardFragment extends DataBindingFragment { @Override public void onSuccess(CardDataX cardDataX) { + if(!TransactionUtil.getInstance().getBinList().isEmpty()) { + if(TransactionUtil.getInstance().getBinList().contains(cardDataX.getBin())) { + LogUtil.d(TAG," <= contain bin => "); + handlePreEmvProcess(); + return; + } + } + routeId = R.id.action_processingCardFragment_to_pinPadFragment; transProcessViewModel.transType.setValue(sharedViewModel.transactionsType.getValue()); pinPadViewModel.transType.setValue(sharedViewModel.transactionsType.getValue()); diff --git a/app/src/main/java/com/utsmm/kbz/util/TransactionUtil.java b/app/src/main/java/com/utsmm/kbz/util/TransactionUtil.java index 1406d5e..e08af2f 100644 --- a/app/src/main/java/com/utsmm/kbz/util/TransactionUtil.java +++ b/app/src/main/java/com/utsmm/kbz/util/TransactionUtil.java @@ -13,6 +13,11 @@ import com.utsmm.kbz.config.Constants; import com.utsmyanmar.paylibs.utils.LogUtil; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class TransactionUtil { @@ -138,4 +143,25 @@ public class TransactionUtil { return payDetail; } + public static List binParser(String input) { + + if (input == null || input.trim().isEmpty()) { + return new ArrayList<>(); + } + String[] parts = input.split("[,/\\-]"); + + return Arrays.stream(parts) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + } + + public List getBinList() { + if(SystemParamsOperation.getInstance().getBinValues() == null || SystemParamsOperation.getInstance().getBinValues().isEmpty()) + return new ArrayList<>(); + else + return binParser(SystemParamsOperation.getInstance().getBinValues()); + } + + } diff --git a/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java b/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java index ae3265e..928b722 100644 --- a/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java +++ b/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java @@ -644,6 +644,9 @@ public class TMSSetupsImpl implements TMSSetups{ else if (TextUtils.equals(name, "certificate_password")) { SystemParamsOperation.getInstance().setCertificatePassword(data); } + else if(TextUtils.equals(name,"bin_list")) { + SystemParamsOperation.getInstance().setBinValue(data); + } } SystemParamsOperation.getInstance().setCarouselUrls(convertToString(imgUrls)); diff --git a/app/src/test/java/com/utsmm/kbz/GeneralTest.java b/app/src/test/java/com/utsmm/kbz/GeneralTest.java index 4993c87..74c314a 100644 --- a/app/src/test/java/com/utsmm/kbz/GeneralTest.java +++ b/app/src/test/java/com/utsmm/kbz/GeneralTest.java @@ -4,6 +4,11 @@ import com.utsmyanmar.baselib.util.EReceiptHelper; import org.junit.Test; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + public class GeneralTest { @Test @@ -22,4 +27,29 @@ public class GeneralTest { String dataToHash = bodyString + secret + timestamp; return EReceiptHelper.sha256(dataToHash); } + + @Test + public void testBinParser() { + String input1 = "629214, 624445"; + System.out.println(binParser(input1)); // Output: [629214, 624445] + + String input2 = "11111/ 22222 - 33333,44444"; + System.out.println(binParser(input2)); // Output: [11111, 22222, 33333, 44444] + + String input3 = "55555,"; + System.out.println(binParser(input3)); // Output: [55555] + } + + public static List binParser(String input) { + + if (input == null || input.trim().isEmpty()) { + return new ArrayList<>(); + } + String[] parts = input.split("[,/\\-]"); + + return Arrays.stream(parts) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toList()); + } } diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java b/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java index 463a011..78a4ada 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/di/NetworkModule.java @@ -287,8 +287,8 @@ public class NetworkModule { tmsAddress = getTMSUrlFromNative(); } - String baseUrl = tmsAddress.trim() + "/api/v1/"; //for on prim -// String baseUrl = tmsAddress.trim() + "/"; //for uat and prod +// String baseUrl = tmsAddress.trim() + "/api/v1/"; //for on prim + String baseUrl = tmsAddress.trim() + "/"; //for uat and prod final Gson gson = new GsonBuilder().create(); diff --git a/mpulib/src/main/java/com/utsmyanmar/checkxread/model/CardDataX.java b/mpulib/src/main/java/com/utsmyanmar/checkxread/model/CardDataX.java index 2617c2d..43e9734 100644 --- a/mpulib/src/main/java/com/utsmyanmar/checkxread/model/CardDataX.java +++ b/mpulib/src/main/java/com/utsmyanmar/checkxread/model/CardDataX.java @@ -68,4 +68,15 @@ public class CardDataX { public String toString() { return "Card number :"+pan + " expire date : "+exp + " track1 : "+ track1 + " track2 : "+ track2 + " track3 : "+ track3 + " card holder name : "+cardHolderName + " service code: "+serviceCode; } + + public String getBin() { + String bin = ""; + if (pan != null) { + if (pan.length() >= 6) { + bin = pan.substring(0, 6); + System.out.println("BIN: " + bin); + } + } + return bin; + } } diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java index 806f754..ae27eda 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java @@ -1420,6 +1420,18 @@ public class SystemParamsOperation { return params.getShortCode(); } + public void setBinValue(String value) { + SystemParamsSettings params = getSystemParamsSettings(); + params.setBinValues(value); + saveSystemParamsSettings(params); + + } + + public String getBinValues() { + SystemParamsSettings params = getSystemParamsSettings(); + return params.getBinValues(); + } + public String getSecHostMerchantId() { SystemParamsSettings params = getSystemParamsSettings(); return params.getSecHostMerchantId(); diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java index 28df712..8e734b9 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java @@ -47,6 +47,8 @@ public class SystemParamsSettings implements Serializable { private String ereceiptAddress = "http://receipt-nest.utsmyanmar.com"; //for on prime // private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; //for uat + private String binValues = ""; + private String terminalName = ""; private String terminalCapability = "E0E8C8"; @@ -324,6 +326,14 @@ public class SystemParamsSettings implements Serializable { this.secHostIpAddress = secHostIpAddress; } + protected void setBinValues(String binValues) { + this.binValues = binValues; + } + + protected String getBinValues() { + return this.binValues; + } + protected void setDisabledMessage(String disabledMessage) { this.disabledMessage = disabledMessage; }