This commit is contained in:
moon 2026-06-01 20:20:05 +06:30
parent 14ad87e41f
commit 2eac171a6c
2 changed files with 56 additions and 14 deletions

View File

@ -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");
//
// 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) {

View File

@ -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";
// }