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,12 +582,19 @@ public class TMSSetupsImpl implements TMSSetups{
emvParamOperation.updatePayPassCurrencyCode(data); emvParamOperation.updatePayPassCurrencyCode(data);
} else if (TextUtils.equals(name,"terminal_capability")) { } else if (TextUtils.equals(name, "visa_terminal_capability")) {
if(!data.isEmpty()){ if(!data.isEmpty()){
SystemParamsOperation.getInstance().setTerminalCapability(data); SystemParamsOperation.getInstance().setVisaTerminalCapability(data);
}
}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")) { }else if (TextUtils.equals(name,"upi_ttq")) {
emvParamOperation.updateQuickPassTTQ(data); emvParamOperation.updateQuickPassTTQ(data);
} else if (TextUtils.equals(name, "upi_tc_enabled")) { } else if (TextUtils.equals(name, "upi_tc_enabled")) {

View File

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

View File

@ -653,15 +653,45 @@ public class SystemParamsOperation {
return CurrencyType.valueOf(params.getCurrencyType()); 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(); SystemParamsSettings params = getSystemParamsSettings();
params.setTerminalCapability(terminalCapability); params.setVisaTerminalCapability(visaTerminalCapability);
saveSystemParamsSettings(params); saveSystemParamsSettings(params);
} }
public String getTerminalCapability() { public void setMasterTerminalCapability(String masterTerminalCapability){
SystemParamsSettings params = getSystemParamsSettings(); 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) { public void setAuthToken(String authToken) {
@ -1885,4 +1915,5 @@ public class SystemParamsOperation {
return params.getPreAuthManual(); return params.getPreAuthManual();
} }
} }

View File

@ -51,7 +51,10 @@ public class SystemParamsSettings implements Serializable {
private String terminalName = ""; 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 = ""; private String ipAddress = "";
@ -499,9 +502,31 @@ public class SystemParamsSettings implements Serializable {
this.qrpay_inquiry_status = status; 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) { protected void setLastTransTime(String lastTransTime) {
this.lastTransTime = lastTransTime; this.lastTransTime = lastTransTime;
} }