Compare commits

..

No commits in common. "83d7f4456173e51eb4e5c8f5245b9698d2305ae0" and "4ce7a9355c6472a57f5bff3b22693e12c1ed8183" have entirely different histories.

38 changed files with 236 additions and 301 deletions

File diff suppressed because one or more lines are too long

View File

@ -4,14 +4,6 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-12-11T11:35:06.715134Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=0123456789ABCDEF" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState>
</selectionStates>
</component>

View File

@ -853,14 +853,9 @@ public class MainFragment extends DataBindingFragment {
}
public void onClickQR(){
if(TMSUtil.getInstance().checkQRParams().isStatus() == ValidityStatus.FAILURE) {
showDeclineDialog(getResourceString(R.string.txt_please_download_config)+"\n"+TMSUtil.getInstance().checkQRParams().getMessage());
} else {
routeId = R.id.action_nav_main_to_qrFragment;
safeNavigateToRouteId();
}
// navigate to new QR Pay fragment
routeId = R.id.action_nav_main_to_qrFragment;
safeNavigateToRouteId();
}
public void onClickQRPay() {

View File

@ -58,6 +58,7 @@ public class SettingsFragment extends DataBindingFragment {
private int count = 0;
// Data binding will handle view access automatically
private FragmentSettingsModernBinding binding;
@Inject
@ -65,12 +66,14 @@ public class SettingsFragment extends DataBindingFragment {
@Override
protected void initViewModel() {
// Initialize ViewModels in initViewModel as per pattern
settlementViewModel = getFragmentScopeViewModel(SettlementViewModel.class);
mainViewModel = getFragmentScopeViewModel(MainViewModel.class);
}
@Override
protected DataBindingConfig getDataBindingConfig() {
// This is the key method that links the XML and fragment properly
return new DataBindingConfig(R.layout.fragment_settings_modern, 0, null)
.addBindingParam(BR.click, new ClickEvent());
}
@ -94,14 +97,19 @@ public class SettingsFragment extends DataBindingFragment {
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
try {
LogUtil.d(TAG, "onViewCreated called");
SystemParamsOperation.getInstance().setDemoStatus(false);
// Get the binding from the base class - this is automatically created
binding = (FragmentSettingsModernBinding) mBinding;
updateDemoSettings();
LogUtil.d(TAG, "Updating settings...");
updateSettings();
LogUtil.d(TAG, "Settings fragment initialized successfully");
} catch (Exception e) {
LogUtil.e(TAG, "Error initializing fragment: " + e.getMessage());
e.printStackTrace();
}
@ -110,7 +118,12 @@ public class SettingsFragment extends DataBindingFragment {
@Override
public void onResume() {
super.onResume();
setToolBarTitleWithBackIcon("Settings");
try {
setToolBarTitleWithBackIcon("Settings");
LogUtil.d(TAG, "Settings screen resumed");
} catch (Exception e) {
LogUtil.e(TAG, "Error in onResume: " + e.getMessage());
}
}
@ -291,6 +304,7 @@ public class SettingsFragment extends DataBindingFragment {
public void onUpdateConfigClick() {
try {
LogUtil.d(TAG, "Update config clicked");
settlementViewModel.getSettlementPOS().observe(getViewLifecycleOwner(), payDetails -> {
try {
if (payDetails != null && payDetails.size() > 0) {

View File

@ -84,12 +84,14 @@ public class SignatureFragment extends DataBindingFragment {
@Override
public void onSigned() {
LogUtil.d(TAG,"ON Signed !");
isSigned = true;
}
@Override
public void onClear() {
isSigned = false;
LogUtil.d(TAG,"ON Clear !");
}
});
}

View File

@ -121,7 +121,7 @@ public class TransactionResultFragment extends DataBindingFragment implements Da
}
setToolBarTitleWithoutBackIcon(getResourceString(R.string.txt_title_trans_result));
} else if(qrStatus == 1 || qrStatus == -1 || qrStatus == 2 || qrStatus == 3 ) {
/* QR STATUS */
/* WAVE QR STATUS */
setToolBarTitleWithoutBackIcon(getResourceString(R.string.txt_title_qr_pay));
} else {
setToolBarTitleWithoutBackIcon(getResourceString(R.string.txt_title_error));

View File

@ -71,7 +71,7 @@ public class TMSProcessViewModel extends ViewModel {
}
public void loadEmvParameters() {
// emvParamOperation.loadAidRids();
emvParamOperation.loadAidRids();
emvParamOperation.loadEmvTerminalParam();
}

View File

@ -344,8 +344,6 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.FAIL);
sharedViewModel.pushReceipt(request);
sharedViewModel.insertPayDetail(payDetail);
sharedViewModel.payDetail.postValue(payDetail);
safeNavigateToRouteId();
@ -355,20 +353,14 @@ public class QRTransactionFragment extends DataBindingFragment implements DataBi
LogUtil.d(TAG, "On Exception::");
// sharedViewModel.pushReceipt(buildEReceiptQRReceipt(payDetail, false, "QR Failed! :" + e.getMessage()));
e.printStackTrace();
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.TIME_OUT);
sharedViewModel.pushReceipt(request);
if (count == totalCount) {
if(payDetail.getQrTransStatus() != -1) {
payDetail.setQrTransStatus(2);
}
EReceiptRequest request = EReceiptUtil.getInstance().generateQRReceipt(payDetail, TransResultStatus.TIME_OUT);
sharedViewModel.pushReceipt(request);
sharedViewModel.insertPayDetail(payDetail);
sharedViewModel.payDetail.postValue(payDetail);
safeNavigateToRouteId();
}

View File

@ -299,10 +299,10 @@ public class ReprintAnyTransactionFragment extends DataBindingFragment {
//
// LogUtil.d(TAG,"----------------------------------------------------------");
if(sharedViewModel.transactionsType.getValue() != null && sharedViewModel.transactionsType.getValue() == TransactionsType.MMQR_HISTORY) {
if(sharedViewModel.transactionsType.getValue() != null && sharedViewModel.transactionsType.getValue() == TransactionsType.MMQR_INQUIRY_STATUS) {
// Wave Inquiry Status::
// April 2, 2024 QR Inquiry status check is for unsuccessful transactions.
if(yesterday.compareTo(transDate) <= 0 && pay.getTransactionType() == TransactionsType.MMQR.value ) {
if(yesterday.compareTo(transDate) <= 0 && pay.getTransactionType() == TransactionsType.MMQR.value && pay.getQrTransStatus() != 1) {
filteredLists.add(pay);
}

View File

@ -130,7 +130,6 @@ public class QRPayFragment extends DataBindingFragment {
private void onClickHistory(){
sharedViewModel.hostType.setValue(HostType.QR);
sharedViewModel.setTransactionsType(TransactionsType.MMQR_HISTORY);
routeId = R.id.action_qrFragment_to_qrHistory;
safeNavigateToRouteId();
}

View File

@ -282,7 +282,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
delayFunctionCall(()->{
routeId = R.id.action_QRSettlementTransactionFragment_to_transactionResultFragment;
safeNavigateToRouteId();
},1000);
},500);
}
@ -322,7 +322,7 @@ public class QRSettlementTransactionFragment extends DataBindingFragment impleme
if(sharedViewModel.getTransMenu().getValue() == TransMenu.SETTLEMENT) {
if (!qrTransactionsList.isEmpty()) {
for (PayDetail payDetail : qrTransactionsList) {
// settlementViewModel.deletePayDetail(payDetail);
settlementViewModel.deletePayDetail(payDetail);
}
updateData();

View File

@ -45,7 +45,7 @@ public class EReceiptUtil {
serialNum = TMSUtil.getInstance().getSerialNumber();
packageName = BuildConfig.APPLICATION_ID;
qrTerminalId = SystemParamsOperation.getInstance().getSecHostTerminalId();
qrMerchantId = SystemParamsOperation.getInstance().getShortCode();
qrMerchantId = SystemParamsOperation.getInstance().getSecHostMerchantId();
}
public EReceiptRequest generateQRReceipt(PayDetail payDetail, TransResultStatus status) {

View File

@ -251,28 +251,6 @@ public class TMSUtil {
return tmsValidity;
}
public TMSValidity checkQRParams() {
TMSValidity tmsValidity;
String shortCode = SystemParamsOperation.getInstance().getShortCode();
String appId = SystemParamsOperation.getInstance().getAppId();
String appKey = SystemParamsOperation.getInstance().getAppKey();
if(shortCode.length() == 11 && !appId.isEmpty() && !appKey.isEmpty()) {
tmsValidity = new TMSValidity(ValidityStatus.SUCCESS,"Success");
} else if(shortCode.length() != 11) {
tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Invalid Short Code!");
} else if(appId.isEmpty() ) {
tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Invalid AppId!");
} else {
tmsValidity = new TMSValidity(ValidityStatus.FAILURE,"Invalid AppKey!");
}
return tmsValidity;
}
public TMSValidity checkSecHostParams() {
TMSValidity tmsValidity;

View File

@ -101,16 +101,21 @@ public class BaseApplication extends Application {
TerminalKeyUtil.initNexKey();
emvParamOperation.loadAidRids();
} catch (UnsatisfiedLinkError e) {
// Handle missing native library gracefully
android.util.Log.e("BaseApplication", "Failed to initialize NexGo SDK due to missing native library: " + e.getMessage());
// You can set a flag here to indicate that NexGo functionality is unavailable
// and handle this condition in your app's UI/logic
} catch (Exception e) {
android.util.Log.e("BaseApplication", "Failed to initialize NexGo SDK: " + e.getMessage());
}
}
private void initFallbackMode() {
// Initialize basic functionality without NexGo SDK
android.util.Log.w("BaseApplication", "Running in fallback mode without NexGo SDK");
// You can add basic initialization here that doesn't depend on the device SDK
try {
// Only load EMV parameters if emvParamOperation is available
if (emvParamOperation != null) {
emvParamOperation.loadAidRids();
}

View File

@ -37,7 +37,4 @@ public interface JSpeedyDao {
@Query("DELETE FROM j_speedy")
Completable deleteAll();
@Query("UPDATE j_speedy SET ttq = :ttq")
Completable updateTTQ(String ttq);
}

View File

@ -39,7 +39,4 @@ public interface PayPassDao {
@Query("DELETE FROM pay_pass")
Completable deleteAll();
@Query("UPDATE pay_pass SET ttq = :ttq")
Completable updateTTQ(String ttq);
}

View File

@ -37,7 +37,4 @@ public interface PayWaveDao {
@Query("DELETE FROM pay_wave")
Completable deleteAll();
@Query("UPDATE pay_wave SET ttq = :ttq")
Completable updateTTQ(String ttq);
}

View File

@ -503,7 +503,7 @@ public class EmvParamHelper {
capkV2.setRid(ridEntity.getRid());
}
if (ridEntity.getIndx() != null && !ridEntity.getIndx().isEmpty()) {
capkV2.setCapkIdx(Integer.parseInt(ridEntity.getIndx(),16));
capkV2.setCapkIdx(Integer.parseInt(ridEntity.getIndx()));
}
if (ridEntity.getHashInd() != null && !ridEntity.getHashInd().isEmpty()) {
capkV2.setHashInd(Integer.parseInt(ridEntity.getHashInd()));

View File

@ -119,15 +119,13 @@ public class EmvParamOperation extends ParamOperation{
processPayPass();
processQuickPass();
processJSpeedy();
processMPUCtls();
// processMPUCtls();
processChips();
processRids();
}
public void loadEmvTerminalParam() {
// initEmvTerminalParam();
loadAidRids();
initEmvTerminalParam();
}
private void initEmvTerminalParam() {
@ -257,10 +255,10 @@ public class EmvParamOperation extends ParamOperation{
}
public void updateQuickPassTTQ(String ttq) {
processUpdateTTQ(quickPassEntityRxUtil, quickPassRepository, ttq, new RxCallbackUpdateX() {
processUpdateQuickPassTTQ(quickPassEntityRxUtil, quickPassRepository, ttq, new RxCallbackUpdateX() {
@Override
public void onError(Throwable throwable) {
LogUtil.d(TAG,"Error occur updating UPI Ctls ttq");
LogUtil.d(TAG,"Error occur updating JCB Ctls CurrencyCode");
}
@Override
@ -269,48 +267,6 @@ public class EmvParamOperation extends ParamOperation{
}
});
}
public void updateJSpeedyTTQ(String ttq) {
processUpdateTTQ(jSpeedyEntityRxUtil, jSpeedyRepository, ttq, new RxCallbackUpdateX() {
@Override
public void onError(Throwable throwable) {
LogUtil.d(TAG,"Error occur updating JCB Ctls ttq");
}
@Override
public void onComplete() {
LogUtil.d(TAG,"Updated UPI TTQ to "+ttq);
}
});
}
public void updatePayWaveTTQ(String ttq) {
processUpdateTTQ(payWaveEntityRxUtil, payWaveRepository, ttq, new RxCallbackUpdateX() {
@Override
public void onError(Throwable throwable) {
LogUtil.d(TAG,"Error occur updating visa Ctls ttq");
}
@Override
public void onComplete() {
LogUtil.d(TAG,"Updated visa TTQ to "+ttq);
}
});
}
public void updatePayPassTTQ(String ttq) {
processUpdateTTQ(payPassEntityRxUtil, payPassRepository, ttq, new RxCallbackUpdateX() {
@Override
public void onError(Throwable throwable) {
LogUtil.d(TAG,"Error occur updating master Ctls ttq");
}
@Override
public void onComplete() {
LogUtil.d(TAG,"Updated master TTQ to "+ttq);
}
});
}
public void updateJCBCurrencyCode(String currencyCode) {
processUpdateCtlsCurrencyCode(jSpeedyEntityRxUtil, jSpeedyRepository, currencyCode, new RxCallbackUpdateX() {
@Override

View File

@ -82,7 +82,7 @@ public class ParamOperation {
});
}
protected <T> void processUpdateTTQ(RxHelper<T> rxHelper, ParamRepository paramRepository, String ttq, RxCallbackUpdateX rxCallbackUpdateX) {
protected <T> void processUpdateQuickPassTTQ(RxHelper<T> rxHelper, QuickPassRepository paramRepository, String ttq, RxCallbackUpdateX rxCallbackUpdateX) {
rxHelper.updateData(paramRepository.updateTTQ(ttq), new RxCallbackUpdateX() {
@Override
public void onError(Throwable throwable) {
@ -96,7 +96,6 @@ public class ParamOperation {
});
}
protected <T> void processUpdateCtlsCurrencyCode(RxHelper<T> rxHelper, ParamRepository<T> paramRepository, String currencyCode, RxCallbackUpdateX rxCallbackUpdateX) {
rxHelper.updateData(paramRepository.updateCurrencyCode(currencyCode), new RxCallbackUpdateX() {
@Override
@ -130,25 +129,27 @@ public class ParamOperation {
rxHelper.queryData(paramRepository.getAll(), new RxCallbackX<List<T>>() {
@Override
public void onSuccess(List<T> data) {
if (data != null && !data.isEmpty()) {
LogUtil.d(TAG, clazz.getSimpleName() + " loaded from DB: " + data.size());
result.onSuccess(data);
return;
}
List<T> list = loadJsonConfig(id, clazz);
deleteAll(rxHelper, paramRepository, new RxCallbackUpdateX() {
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onComplete() {
insertData(paramRepository, list);
LogUtil.d(TAG, clazz.getSimpleName() + "json file extract size: " + list.size());
result.onSuccess(list);
}
});
if (data.isEmpty() || list.size() != data.size()) {
deleteAll(rxHelper, paramRepository, new RxCallbackUpdateX() {
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onComplete() {
insertData(paramRepository, list);
LogUtil.d(TAG, clazz.getSimpleName() + "json file extract size: " + list.size());
result.onSuccess(list);
}
});
} else {
result.onSuccess(data);
LogUtil.d(TAG, clazz.getSimpleName() + " db size: " + data.size());
}
}
@Override

View File

@ -62,9 +62,4 @@ public class BinRepository implements ParamRepository<BinEntity> {
public Completable deleteAll() {
return binDao.deleteAll();
}
@Override
public Completable updateTTQ(String ttq) {
return null;
}
}

View File

@ -64,11 +64,6 @@ public class ChipAidRepository implements ParamRepository<ChipAidEntity> {
return chipAidDao.deleteAll();
}
@Override
public Completable updateTTQ(String ttq) {
return null;
}
public Completable updateChipCVM(String scheme, long cvmLimit) { return chipAidDao.updateCVMByScheme(scheme,cvmLimit);}
public Completable updateAidByAid(boolean aidEnable,String aid) {

View File

@ -61,9 +61,4 @@ public class JSpeedyRepository implements ParamRepository<JSpeedyEntity> {
public Completable deleteAll() {
return jSpeedyDao.deleteAll();
}
@Override
public Completable updateTTQ(String ttq) {
return null;
}
}

View File

@ -60,9 +60,4 @@ public class MPUCtlsRepository implements ParamRepository<MPUCtlsEntity> {
public Completable deleteAll() {
return mpuCtlsDao.deleteAll();
}
@Override
public Completable updateTTQ(String ttq) {
return null;
}
}

View File

@ -24,6 +24,4 @@ public interface ParamRepository <T>{
Completable deleteAll();
Completable updateTTQ(String ttq);
}

View File

@ -61,9 +61,4 @@ public class PayPassRepository implements ParamRepository<PayPassEntity> {
public Completable deleteAll() {
return payPassDao.deleteAll();
}
@Override
public Completable updateTTQ(String ttq) {
return null;
}
}

View File

@ -63,9 +63,4 @@ public class PayWaveRepository implements ParamRepository<PayWaveEntity> {
public Completable deleteAll() {
return payWaveDao.deleteAll();
}
@Override
public Completable updateTTQ(String ttq) {
return null;
}
}

View File

@ -63,9 +63,4 @@ public class RidRepository implements ParamRepository<RidEntity> {
public Completable deleteAll() {
return ridDao.deleteAll();
}
@Override
public Completable updateTTQ(String ttq) {
return null;
}
}

View File

@ -17,7 +17,6 @@ import com.nexgo.oaf.apiv3.SdkResult;
import com.nexgo.oaf.apiv3.device.pinpad.AlgorithmModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.OnPinPadInputListener;
import com.nexgo.oaf.apiv3.device.pinpad.PinAlgorithmModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.PinKeyboardModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.PinKeyboardViewModeEnum;
import com.nexgo.oaf.apiv3.device.pinpad.PinPad;
import com.nexgo.oaf.apiv3.device.pinpad.PinPadKeyCode;
@ -65,7 +64,6 @@ import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@ -603,21 +601,20 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
pinPad.setPinKeyboardViewMode(PinKeyboardViewModeEnum.DEFAULT);
pinPad.setPinKeyboardMode(PinKeyboardModeEnum.FIXED);
// pinPad.setAlgorithmMode(AlgorithmModeEnum.DES);
pinPad.setAlgorithmMode(AlgorithmModeEnum.DES);
if(cardNo == null){
cardNo = emvHandler.getEmvCardDataInfo().getCardNo();
}
int length = cardNo.length();
byte[] panBytes = cardNo.substring( length- 13).getBytes(StandardCharsets.US_ASCII);
// int length = cardNo.length();
// byte[] panBytes = cardNo.substring(length - 13).getBytes(StandardCharsets.US_ASCII);
LogUtil.d(TAG,"card num :"+cardNo);
LogUtil.d(TAG,"Is Online Pin:"+isOnlinePin);
// pinPad.inputOnlinePin(supperLen, 60, pan, 0, PinAlgorithmModeEnum.ISO9564FMT0, pinPadInputListener);
if (isOnlinePin) {
pinPad.inputOnlinePin(supperLen, 60, panBytes, pinIndex, PinAlgorithmModeEnum.ISO9564FMT0, pinPadInputListener);
pinPad.inputOnlinePin(supperLen, 60, cardNo, pinIndex, PinAlgorithmModeEnum.ISO9564FMT0, pinPadInputListener);
} else {
mPayDetail.transCVM = TransCVM.OFFLINE_PIN;
@ -778,6 +775,7 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
byte[] tlv_95 = emvHandler.getTlv(new byte[]{(byte) 0x95}, EmvDataSourceEnum.FROM_KERNEL);
LogUtil.d(TAG, "tlv_95--" + ByteUtils.byteArray2HexString(tlv_95));
byte[] tlv_84 = emvHandler.getTlv(new byte[]{(byte) 0x84}, EmvDataSourceEnum.FROM_KERNEL);
LogUtil.d(TAG, "tlv_84--" + ByteUtils.byteArray2HexString(tlv_84));
@ -1218,9 +1216,8 @@ public abstract class EmvBaseViewModel extends BaseViewModel {
byte[] TTQ;
byte[] kernelTTQ = emvHandler.getTlv(ByteUtils.hexString2ByteArray("9F66"), EmvDataSourceEnum.FROM_KERNEL);
LogUtil.d(TAG, "configPaywaveParameters, TTQ" + ByteUtils.byteArray2HexString(kernelTTQ));
//default TTQ value
TTQ = ByteUtils.hexString2ByteArray("36A04000");
TTQ = ByteUtils.hexString2ByteArray("36004000");
kernelTTQ[0] = TTQ[0];
kernelTTQ[2] = TTQ[2];
kernelTTQ[3] = TTQ[3];

View File

@ -390,29 +390,6 @@
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A0000000043060",
"cardScheme": "MASTERCARD",
"applicationVersion": "0002",
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "99",
"maxTargetPercent": "99",
"threshold": "00000040",
"tacDefault": "FE50B8A000",
"tacOnline": "FE50B8F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "6C7A800000000000",
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A000000333010101",

View File

@ -3,26 +3,26 @@
"aidEnable": true,
"aid": "A0000000651010",
"cardLabel": "JCB",
"applicationVersion": "0020",
"applicationVersion": "0021",
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "99",
"maxTargetPercent": "99",
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000000",
"tacDefault": "D84000A800",
"tacOnline": "DC4004F800",
"tacDefault": "0000000000",
"tacOnline": "D84000A800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"floorLimit": "00000000",
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"transLimit": "9999999999",
"transLimitCDV": "9999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "06",
"ttq": "32004000",
"cateCode": "2701",
"currencyCode": "0840"
"currencyCode": "0104"
}

View File

@ -20,9 +20,8 @@
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "02",
"ttq": "32800000",
"ttq": "36800000",
"cateCode": "2701",
"currencyCode": "0104"
}
]
]

View File

@ -17,7 +17,7 @@
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "E0F8F8",
"terminalCapability": "E0F828",
"riskManageData": "6C7A800000000000",
"kernelType": "02",
"ttq": "36804000",
@ -43,7 +43,7 @@
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "E0F8F8",
"terminalCapability": "E0F828",
"riskManageData": "6C7A800000000000",
"kernelType": "02",
"ttq": "36804000",
@ -68,7 +68,7 @@
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "E0F8F8",
"terminalCapability": "E0F828",
"riskManageData": "6C7A800000000000",
"kernelType": "02",
"ttq": "36804000",

View File

@ -1,4 +1,29 @@
[
{
"aidEnable": true,
"aid": "A000000003",
"cardLabel": "VISA",
"applicationVersion": "008C",
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000040",
"tacDefault": "DC4000A800",
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 75000,
"transLimit": "4000000000",
"transLimitCDV": "9999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "03",
"ttq": "36A00000",
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A0000000031010",
@ -14,13 +39,13 @@
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 70000,
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "03",
"ttq": "32A04000",
"ttq": "36A04000",
"cateCode": "2701",
"currencyCode": "0104"
},
@ -39,13 +64,13 @@
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 70000,
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "03",
"ttq": "32A04000",
"ttq": "36A04000",
"cateCode": "2701",
"currencyCode": "0104"
},
@ -64,13 +89,13 @@
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 70000,
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "03",
"ttq": "32A04000",
"ttq": "36A04000",
"cateCode": "2701",
"currencyCode": "0104"
},
@ -89,13 +114,13 @@
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 70000,
"cvmLimit": 75000,
"transLimit": "999999999999",
"transLimitCDV": "999999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "03",
"ttq": "32A04000",
"ttq": "36A04000",
"cateCode": "2701",
"currencyCode": "0104"
}

View File

@ -7,23 +7,24 @@
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "99",
"maxTargetPercent": "99",
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000000",
"tacDefault": "D84000A800",
"tacDefault": "084000A800",
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"tacDenial": "0010000000",
"floorLimit": "000000000000",
"cvmLimit": 75000,
"transLimit": "9999999999",
"transLimitCDV": "9999999999",
"cvmLimit": 300,
"transLimit": "999999999",
"transLimitCDV": "999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "01",
"ttq": "36800000",
"riskManageData": "0CB0800000000000",
"kernelType": "",
"ttq": "30004000",
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A000000333010102",
@ -32,19 +33,119 @@
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "99",
"maxTargetPercent": "99",
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000000",
"tacDefault": "D84000A800",
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 75000,
"transLimit": "9999999999",
"transLimitCDV": "9999999999",
"cvmLimit": 300,
"transLimit": "999999999",
"transLimitCDV": "999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "01",
"kernelType": "01",
"riskManageData": "0CB0800000000000",
"kernelType": "",
"ttq": "30004000",
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A000000333010103",
"cardLabel": "UPI",
"applicationVersion": "0002",
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000000",
"tacDefault": "D84000A800",
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 300,
"transLimit": "999999999",
"transLimitCDV": "999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "0CB0800000000000",
"kernelType": "",
"ttq": "36800000",
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A000000333010106",
"cardLabel": "UPI",
"applicationVersion": "0002",
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000000",
"tacDefault": "D84000A800",
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 300,
"transLimit": "999999999",
"transLimitCDV": "999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "0CB0800000000000",
"kernelType": "",
"ttq": "36800000",
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A000000333010108",
"cardLabel": "UPI",
"applicationVersion": "0002",
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000000",
"tacDefault": "D84000A800",
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 300,
"transLimit": "999999999",
"transLimitCDV": "999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "0CB0800000000000",
"kernelType": "",
"ttq": "36800000",
"cateCode": "2701",
"currencyCode": "0104"
},
{
"aidEnable": true,
"aid": "A0000003330101021111111111111111",
"cardLabel": "UPI",
"applicationVersion": "0002",
"emvDDOL": "9F3704",
"emvTDOL": "9F3704",
"partialAidSelection": false,
"targetPercent": "00",
"maxTargetPercent": "00",
"threshold": "00000000",
"tacDefault": "D84000A800",
"tacOnline": "DC4004F800",
"tacDenial": "0000000000",
"floorLimit": "000000000000",
"cvmLimit": 300,
"transLimit": "999999999",
"transLimitCDV": "999999999",
"terminalCapability": "0000000000000000",
"riskManageData": "0CB0800000000000",
"kernelType": "",
"ttq": "36800000",
"cateCode": "2701",
"currencyCode": "0104"

View File

@ -1,7 +1,7 @@
[
{
"rid": "A000000333",
"indx": "0A",
"indx": "10",
"hashInd": "01",
"arithInd": "01",
"modul": "B2AB1B6E9AC55A75ADFD5BBC34490E53C4C3381F34E60E7FAC21CC2B26DD34462B64A6FAE2495ED1DD383B8138BEA100FF9B7A111817E7B9869A9742B19E5C9DAC56F8B8827F11B05A08ECCF9E8D5E85B0F7CFA644EFF3E9B796688F38E006DEB21E101C01028903A06023AC5AAB8635F8E307A53AC742BDCE6A283F585F48EF",
@ -31,10 +31,10 @@
},
{
"rid": "A000000333",
"indx": "0B",
"indx": "11",
"hashInd": "01",
"arithInd": "01",
"modul": "CF9FDF46B356378E9AF311B0F981B21A1F22F250FB11F55C958709E3C7241918293483289EAE688A094C02C344E2999F315A72841F489E24B1BA0056CFAB3B479D0E826452375DCDBB67E97EC2AA66F4601D774FEAEF775ACCC621BFEB65FB0053FC5F392AA5E1D4C41A4DE9FFDFDF1327C4BB874F1F63A599EE3902FE95E729FD78D4234DC7E6CF1ABABAA3F6DB29B7F05D1D901D2E76A606A8CBFFFFECBD918FA2D278BDB43B0434F5D45134BE1C2781D157D501FF43E5F1C470967CD57CE53B64D82974C8275937C5D8502A1252A8A5D6088A259B694F98648D9AF2CB0EFD9D943C69F896D49FA39702162ACB5AF29B90BADE005BC157",
"modul": "51E35BD2290A0792BA55AEA169F5BCC33E96BF06E4A021301A97E73A85A7777A40494033433DD945E568065F3BE56255B26BB5CF3F8700AF734A0D5564DE1AFA5F9014704EA42BF929B64BEC7BFABA8D68ADDFECBDFEDEBF36C50DC7FCF0BD8CE33A8A3290216337B02AE6515D7C727F837DA6A18D794CCE62DACFBDB5B4EBE15F79553E05A5562CAE6A7B2C0587ECB362F4080DAC37D4F288440820B422D3692D5E8C57015D3AE21F558ED4733967B3",
"exponent": "03",
"expDate": "3230333031323331",
"checkSum": "BD331F9996A490B33C13441066A09AD3FEB5F66C"
@ -78,56 +78,6 @@
"exponent": "03",
"expDate": "3230333431323331",
"checkSum": "C4A3C43CCF87327D136B804160E47D43B60E6E0F"
},
{
"rid": "A000000003",
"indx": "95",
"hashInd": "01",
"arithInd": "01",
"modul": "BE9E1FA5E9A803852999C4AB432DB28600DCD9DAB76DFAAA47355A0FE37B1508AC6BF38860D3C6C2E5B12A3CAAF2A7005A7241EBAA7771112C74CF9A0634652FBCA0E5980C54A64761EA101A114E0F0B5572ADD57D010B7C9C887E104CA4EE1272DA66D997B9A90B5A6D624AB6C57E73C8F919000EB5F684898EF8C3DBEFB330C62660BED88EA78E909AFF05F6DA627B",
"exponent": "03",
"expDate": "3230323831323331",
"checkSum": "EE1511CEC71020A9B90443B37B1D5F6E703030F6"
},
{
"rid": "A000000003",
"indx": "99",
"hashInd": "01",
"arithInd": "01",
"modul": "AB79FCC9520896967E776E64444E5DCDD6E13611874F3985722520425295EEA4BD0C2781DE7F31CD3D041F565F747306EED62954B17EDABA3A6C5B85A1DE1BEB9A34141AF38FCF8279C9DEA0D5A6710D08DB4124F041945587E20359BAB47B7575AD94262D4B25F264AF33DEDCF28E09615E937DE32EDC03C54445FE7E382777",
"exponent": "03",
"expDate": "3230333431323331",
"checkSum": "4ABFFD6B1C51212D05552E431C5B17007D2F5E6D"
},
{
"rid": "A000000003",
"indx": "09",
"hashInd": "01",
"arithInd": "01",
"modul": "9D912248DE0A4E39C1A7DDE3F6D2588992C1A4095AFBD1824D1BA74847F2BC4926D2EFD904B4B54954CD189A54C5D1179654F8F9B0D2AB5F0357EB642FEDA95D3912C6576945FAB897E7062CAA44A4AA06B8FE6E3DBA18AF6AE3738E30429EE9BE03427C9D64F695FA8CAB4BFE376853EA34AD1D76BFCAD15908C077FFE6DC5521ECEF5D278A96E26F57359FFAEDA19434B937F1AD999DC5C41EB11935B44C18100E857F431A4A5A6BB65114F174C2D7B59FDF237D6BB1DD0916E644D709DED56481477C75D95CDD68254615F7740EC07F330AC5D67BCD75BF23D28A140826C026DBDE971A37CD3EF9B8DF644AC385010501EFC6509D7A41",
"exponent": "03",
"expDate": "3230333431323331",
"checkSum": "1FF80A40173F52D7D27E0F26A146A1C8CCB29046"
},
{
"rid": "A000000004",
"indx": "F1",
"hashInd": "01",
"arithInd": "01",
"modul": "A0DCF4BDE19C3546B4B6F0414D174DDE294AABBB828C5A834D73AAE27C99B0B053A90278007239B6459FF0BBCD7B4B9C6C50AC02CE91368DA1BD21AAEADBC65347337D89B68F5C99A09D05BE02DD1F8C5BA20E2F13FB2A27C41D3F85CAD5CF6668E75851EC66EDBF98851FD4E42C44C1D59F5984703B27D5B9F21B8FA0D93279FBBF69E090642909C9EA27F898959541AA6757F5F624104F6E1D3A9532F2A6E51515AEAD1B43B3D7835088A2FAFA7BE7",
"exponent": "03",
"expDate": "3230333431323331",
"checkSum": "D8E68DA167AB5A85D8C3D55ECB9B0517A1A5B4BB"
},
{
"rid": "A000000004",
"indx": "EF",
"hashInd": "01",
"arithInd": "01",
"modul": "A191CB87473F29349B5D60A88B3EAEE0973AA6F1A082F358D849FDDFF9C091F899EDA9792CAF09EF28F5D22404B88A2293EEBBC1949C43BEA4D60CFD879A1539544E09E0F09F60F065B2BF2A13ECC705F3D468B9D33AE77AD9D3F19CA40F23DCF5EB7C04DC8F69EBA565B1EBCB4686CD274785530FF6F6E9EE43AA43FDB02CE00DAEC15C7B8FD6A9B394BABA419D3F6DC85E16569BE8E76989688EFEA2DF22FF7D35C043338DEAA982A02B866DE5328519EBBCD6F03CDD686673847F84DB651AB86C28CF1462562C577B853564A290C8556D818531268D25CC98A4CC6A0BDFFFDA2DCCA3A94C998559E307FDDF915006D9A987B07DDAEB3B",
"exponent": "03",
"expDate": "3230333431323331",
"checkSum": "21766EBB0EE122AFB65D7845B73DB46BAB65427A"
}
]

View File

@ -49,9 +49,7 @@ public enum TransactionsType {
DETAIL_REPORT("DETAIL_REPORT",33,"000000"),
MMQR_REFUND("QR_REFUND",34,"000000"),
MMQR_SETTLEMENT("QR_SETTLEMENT",35,"000000"),
MMQR_HISTORY("QR_HISTORY",36,"000000");
MMQR_SETTLEMENT("QR_SETTLEMENT",35,"000000");
public final String name;