From 9e2dd24f3d1ff7f9418f6c8269b38127632716ee Mon Sep 17 00:00:00 2001 From: kizzy Date: Thu, 5 Mar 2026 14:16:54 +0700 Subject: [PATCH 1/8] fixed for DE 52 --- app/src/main/java/com/utsmm/kbz/MainActivity.java | 8 ++++---- .../java/com/utsmm/kbz/service/AutoSettleService.java | 2 +- .../java/com/utsmyanmar/baselib/di/NetworkModule.java | 4 ++-- .../utsmyanmar/paylibs/utils/iso_utils/FieldConfig.java | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/MainActivity.java b/app/src/main/java/com/utsmm/kbz/MainActivity.java index 189f63a..c20fa1d 100644 --- a/app/src/main/java/com/utsmm/kbz/MainActivity.java +++ b/app/src/main/java/com/utsmm/kbz/MainActivity.java @@ -157,10 +157,10 @@ public class MainActivity extends AppCompatActivity implements } private void initKey(){ - 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("http://receipt-nest.utsmyanmar.com"); +// 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("http://receipt-nest.utsmyanmar.com"); PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad(); byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK(); 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 e397ac3..2e6563f 100644 --- a/app/src/main/java/com/utsmm/kbz/service/AutoSettleService.java +++ b/app/src/main/java/com/utsmm/kbz/service/AutoSettleService.java @@ -448,7 +448,7 @@ public class AutoSettleService extends Service { stopSelf(); } } - + @Override public void onCreate() { super.onCreate(); 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 c8732f3..6eecfb1 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/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/FieldConfig.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/FieldConfig.java index be8b436..41223a6 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/FieldConfig.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/FieldConfig.java @@ -103,8 +103,8 @@ public class FieldConfig { /* FLD 49 */ {0, SDK_8583_LEN_BCD, 3, SDK_8583_DATA_ASC, SDK_8583_ALIGN_R, ' '}, /* FLD 50 */ {0, SDK_8583_LEN_BCD, 12, SDK_8583_DATA_BCD, SDK_8583_ALIGN_R, '0'}, /* FLD 51 */ {0, SDK_8583_LEN_BCD, 12, SDK_8583_DATA_BCD, SDK_8583_ALIGN_R, '0'}, - /* FLD 52 */ {0, SDK_8583_LEN_BCD, 8, SDK_8583_DATA_BIT, SDK_8583_ALIGN_L, 0}, -// /* FLD 52 */ {0, SDK_8583_LEN_BCD, 8, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, ' '}, + /* FLD 52 */ {2, SDK_8583_LEN_ASC, 8, SDK_8583_DATA_BIT, SDK_8583_ALIGN_L, '0'}, +// /* FLD 52 */ {0, SDK_8583_LEN_BCD, 8, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, 0}, /* FLD 53 */ {2, SDK_8583_LEN_ASC, 32, SDK_8583_DATA_BCD, SDK_8583_ALIGN_L, '0'}, /* FLD 54 */ {3, SDK_8583_LEN_BCD, 40, SDK_8583_DATA_ASC, SDK_8583_ALIGN_L, ' '}, From 900ca456dd9383518490ad137b21643ce5b0d7ce Mon Sep 17 00:00:00 2001 From: kizzy Date: Thu, 5 Mar 2026 16:40:25 +0700 Subject: [PATCH 2/8] fixed for key issues --- .../main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java b/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java index f2880e8..7826b42 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java @@ -22,11 +22,13 @@ public final class TerminalKeyUtil { public static final String TAG = TerminalKeyUtil.class.getSimpleName(); -// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("875f63741753d18811a3449090d1777b".toUpperCase()); // KBZ UAT - private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); // MPU + private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("875f63741753d18811a3449090d1777b".toUpperCase()); // KBZ UAT +// private static final byte[] main_key_data = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); // MPU private static final byte[] work_key_data = new byte[16]; + + public static void initNexKey() { byte[] IPEKByte = ByteUtil.hexStr2Bytes("5A4CFF6DE93F0488926166F3317EFD2F"); // IPEK byte[] IPEKKCVByte = ByteUtil.hexStr2Bytes("1F0C18"); From 89252a673267316d755b5331fe95906881ccd9d5 Mon Sep 17 00:00:00 2001 From: kizzy Date: Fri, 6 Mar 2026 11:21:54 +0700 Subject: [PATCH 3/8] fixed com2 --- baselib/src/main/res/raw/paypass_config.json | 26 -------------------- 1 file changed, 26 deletions(-) diff --git a/baselib/src/main/res/raw/paypass_config.json b/baselib/src/main/res/raw/paypass_config.json index a628b31..d55b33f 100644 --- a/baselib/src/main/res/raw/paypass_config.json +++ b/baselib/src/main/res/raw/paypass_config.json @@ -49,7 +49,6 @@ "cateCode": "2701", "currencyCode": "0104" }, - { "aidEnable": true, "aid": "A0000000041010C123456789", @@ -74,30 +73,5 @@ "ttq": "36804000", "cateCode": "2701", "currencyCode": "0104" - }, - { - "aidEnable": true, - "aid": "A00000000430", - "cardLabel": "MASTERCARD", - "applicationVersion": "0002", - "emvDDOL": "9F3704", - "emvTDOL": "9F3704", - "partialAidSelection": false, - "targetPercent": "99", - "maxTargetPercent": "99", - "threshold": "00000040", - "tacDefault": "D84000A800", - "tacOnline": "DC4004F800", - "tacDenial": "0000000000", - "floorLimit": "000000000000", - "cvmLimit": 75000, - "transLimit": "999999999999", - "transLimitCDV": "999999999999", - "terminalCapability": "E0F8C8", - "riskManageData": "6C7A800000000000", - "kernelType": "02", - "ttq": "36804000", - "cateCode": "2701", - "currencyCode": "0104" } ] \ No newline at end of file From d8d1a5c1d5ecdf72737ad1b869f6db968451e696 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:25:14 +0630 Subject: [PATCH 4/8] amount fix --- .../core_viewmodel/InputAmountViewModel.java | 127 +++++++++--------- .../baselib/viewModel/EmvBaseViewModel.java | 4 +- 2 files changed, 64 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/InputAmountViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/InputAmountViewModel.java index a291968..8c31a80 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/InputAmountViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/InputAmountViewModel.java @@ -13,112 +13,109 @@ import java.util.Objects; public class InputAmountViewModel extends ViewModel { - private static final String TAG = InputAmountViewModel.class.getSimpleName(); - public MutableLiveData inputAmountView = new MutableLiveData<>(); - public SingleLiveEvent invalidAmountMsg = new SingleLiveEvent<>(); - public SingleLiveEvent availableAmount = new SingleLiveEvent<>(); + private static final int MAX_INT_DIGITS = 10; + private static final int MAX_DECIMAL_DIGITS = 2; public InputAmountViewModel() { inputAmountView.setValue("0"); } - private int countDecimalDigits(double number) { - String numberStr = Double.toString(number); - int decimalIndex = numberStr.indexOf('.'); - return decimalIndex >= 0 ? numberStr.length() - decimalIndex - 1 : 0; + private String formatInteger(String value) { + if (TextUtils.isEmpty(value)) return "0"; + double amt = Double.parseDouble(value); + DecimalFormat formatter = new DecimalFormat("#,###"); + return formatter.format(amt); } - - - public NumberKeyboard.KeyClickCallback onKeyClick() { return new NumberKeyboard.KeyClickCallback() { + @Override public void onNumClick(int keyNum) { - if (inputAmountView.getValue().length() == 15) { - return; - } + String current = inputAmountView.getValue(); + if (current == null) return; - if (TextUtils.equals(inputAmountView.getValue(), "0")) { - inputAmountView.setValue(keyNum + ""); - } else if (inputAmountView.getValue().contains(".")) { - StringBuilder inputAmount = new StringBuilder(); - inputAmount.append(inputAmountView.getValue()); + String raw = current.replace(",", ""); - int dotIndex = inputAmount.indexOf("."); + if (raw.contains(".")) { - if(inputAmount.substring(dotIndex).length() > 0 && inputAmount.substring(dotIndex+1).length() == 2) { + String[] parts = raw.split("\\."); + String intPart = parts[0]; + String decimalPart = parts.length > 1 ? parts[1] : ""; + + if (decimalPart.length() >= MAX_DECIMAL_DIGITS) { return; } - if (inputAmountView.getValue().contains(",")) { - inputAmountView.setValue(inputAmountView.getValue().replace(",", "")); - } - double amt = Double.parseDouble(inputAmountView.getValue()); - if (countDecimalDigits(amt) < 2) { - inputAmountView.setValue(inputAmountView.getValue() + keyNum); - } + raw = raw + keyNum; } else { - if (inputAmountView.getValue().contains(",")) { - inputAmountView.setValue(inputAmountView.getValue().replace(",", "")); + + if (raw.length() >= MAX_INT_DIGITS) { + return; } - inputAmountView.setValue(inputAmountView.getValue() + keyNum); - double amt = Double.parseDouble(inputAmountView.getValue()); - DecimalFormat formatter = new DecimalFormat("#,###"); - inputAmountView.setValue(formatter.format(amt)); + + if (TextUtils.equals(raw, "0")) { + raw = String.valueOf(keyNum); + } else { + raw = raw + keyNum; + } + } + + if (raw.contains(".")) { + String[] parts = raw.split("\\."); + String formattedInt = formatInteger(parts[0]); + String decimal = parts.length > 1 ? parts[1] : ""; + inputAmountView.setValue(formattedInt + "." + decimal); + } else { + inputAmountView.setValue(formatInteger(raw)); } } @Override public void onDelClick() { - if (Objects.requireNonNull(inputAmountView.getValue()).contains(".")) { - return; - } - if (inputAmountView.getValue().length() == 15) { - return; - } - if (TextUtils.equals(inputAmountView.getValue(), "0")) { + + String current = inputAmountView.getValue(); + if (current == null) return; + + if (current.contains(".")) return; + + if (TextUtils.equals(current, "0")) { inputAmountView.setValue("0."); } else { - - inputAmountView.setValue(inputAmountView.getValue() + "."); + inputAmountView.setValue(current + "."); } - } @Override public void onCleanClick() { - if (inputAmountView.getValue() != null) { - if (inputAmountView.getValue().contains(".")) { - StringBuilder inputAmount = new StringBuilder(); - inputAmount.append(inputAmountView.getValue()); - inputAmount.deleteCharAt(inputAmount.length() - 1); - inputAmountView.setValue(inputAmount.toString()); - } else if (!inputAmountView.getValue().equals("0")) { - String currentValue = inputAmountView.getValue(); - String rawNumber = currentValue.replace(",", ""); + String current = inputAmountView.getValue(); + if (current == null) return; - if (rawNumber.length() > 1) { - rawNumber = rawNumber.substring(0, rawNumber.length() - 1); + String raw = current.replace(",", ""); - double amt = Double.parseDouble(rawNumber); - DecimalFormat formatter = new DecimalFormat("#,###"); - inputAmountView.setValue(formatter.format(amt)); - } else { - inputAmountView.setValue("0"); - } - } + if (raw.length() <= 1) { + inputAmountView.setValue("0"); + return; + } + + raw = raw.substring(0, raw.length() - 1); + + if (raw.contains(".")) { + String[] parts = raw.split("\\."); + String formattedInt = formatInteger(parts[0]); + String decimal = parts.length > 1 ? parts[1] : ""; + inputAmountView.setValue(formattedInt + "." + decimal); + } else { + inputAmountView.setValue(formatInteger(raw)); } } }; } - - -} +} \ No newline at end of file diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java index 31ea53d..cc4b8d0 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -675,8 +675,8 @@ public abstract class EmvBaseViewModel extends BaseViewModel { } else { //contact terminal capability ; if different card brand(depend on aid) have different terminal capability if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000004")) { - emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, new byte[]{(byte) 0xE0, (byte) 0x28, (byte) 0xC8}); - emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk + emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, ByteUtil.hexStr2Bytes(terminalCapability)); + emvHandler.setTlv(new byte[]{(byte) 0xE0, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk } } From 620620e1389341846139dba2a1f7e967fbf5c74a Mon Sep 17 00:00:00 2001 From: kizzy Date: Fri, 6 Mar 2026 16:40:43 +0700 Subject: [PATCH 5/8] fixed for magstripe not allowed --- .../kbz/ui/core_ui/CardWaitingFragment.java | 3 +++ .../ui/core_ui/EmvTransactionFragment.java | 20 ++++++++++++++++++- .../EmvTransactionProcessViewModel.java | 3 +++ .../ui/core_viewmodel/SharedViewModel.java | 5 +++++ .../baselib/util/enums/EmvResultStatus.java | 3 ++- .../baselib/viewModel/EmvBaseViewModel.java | 16 ++++++++++----- 6 files changed, 43 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java index 66b3966..c128548 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java @@ -151,6 +151,9 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind }else if(sharedViewModel.getIsSeePhone().getValue() != null && sharedViewModel.getIsSeePhone().getValue()) { cardReadViewModel.setCheckCardAlertMsg("Please Tap!",false); setupCardReadProcess(true); + } else if(sharedViewModel.getIsCardAppBlock().getValue() != null && sharedViewModel.getIsCardAppBlock().getValue()) { + cardReadViewModel.setCheckCardAlertMsg("Magstripe not allowed!",false); + setupCardReadProcess(true); } else { setupCardReadProcess(false); } diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java index d6b9f27..693cc73 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/EmvTransactionFragment.java @@ -249,7 +249,25 @@ public class EmvTransactionFragment extends DataBindingFragment { } }); } - + break; + case CARD_APP_BLOCKED: + if(cardReadViewModel.cardTypeData.getValue()!= null && cardReadViewModel.cardTypeData.getValue() == CardTypeX.IC.value) { + isCardInserted(new CardDetectCallback() { + @Override + public void onComplete() { + sharedViewModel.setIsCardAppBlock(true); + navigateToCheckCard(); + } + }); + } else if(cardReadViewModel.cardTypeData.getValue() != null && cardReadViewModel.cardTypeData.getValue() == CardTypeX.NFC.value) { + isCardTaped("Please try again",new CardDetectCallback() { + @Override + public void onComplete() { + sharedViewModel.setIsCardAppBlock(true); + navigateToCheckCard(); + } + }); + } // sharedViewModel.set_errorFragmentMsg("Interface not found!"); // navigateToError(); break; diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java index f67347e..ef790eb 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java @@ -164,6 +164,9 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements case EMV_TRY_AGAIN: emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY); break; + case EMV_CARD_BLOCK: + emvResultStatus.postValue(EmvResultStatus.CARD_APP_BLOCKED); + break; case EMV_CONFIRM_CODE_VERIFY: emvResultStatus.postValue(EmvResultStatus.CONFIRM_CODE_VERIFY); break; diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java index 822858e..64b189f 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/SharedViewModel.java @@ -164,6 +164,7 @@ public class SharedViewModel extends ViewModel { private SingleLiveEvent isFallback = new SingleLiveEvent<>(); private SingleLiveEvent isSeePhone = new SingleLiveEvent<>(); + private SingleLiveEvent isCardAppBlock = new SingleLiveEvent<>(); private SingleLiveEvent _isCardDataExist = new SingleLiveEvent<>(); @@ -233,6 +234,10 @@ public class SharedViewModel extends ViewModel { public SingleLiveEvent getIsFallback() { return isFallback;} + public void setIsCardAppBlock(boolean status) { isCardAppBlock.setValue(status);} + + public SingleLiveEvent getIsCardAppBlock() {return isCardAppBlock;} + public void setIsSeePhone(boolean status) { isSeePhone.setValue(status);} public SingleLiveEvent getIsSeePhone() { return isSeePhone;} diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java b/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java index beac357..fd9d20c 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/util/enums/EmvResultStatus.java @@ -30,5 +30,6 @@ public enum EmvResultStatus { CONFIRM_CODE_VERIFY, MPU_CARD, SEE_PHONE, - OTHER_INTERFACE + OTHER_INTERFACE, + CARD_APP_BLOCKED } diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java index 31ea53d..aa1bded 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -153,6 +153,8 @@ public abstract class EmvBaseViewModel extends BaseViewModel { protected static final int EMV_ONLINE_PROCESS = 11; protected static final int EMV_ERROR = 12; protected static final int EMV_TRY_AGAIN = 13; + + protected static final int EMV_CARD_BLOCK = 23; protected static final int EMV_CTLS_TRY_AGAIN = 13; protected static final int EMV_CONFIRM_CODE_VERIFY = 14; @@ -674,11 +676,11 @@ public abstract class EmvBaseViewModel extends BaseViewModel { } } else { //contact terminal capability ; if different card brand(depend on aid) have different terminal capability - if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000004")) { - emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, new byte[]{(byte) 0xE0, (byte) 0x28, (byte) 0xC8}); - emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk - - } +// if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000004")) { +// emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, new byte[]{(byte) 0xE0, (byte) 0x28, (byte) 0xC8}); +// emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk +// +// } } emvHandler.onSetTransInitBeforeGPOResponse(true); @@ -825,6 +827,10 @@ public abstract class EmvBaseViewModel extends BaseViewModel { case SdkResult.Emv_Qpboc_Online://EMV Contactless: Online Process for union pay //union pay online contactless--application should go online break; + case SdkResult.Emv_Card_Block: + case SdkResult.Emv_App_Block: + mHandler.sendEmptyMessage(EMV_CARD_BLOCK); + break; case SdkResult.Emv_Candidatelist_Empty:// Application have no aid list case SdkResult.Emv_FallBack:// FallBack ,chip card reset failed From 80a1229d0f635dc2aa0ee724e156f36a810e294b Mon Sep 17 00:00:00 2001 From: kizzy Date: Fri, 6 Mar 2026 16:43:56 +0700 Subject: [PATCH 6/8] fixed for magstripe not allowed and 12 digit pin --- .../core_viewmodel/EmvTransactionProcessViewModel.java | 2 +- .../utsmyanmar/baselib/viewModel/EmvBaseViewModel.java | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java index ef790eb..ceff41c 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java @@ -164,7 +164,7 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements case EMV_TRY_AGAIN: emvResultStatus.postValue(EmvResultStatus.READ_CARD_RETRY); break; - case EMV_CARD_BLOCK: + case EMV_CARD_APP_BLOCK: emvResultStatus.postValue(EmvResultStatus.CARD_APP_BLOCKED); break; case EMV_CONFIRM_CODE_VERIFY: diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java index cc4b8d0..6b36192 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -153,6 +153,8 @@ public abstract class EmvBaseViewModel extends BaseViewModel { protected static final int EMV_ONLINE_PROCESS = 11; protected static final int EMV_ERROR = 12; protected static final int EMV_TRY_AGAIN = 13; + + protected static final int EMV_CARD_APP_BLOCK = 23; protected static final int EMV_CTLS_TRY_AGAIN = 13; protected static final int EMV_CONFIRM_CODE_VERIFY = 14; @@ -599,7 +601,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel { // customPinPadKeyboard.setKeyBoard(ByteUtil.bytes2HexStr(number)); LogUtil.d(TAG, "PinPad: " + ByteUtil.bytes2HexStr(number)); - int[] supperLen = new int[]{0x00, 0x04, 0x06}; + int[] supperLen = new int[]{0x00, 0x04, 0x06,0x12}; pinPad.setPinKeyboardViewMode(PinKeyboardViewModeEnum.DEFAULT); @@ -826,6 +828,11 @@ public abstract class EmvBaseViewModel extends BaseViewModel { //union pay online contactless--application should go online break; + case SdkResult.Emv_App_Block: + case SdkResult.Emv_Card_Block: + mHandler.sendEmptyMessage(EMV_CARD_APP_BLOCK); + break; + case SdkResult.Emv_Candidatelist_Empty:// Application have no aid list case SdkResult.Emv_FallBack:// FallBack ,chip card reset failed //fallback process From 83bc15a7ab7a07f9775aaa40f73edd901d6ff3c5 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Fri, 6 Mar 2026 23:06:11 +0630 Subject: [PATCH 7/8] pinpad fix --- .../java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java index 6b36192..dac35b2 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -601,7 +601,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel { // customPinPadKeyboard.setKeyBoard(ByteUtil.bytes2HexStr(number)); LogUtil.d(TAG, "PinPad: " + ByteUtil.bytes2HexStr(number)); - int[] supperLen = new int[]{0x00, 0x04, 0x06,0x12}; + int[] supperLen = new int[]{0x00, 0x04, 0x06, 0x0c}; pinPad.setPinKeyboardViewMode(PinKeyboardViewModeEnum.DEFAULT); From 5ee9745762af8b6f679df60040e9a9824dfb28c1 Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Fri, 6 Mar 2026 23:42:24 +0630 Subject: [PATCH 8/8] server address --- app/src/main/java/com/utsmm/kbz/MainActivity.java | 2 +- .../paylibs/utils/core_utils/SystemParamsSettings.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/utsmm/kbz/MainActivity.java b/app/src/main/java/com/utsmm/kbz/MainActivity.java index c20fa1d..390c62f 100644 --- a/app/src/main/java/com/utsmm/kbz/MainActivity.java +++ b/app/src/main/java/com/utsmm/kbz/MainActivity.java @@ -160,7 +160,7 @@ public class MainActivity extends AppCompatActivity implements // 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("http://receipt-nest.utsmyanmar.com"); + SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com"); PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad(); byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK(); 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 229d8de..2531c0e 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 @@ -42,10 +42,10 @@ public class SystemParamsSettings implements Serializable { // private String tmsAddress = "https://tms.smile-mm.com"; // private String tmsAddress = "http://128.199.170.203"; -// private String tmsAddress = "https://sirius-nest.utsmyanmar.com"; - private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; //for uat -// private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com"; //for on prime - private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; //for uat + private String tmsAddress = "https://sirius-nest.utsmyanmar.com"; +// private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; //for uat + private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com"; //for on prime +// private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; //for uat private String binValues = "";