3 terminal capability

This commit is contained in:
moon 2026-04-08 15:04:17 +06:30
parent ecaa5b8eda
commit 56187a6639
4 changed files with 154 additions and 33 deletions

View File

@ -582,13 +582,20 @@ public class TMSSetupsImpl implements TMSSetups{
emvParamOperation.updatePayPassCurrencyCode(data);
} else if (TextUtils.equals(name,"terminal_capability")) {
if(!data.isEmpty()) {
SystemParamsOperation.getInstance().setTerminalCapability(data);
} else if (TextUtils.equals(name, "visa_terminal_capability")) {
if(!data.isEmpty()){
SystemParamsOperation.getInstance().setVisaTerminalCapability(data);
}
} else if (TextUtils.equals(name,"upi_ttq")) {
}else if (TextUtils.equals(name, "master_terminal_capability")) {
if(!data.isEmpty()){
SystemParamsOperation.getInstance().setMasterTerminalCapability(data);
}
}
else if (TextUtils.equals(name, "upi_terminal_capability")) {
if(!data.isEmpty()){
SystemParamsOperation.getInstance().setUpiTerminalCapability(data);
}
}else if (TextUtils.equals(name,"upi_ttq")) {
emvParamOperation.updateQuickPassTTQ(data);
} else if (TextUtils.equals(name, "upi_tc_enabled")) {
SystemParamsOperation.getInstance().setUpiTCEnabled(parseBoolean(data));

View File

@ -590,39 +590,97 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
public void onTransInitBeforeGPO() {
byte[] aid = emvHandler.getTlv(new byte[]{0x4F}, EmvDataSourceEnum.FROM_KERNEL);
LogUtil.d(TAG, "onTransInitBeforeGPO :");
String terminalCapability = SystemParamsOperation.getInstance().getTerminalCapability();
LogUtil.d(TAG,"Terminal capability :"+terminalCapability);
// emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, new byte[]{(byte) 0xE0, (byte) 0x28, (byte) 0xC8});
emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, ByteUtil.hexStr2Bytes(terminalCapability));
String visaTerminalCapability = SystemParamsOperation.getInstance().getVisaTerminalCapability();
String masterTerminalCapability = SystemParamsOperation.getInstance().getMasterTerminalCapability();
String upiTerminalCapability = SystemParamsOperation.getInstance().getUpiTerminalCapability();
String selectedTerminalCapability = "";
if (aid != null) {
String aidStr = ByteUtils.byteArray2HexString(aid).toUpperCase();
if (aidStr.contains("A000000003")) {
// VISA
selectedTerminalCapability = visaTerminalCapability;
} else if (aidStr.contains("A000000004")) {
// MasterCard
selectedTerminalCapability = masterTerminalCapability;
} else if (aidStr.contains("A000000333") || aidStr.contains("A000000025")) {
// UPI
selectedTerminalCapability = upiTerminalCapability;
}
}
//9F33
emvHandler.setTlv(
new byte[]{(byte) 0x9F, (byte) 0x33},
ByteUtil.hexStr2Bytes(selectedTerminalCapability)
);
// -------- Contactless --------
if (mPayDetail.getCardType() == CardTypeX.NFC.value) {
if (aid != null) {
if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000004")) {
//Paypass
String aidStr = ByteUtils.byteArray2HexString(aid).toUpperCase();
if (aidStr.contains("A000000004")) {
configPaypassParameter(aid);
} else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000003")) {
//Paywave
} else if (aidStr.contains("A000000003")) {
configPaywaveParameters();
} else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000025")) {
//ExpressPay
// configExpressPayParameter();
} else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000541")) {
} else if (aidStr.contains("A000000025")) {
// //imp
} else if (aidStr.contains("A000000541")) {
configPureContactlessParameter();
} else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000065")) {
} else if (aidStr.contains("A000000065")) {
configJcbContactlessParameter();
}
}
} 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}, ByteUtil.hexStr2Bytes(terminalCapability));
// emvHandler.setTlv(new byte[]{(byte) 0xE0, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk
//
// }
}
emvHandler.onSetTransInitBeforeGPOResponse(true);
}
// @Override
// public void onTransInitBeforeGPO() {
// byte[] aid = emvHandler.getTlv(new byte[]{0x4F}, EmvDataSourceEnum.FROM_KERNEL);
// LogUtil.d(TAG, "onTransInitBeforeGPO :");
//// String terminalCapability = SystemParamsOperation.getInstance().getTerminalCapability();
// String visaTerminalCapability = SystemParamsOperation.getInstance().getVisaTerminalCapability();
// String masterTerminalCapability = SystemParamsOperation.getInstance().getMasterTerminalCapability();
// String upiTerminalCapability = SystemParamsOperation.getInstance().getUpiTerminalCapability();
//// LogUtil.d(TAG,"Terminal capability :"+terminalCapability);
//// emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, new byte[]{(byte) 0xE0, (byte) 0x28, (byte) 0xC8});
// emvHandler.setTlv(new byte[]{(byte) 0x9F, (byte) 0x33}, ByteUtil.hexStr2Bytes(terminalCapability));
// if (mPayDetail.getCardType() == CardTypeX.NFC.value) {
// if (aid != null) {
// if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000004")) {
// //Paypass
// configPaypassParameter(aid);
// } else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000003")) {
// //Paywave
// configPaywaveParameters();
// } else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000025")) {
// //ExpressPay
//// configExpressPayParameter();
// } else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000541")) {
// configPureContactlessParameter();
// } else if (ByteUtils.byteArray2HexString(aid).toUpperCase().contains("A000000065")) {
// configJcbContactlessParameter();
// }
// }
// } 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}, ByteUtil.hexStr2Bytes(terminalCapability));
//// emvHandler.setTlv(new byte[]{(byte) 0xE0, (byte) 0x1D}, ByteUtils.hexString2ByteArray("6C00800000000000"));//terminal risk
////
//// }
// }
//
// emvHandler.onSetTransInitBeforeGPOResponse(true);
// }
@Override
public void onConfirmCardNo(CardInfoEntity cardInfoEntity) {
LogUtil.d(TAG, "onConfirmCardNo");

View File

@ -653,15 +653,45 @@ public class SystemParamsOperation {
return CurrencyType.valueOf(params.getCurrencyType());
}
public void setTerminalCapability(String terminalCapability) {
// public void setTerminalCapability(String terminalCapability) {
// SystemParamsSettings params = getSystemParamsSettings();
// params.setTerminalCapability(terminalCapability);
// saveSystemParamsSettings(params);
// }
//
// public String getTerminalCapability() {
// SystemParamsSettings params = getSystemParamsSettings();
// return params.getTerminalCapability();
// }
public void setVisaTerminalCapability(String visaTerminalCapability){
SystemParamsSettings params = getSystemParamsSettings();
params.setTerminalCapability(terminalCapability);
params.setVisaTerminalCapability(visaTerminalCapability);
saveSystemParamsSettings(params);
}
public String getTerminalCapability() {
public void setMasterTerminalCapability(String masterTerminalCapability){
SystemParamsSettings params = getSystemParamsSettings();
return params.getTerminalCapability();
params.setMasterTerminalCapability(masterTerminalCapability);
saveSystemParamsSettings(params);
}
public void setUpiTerminalCapability(String upiTerminalCapability){
SystemParamsSettings params = getSystemParamsSettings();
params.setUpiTerminalCapability(upiTerminalCapability);
saveSystemParamsSettings(params);
}
public String getVisaTerminalCapability(){
SystemParamsSettings params = getSystemParamsSettings();
return params.getVisaTerminalCapability();
}
public String getMasterTerminalCapability(){
SystemParamsSettings params = getSystemParamsSettings();
return params.getMasterTerminalCapability();
}
public String getUpiTerminalCapability(){
SystemParamsSettings params = getSystemParamsSettings();
return params.getUpiTerminalCapability();
}
public void setAuthToken(String authToken) {
@ -1885,4 +1915,5 @@ public class SystemParamsOperation {
return params.getPreAuthManual();
}
}

View File

@ -51,7 +51,10 @@ public class SystemParamsSettings implements Serializable {
private String terminalName = "";
private String terminalCapability = "E0E8C8";
// private String terminalCapability = "E0E8C8";
private String visaTerminalCapability = "E028C8";
private String masterTerminalCapability = "E068C8";
private String upiTerminalCapability = "E068C8";
private String ipAddress = "";
@ -499,9 +502,31 @@ public class SystemParamsSettings implements Serializable {
this.qrpay_inquiry_status = status;
}
protected String getTerminalCapability() { return terminalCapability;}
// protected String getTerminalCapability() { return terminalCapability;}
protected String getVisaTerminalCapability(){
return visaTerminalCapability;
}
protected void setTerminalCapability(String terminalCapability) { this.terminalCapability = terminalCapability; }
protected String getMasterTerminalCapability(){
return masterTerminalCapability;
}
protected String getUpiTerminalCapability(){
return upiTerminalCapability;
}
// protected void setTerminalCapability(String terminalCapability) { this.terminalCapability = terminalCapability; }
protected void setVisaTerminalCapability(String visaTerminalCapability){
this.visaTerminalCapability = visaTerminalCapability;
}
protected void setMasterTerminalCapability(String masterTerminalCapability){
this.masterTerminalCapability = masterTerminalCapability;
}
protected void setUpiTerminalCapability(String upiTerminalCapability){
this.upiTerminalCapability = upiTerminalCapability;
}
protected void setLastTransTime(String lastTransTime) {
this.lastTransTime = lastTransTime;
}