From 2eac171a6cd1cae255ee3d9a1b4f4f62f110c1cb Mon Sep 17 00:00:00 2001 From: moon <56061215+MgKyawLay@users.noreply.github.com> Date: Mon, 1 Jun 2026 20:20:05 +0630 Subject: [PATCH] jcb fix --- .../baselib/viewModel/EmvBaseViewModel.java | 57 +++++++++++++++---- .../core_utils/KernelDataProcessUtil.java | 13 ++++- 2 files changed, 56 insertions(+), 14 deletions(-) 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 cc8cf7c..5ddec1f 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/viewModel/EmvBaseViewModel.java @@ -298,7 +298,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel { LogUtil.d(TAG, "TransData :" + transData.getTransAmount()); LogUtil.d(TAG, "start emv "); -// emvHandler.emvDebugLog(true); + emvHandler.emvDebugLog(true); emvHandler.emvProcess(transData, emvProcessListener); @@ -1016,13 +1016,11 @@ public abstract class EmvBaseViewModel extends BaseViewModel { /* For Yoma */ String[] tagList = { "9F2A", "9F26", "9F27", "9F10", "9F37", "9F36", "95", "9A", "9C", "9F02", "5F2A", "5F34", "82", "9F1A", //field 55 tag - "9F03", "9F33", "4F", "9F08", "9F34", "9F35", "9F1E", "9F53", "84", "9F09", "9F41", //field55 tag + "9F03", "9F33", "4F", "9F08", "9F34", "9F35", "9F1E", "9F52","9F53", "84", "9F09", "9F41", //field55 tag "9F5B", "8A", "9B", "9F6E", "9F7C", "9F4C", "50", "9F12", "DF01", "9F63", "5F20", "9F0B", "9F42", - "FF31", "9F7B", "8E" - + "FF31", "9F7B", "8E","9F15" }; - try { String data = emvHandler.getTlvByTags(tagList); LogUtil.d(TAG, "getTlvByTags :" + data); @@ -1385,13 +1383,50 @@ public abstract class EmvBaseViewModel extends BaseViewModel { } - private void configJcbContactlessParameter() { - LogUtil.d(TAG, "configJcbContactlessParameter"); +// private void configJcbContactlessParameter() { +// LogUtil.d(TAG, "configJcbContactlessParameter"); +// +// emvHandler.setJcbContactlessTIP(ByteUtils.hexString2ByteArray("EE8000")); +// emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F52"), ByteUtils.hexString2ByteArray("02")); +//// emvHandler.setJcbContactlessTIP(ByteUtils.hexString2ByteArray("708000")); +//// emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F52"), ByteUtils.hexString2ByteArray("02")); +//// emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F53"), ByteUtils.hexString2ByteArray("EE8000")); +//// emvHandler.setTlv(ByteUtils.hexString2ByteArray("DF8161"), ByteUtils.hexString2ByteArray("7F00")); +//// emvHandler.setJcbContactlessTIP(ByteUtils.hexString2ByteArray("F88000")); +// } +private void configJcbContactlessParameter() { + LogUtil.d(TAG, "configJcbContactlessParameter"); + //9F52 to set magstripe mode not support + byte[] tagff8178 = emvHandler.getTlv(new byte[]{(byte) 0xff, (byte) 0x81,(byte) 0x78}, EmvDataSourceEnum.FROM_KERNEL); + LogUtil.d(TAG,"tagff8178-->" + ByteUtils.byteArray2HexString(tagff8178)); + tagff8178[0] = setBitValue(tagff8178[0], 3, (byte) 0); +// tagff8178[0] = setBitValue(tagff8178[0], 1, (byte) 0); + emvHandler.setTlv(ByteUtils.hexString2ByteArray("ff8178"),tagff8178); + tagff8178 = emvHandler.getTlv(new byte[]{(byte) 0xff, (byte) 0x81,(byte) 0x78}, EmvDataSourceEnum.FROM_KERNEL); + LogUtil.d(TAG,"after tagff8178-->" + ByteUtils.byteArray2HexString(tagff8178)); - emvHandler.setJcbContactlessTIP(ByteUtils.hexString2ByteArray("708000")); - emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F52"), ByteUtils.hexString2ByteArray("03")); -// emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F53"), ByteUtils.hexString2ByteArray("708000")); - emvHandler.setTlv(ByteUtils.hexString2ByteArray("DF8161"), ByteUtils.hexString2ByteArray("7F00")); +// emvHandler.setJcbContactlessTIP(ByteUtils.hexString2ByteArray("EE8000")); +// emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F53"), ByteUtils.hexString2ByteArray("EE8000")); +// emvHandler.setTlv(ByteUtils.hexString2ByteArray("DF8161"), ByteUtils.hexString2ByteArray("7F00")); + byte[] tag9F53 = emvHandler.getJcbContactlessTIP(); + Log.d("nexgo", "getJcbContactlessTIP: tag9F53->:" + ByteUtils.byteArray2HexString(tag9F53)); + if (tag9F53 != null) { + tag9F53[1] &= 0x7F; //disable issuer update + emvHandler.setJcbContactlessTIP(tag9F53); + Log.d("nexgo", "tag9F53->:" + ByteUtils.byteArray2HexString(tag9F53)); + + } +} + + private byte setBitValue(byte originalByte, int bitPosition, byte bitValue) { + int shift = bitPosition - 1; // convert 1-based to 0-based + if (bitValue == 1) { + // Set bit to 1 + return (byte) (originalByte | (1 << shift)); + } else { + // Set bit to 0 + return (byte) (originalByte & ~(1 << shift)); + } } protected void importOnlineProcess(int sdkResult, EmvOnlineResultEntity emvOnlineResult) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/KernelDataProcessUtil.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/KernelDataProcessUtil.java index 2452bc2..9b2dc42 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/KernelDataProcessUtil.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/KernelDataProcessUtil.java @@ -593,9 +593,16 @@ public class KernelDataProcessUtil { // /* // * merchant category code // * */ -// if (tlvMap.get("9F53") != null) { -// f55DataStr += "9F5301" + tlvMap.get("9F53").getValue(); -// } else { + if (tlvMap.get("9F52") != null) { + f55DataStr += "9F5201" + tlvMap.get("9F52").getValue(); + f55WaveDataStr += "9F5201" + tlvMap.get("9F52").getValue(); + } + + if (tlvMap.get("9F53") != null) { + f55DataStr += "9F5301" + tlvMap.get("9F53").getValue(); + f55WaveDataStr += "9F5301" + tlvMap.get("9F53").getValue(); + } +// else { // f55DataStr += "9F530150"; // }