Compare commits

...

3 Commits

Author SHA1 Message Date
moon
7145000175 fix or jcb 2026-06-02 13:58:44 +06:30
moon
2eac171a6c jcb fix 2026-06-01 20:20:05 +06:30
moon
14ad87e41f change on prime server 2026-05-31 00:03:55 +06:30
9 changed files with 108 additions and 91 deletions

View File

@ -116,8 +116,8 @@ public class MainActivity extends AppCompatActivity implements
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar(); // BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar(); BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
// Keep screen on // Keep screen on
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
@ -162,8 +162,10 @@ public class MainActivity extends AppCompatActivity implements
private void initKey(){ private void initKey(){
// SystemParamsOperation.getInstance().setTmsAddress("https://api-tms.kbzbank.com/sirius"); // SystemParamsOperation.getInstance().setTmsAddress("https://api-tms.kbzbank.com/sirius");
// SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms.kbzbank.com/receipt"); // SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms.kbzbank.com/receipt");
SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius"); // SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius");
SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt"); // SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt");
SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com/api/v1");
SystemParamsOperation.getInstance().setEReceiptAddress("https://receipt-nest.utsmyanmar.com/api/v1");
PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad(); PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad();
byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK(); byte[] encryptedPIK = SystemParamsOperation.getInstance().getPIK();
@ -436,8 +438,8 @@ public class MainActivity extends AppCompatActivity implements
SystemParamsOperation.getInstance().setDownloadedParams(false); SystemParamsOperation.getInstance().setDownloadedParams(false);
handleAutoSettlementIntent(getIntent()); handleAutoSettlementIntent(getIntent());
BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar(); // BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar(); BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
} }

View File

@ -150,7 +150,8 @@ public class MainFragment extends DataBindingFragment {
@Override @Override
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
int result = BaseApplication.getInstance().deviceEngine.getPlatform().disableControlBar(); // int result = BaseApplication.getInstance().deviceEngine.getPlatform().disableControlBar();
int result = BaseApplication.getInstance().deviceEngine.getPlatform().enableControlBar();
LogUtil.d(TAG, "control bar result " + result); LogUtil.d(TAG, "control bar result " + result);
setNavBarIconWithTitle(getResourceString(R.string.menu_dashboard)); setNavBarIconWithTitle(getResourceString(R.string.menu_dashboard));

View File

@ -275,10 +275,8 @@ public class EReceiptUtil {
request.setDE39("A"); request.setDE39("A");
request.setDE37("0000"); request.setDE37("0000");
request.setDE49("MMK"); request.setDE49("MMK");
request.setDE41(terminalId); request.setDE41(terminalId);
request.setDE42(merchantId); request.setDE42(merchantId);
request.setSerial(serialNum); request.setSerial(serialNum);
request.setAppId(packageName); request.setAppId(packageName);

View File

@ -116,7 +116,7 @@ public class EmvParamOperation extends ParamOperation{
processPayWave(); processPayWave();
processPayPass(); processPayPass();
processQuickPass(); processQuickPass();
// processJSpeedy(); processJSpeedy();
processMPUCtls(); processMPUCtls();
processChips(); processChips();
processRids(); processRids();

View File

@ -298,7 +298,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
LogUtil.d(TAG, "TransData :" + transData.getTransAmount()); LogUtil.d(TAG, "TransData :" + transData.getTransAmount());
LogUtil.d(TAG, "start emv "); LogUtil.d(TAG, "start emv ");
// emvHandler.emvDebugLog(true); emvHandler.emvDebugLog(true);
emvHandler.emvProcess(transData, emvProcessListener); emvHandler.emvProcess(transData, emvProcessListener);
@ -560,6 +560,27 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
@Override @Override
public void onTransInitBeforeGPO() { public void onTransInitBeforeGPO() {
byte[] tag9F15 = emvHandler.getTlv(new byte[]{(byte) 0x9F, (byte) 0x15}, EmvDataSourceEnum.FROM_KERNEL);
Log.d(TAG, "tag9F15 (MCC)-->" + ByteUtils.byteArray2HexString(tag9F15));
if (tag9F15 != null) {
emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F15"), ByteUtils.hexString2ByteArray("0000"));
tag9F15 = emvHandler.getTlv(new byte[]{(byte) 0x9F, (byte) 0x15}, EmvDataSourceEnum.FROM_KERNEL);
Log.d(TAG, "after tag9F15-->" + ByteUtils.byteArray2HexString(tag9F15));
} else {
Log.d(TAG, "tag9F15 not found in kernel");
}
byte[] tag9F01 = emvHandler.getTlv(new byte[]{(byte) 0x9F, (byte) 0x01}, EmvDataSourceEnum.FROM_KERNEL);
Log.d(TAG, "tag9F01-->" + ByteUtils.byteArray2HexString(tag9F15));
if (tag9F01 != null) {
emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F01"), ByteUtils.hexString2ByteArray("000000000000"));
tag9F01 = emvHandler.getTlv(new byte[]{(byte) 0x9F, (byte) 0x01}, EmvDataSourceEnum.FROM_KERNEL);
Log.d(TAG, "after tag9F01-->" + ByteUtils.byteArray2HexString(tag9F01));
} else {
Log.d(TAG, "tag9F01 not found in kernel");
}
if (mMPUContactlessConfigured) { if (mMPUContactlessConfigured) {
LogUtil.d(TAG, "onTransInitBeforeGPO: skipping — MPU contactless already configured"); LogUtil.d(TAG, "onTransInitBeforeGPO: skipping — MPU contactless already configured");
@ -1016,13 +1037,11 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
/* For Yoma */ /* For Yoma */
String[] tagList = { String[] tagList = {
"9F2A", "9F26", "9F27", "9F10", "9F37", "9F36", "95", "9A", "9C", "9F02", "5F2A", "5F34", "82", "9F1A", //field 55 tag "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", "9F5B", "8A", "9B", "9F6E", "9F7C", "9F4C", "50", "9F12", "DF01", "9F63", "5F20", "9F0B", "9F42",
"FF31", "9F7B", "8E" "FF31", "9F7B", "8E","9F15", "9F01", "9F1B"
}; };
try { try {
String data = emvHandler.getTlvByTags(tagList); String data = emvHandler.getTlvByTags(tagList);
LogUtil.d(TAG, "getTlvByTags :" + data); LogUtil.d(TAG, "getTlvByTags :" + data);
@ -1385,13 +1404,61 @@ 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() { private void configJcbContactlessParameter() {
LogUtil.d(TAG, "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.setJcbContactlessTIP(ByteUtils.hexString2ByteArray("EE8000"));
emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F52"), ByteUtils.hexString2ByteArray("03")); // emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F53"), ByteUtils.hexString2ByteArray("EE8000"));
// emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F53"), ByteUtils.hexString2ByteArray("708000")); // emvHandler.setTlv(ByteUtils.hexString2ByteArray("DF8161"), ByteUtils.hexString2ByteArray("7F00"));
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));
}
byte[] tag9F15 = emvHandler.getTlv(new byte[]{(byte) 0x9F, (byte) 0x15}, EmvDataSourceEnum.FROM_KERNEL);
Log.d(TAG, "tag9F15 (MCC)-->" + ByteUtils.byteArray2HexString(tag9F15));
if (tag9F15 != null) {
emvHandler.setTlv(ByteUtils.hexString2ByteArray("9F15"), ByteUtils.hexString2ByteArray("0000"));
tag9F15 = emvHandler.getTlv(new byte[]{(byte) 0x9F, (byte) 0x15}, EmvDataSourceEnum.FROM_KERNEL);
Log.d(TAG, "after tag9F15-->" + ByteUtils.byteArray2HexString(tag9F15));
} else {
Log.d(TAG, "tag9F15 not found in kernel");
}
}
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) { protected void importOnlineProcess(int sdkResult, EmvOnlineResultEntity emvOnlineResult) {

View File

@ -530,10 +530,10 @@
"currencyCode": "0104" "currencyCode": "0104"
}, },
{ {
"aidEnable": false, "aidEnable": true,
"aid": "A00000006510", "aid": "A00000006510",
"cardScheme": "JCB", "cardScheme": "JCB",
"applicationVersion": "0030", "applicationVersion": "0200",
"emvDDOL": "9F3704", "emvDDOL": "9F3704",
"emvTDOL": "9F3704", "emvTDOL": "9F3704",
"partialAidSelection": false, "partialAidSelection": false,
@ -553,10 +553,10 @@
"currencyCode": "0104" "currencyCode": "0104"
}, },
{ {
"aidEnable": false, "aidEnable": true,
"aid": "A0000000651010", "aid": "A0000000651010",
"cardScheme": "JCB", "cardScheme": "JCB",
"applicationVersion": "0030", "applicationVersion": "0200",
"emvDDOL": "9F3704", "emvDDOL": "9F3704",
"emvTDOL": "9F3704", "emvTDOL": "9F3704",
"partialAidSelection": false, "partialAidSelection": false,
@ -576,10 +576,10 @@
"currencyCode": "0104" "currencyCode": "0104"
}, },
{ {
"aidEnable": false, "aidEnable": true,
"aid": "A0000001570040", "aid": "A0000001570040",
"cardScheme": "JCB", "cardScheme": "JCB",
"applicationVersion": "0030", "applicationVersion": "0200",
"emvDDOL": "9F3704", "emvDDOL": "9F3704",
"emvTDOL": "9F3704", "emvTDOL": "9F3704",
"partialAidSelection": false, "partialAidSelection": false,

View File

@ -250,66 +250,7 @@
"expDate": "3230333031323331", "expDate": "3230333031323331",
"checkSum": "BD331F9996A490B33C13441066A09AD3FEB5F66C" "checkSum": "BD331F9996A490B33C13441066A09AD3FEB5F66C"
}, },
{
"rid": "A000000065",
"indx": "07",
"hashInd": "01",
"arithInd": "00",
"modul": "B8DAB883EF1B5763E4F861F9EA3044B276635D402F3AE5E6B6C0547E368E79A36366DAC5609B6EC486DA1A8D2002CA4F4EFC2CB0EC1573A0B0917969EB60645BAEDF11C050C5D07FED817D11E84A174859A0DAE7F7935F109229C0AC4EE5BFB3D65533A679F0486C5AEFCC937379833BEC45D79DCF97B5228B1910FA03765331",
"exponent": "010001",
"expDate": "20201231",
"checkSum": "4896DD5A9EB5B11B9DCCA6DFE336C009F69F509A"
},
{
"rid": "A000000065",
"indx": "08",
"hashInd": "01",
"arithInd": "00",
"modul": "B74670DAD1DC8983652000E5A7F2F8B35DFD083EE593E5BA895C95729F2BADE9C8ABF3DD9CE240C451C6CEFFC768D83CBAC76ABB8FEA58F013C647007CFF7617BAC2AE3981816F25CC7E5238EF34C4F02D0B01C24F80C2C65E7E7743A4FA8E23206A23ECE290C26EA56DB085C5C5EAE26292451FC8292F9957BE8FF20FAD53E5",
"exponent": "03",
"expDate": "20201231",
"checkSum": "DD36D5896228C8C4900742F107E2F91FE50BC7EE"
},
{
"rid": "A000000065",
"indx": "09",
"hashInd": "01",
"arithInd": "00",
"modul": "B72A8FEF5B27F2B550398FDCC256F714BAD497FF56094B7408328CB626AA6F0E6A9DF8388EB9887BC930170BCC1213E90FC070D52C8DCD0FF9E10FAD36801FE93FC998A721705091F18BC7C98241CADC15A2B9DA7FB963142C0AB640D5D0135E77EBAE95AF1B4FEFADCF9C012366BDDA0455C1564A68810D7127676D493890BD",
"exponent": "03",
"expDate": "3230333031323331",
"checkSum": "4410C6D51C2F83ADFD92528FA6E38A32DF048D0A"
},
{
"rid": "A000000065",
"indx": "10",
"hashInd": "01",
"arithInd": "00",
"modul": "99B63464EE0B4957E4FD23BF923D12B61469B8FFF8814346B2ED6A780F8988EA9CF0433BC1E655F05EFA66D0C98098F25B659D7A25B8478A36E489760D071F54CDF7416948ED733D816349DA2AADDA227EE45936203CBF628CD033AABA5E5A6E4AE37FBACB4611B4113ED427529C636F6C3304F8ABDD6D9AD660516AE87F7F2DDF1D2FA44C164727E56BBC9BA23C0285",
"exponent": "03",
"expDate": "20201231",
"checkSum": "C75E5210CBE6E8F0594A0F1911B07418CADB5BAB"
},
{
"rid": "A000000065",
"indx": "11",
"hashInd": "01",
"arithInd": "00",
"modul": "A2583AA40746E3A63C22478F576D1EFC5FB046135A6FC739E82B55035F71B09BEB566EDB9968DD649B94B6DEDC033899884E908C27BE1CD291E5436F762553297763DAA3B890D778C0F01E3344CECDFB3BA70D7E055B8C760D0179A403D6B55F2B3B083912B183ADB7927441BED3395A199EEFE0DEBD1F5FC3264033DA856F4A8B93916885BD42F9C1F456AAB8CFA83AC574833EB5E87BB9D4C006A4B5346BD9E17E139AB6552D9C58BC041195336485",
"exponent": "03",
"expDate": "20201231",
"checkSum": "D9FD62C9DD4E6DE7741E9A17FB1FF2C5DB948BCB"
},
{
"rid": "A000000065",
"indx": "14",
"hashInd": "01",
"arithInd": "00",
"modul": "AEED55B9EE00E1ECEB045F61D2DA9A66AB637B43FB5CDBDB22A2FBB25BE061E937E38244EE5132F530144A3F268907D8FD648863F5A96FED7E42089E93457ADC0E1BC89C58A0DB72675FBC47FEE9FF33C16ADE6D341936B06B6A6F5EF6F66A4EDD981DF75DA8399C3053F430ECA342437C23AF423A211AC9F58EAF09B0F837DE9D86C7109DB1646561AA5AF0289AF5514AC64BC2D9D36A179BB8A7971E2BFA03A9E4B847FD3D63524D43A0E8003547B94A8A75E519DF3177D0A60BC0B4BAB1EA59A2CBB4D2D62354E926E9C7D3BE4181E81BA60F8285A896D17DA8C3242481B6C405769A39D547C74ED9FF95A70A796046B5EFF36682DC29",
"exponent": "03",
"expDate": "20201231",
"checkSum": "43A3151513B7ADCEB92DBEA2A262CEB336D26C83"
},
{ {
"rid": "A000000065", "rid": "A000000065",
"indx": "13", "indx": "13",

View File

@ -593,9 +593,16 @@ public class KernelDataProcessUtil {
// /* // /*
// * merchant category code // * merchant category code
// * */ // * */
// if (tlvMap.get("9F52") != null) {
// f55DataStr += "9F5201" + tlvMap.get("9F52").getValue();
// f55WaveDataStr += "9F5201" + tlvMap.get("9F52").getValue();
// }
//
// if (tlvMap.get("9F53") != null) { // if (tlvMap.get("9F53") != null) {
// f55DataStr += "9F5301" + tlvMap.get("9F53").getValue(); // f55DataStr += "9F5301" + tlvMap.get("9F53").getValue();
// } else { // f55WaveDataStr += "9F5301" + tlvMap.get("9F53").getValue();
// }
// else {
// f55DataStr += "9F530150"; // f55DataStr += "9F530150";
// } // }

View File

@ -42,12 +42,13 @@ public class SystemParamsSettings implements Serializable {
// private String tmsAddress = "https://api-tms.kbzbank.com/sirius"; // private String tmsAddress = "https://api-tms.kbzbank.com/sirius";
// private String ereceiptAddress = "https://api-tms.kbzbank.com/receipt"; // private String ereceiptAddress = "https://api-tms.kbzbank.com/receipt";
private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius"; // private String tmsAddress = "https://api-tms-uat.kbzbank.com:8443/sirius";
private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; // private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt";
private String tmsAddress = "https://sirius-nest.utsmyanmar.com/api/v1";
private String ereceiptAddress = "https://receipt-nest.utsmyanmar.com/api/v1";
private String binValues = ""; private String binValues = "";
private String restrictedBinValues = ""; private String restrictedBinValues = "";
private String terminalName = ""; private String terminalName = "";
// private String terminalCapability = "E0E8C8"; // private String terminalCapability = "E0E8C8";