diff --git a/app/build.gradle b/app/build.gradle index f1b546e..ec5c354 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,8 +14,8 @@ android { applicationId "com.utsmm.kbz" minSdk 24 targetSdk 33 - versionCode 5 - versionName "1.05" + versionCode 7 + versionName "1.07" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 7ec40c7..bf47ca0 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/release/baselineProfiles/0/app-release.dm b/app/release/baselineProfiles/0/app-release.dm index d2d7f84..74e0af9 100644 Binary files a/app/release/baselineProfiles/0/app-release.dm and b/app/release/baselineProfiles/0/app-release.dm differ diff --git a/app/release/baselineProfiles/1/app-release.dm b/app/release/baselineProfiles/1/app-release.dm index 1ae9b5a..bddd61d 100644 Binary files a/app/release/baselineProfiles/1/app-release.dm and b/app/release/baselineProfiles/1/app-release.dm differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 52ba7f0..b9e90f0 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 5, - "versionName": "1.05", + "versionCode": 6, + "versionName": "1.06", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/com/utsmm/kbz/MainFragment.java b/app/src/main/java/com/utsmm/kbz/MainFragment.java index 795be0a..a9ba6b7 100644 --- a/app/src/main/java/com/utsmm/kbz/MainFragment.java +++ b/app/src/main/java/com/utsmm/kbz/MainFragment.java @@ -292,7 +292,7 @@ public class MainFragment extends DataBindingFragment { private void updateButtonStatus() { mainViewModel.settlementStatus.setValue(SystemParamsOperation.getInstance().getSettlementStatus()); - mainViewModel.kPayStatus.setValue(SystemParamsOperation.getInstance().getWavePayStatus()); + mainViewModel.kPayStatus.setValue(SystemParamsOperation.getInstance().getQRPayStatus()); } private void setUpCarouselImages() { diff --git a/app/src/main/java/com/utsmm/kbz/MainViewModel.java b/app/src/main/java/com/utsmm/kbz/MainViewModel.java index fef2691..f4bda93 100644 --- a/app/src/main/java/com/utsmm/kbz/MainViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/MainViewModel.java @@ -94,7 +94,7 @@ public class MainViewModel extends ViewModel { settlementStatus.setValue(SystemParamsOperation.getInstance().getSettlementStatus()); - kPayStatus.setValue(SystemParamsOperation.getInstance().getWavePayStatus()); + kPayStatus.setValue(SystemParamsOperation.getInstance().getQRPayStatus()); disabledMsg.setValue(SystemParamsOperation.getInstance().getDisabledMsg()); } diff --git a/app/src/main/java/com/utsmm/kbz/config/data/model/CardTransactionType.java b/app/src/main/java/com/utsmm/kbz/config/data/model/CardTransactionType.java index 3aeb102..c05d63f 100644 --- a/app/src/main/java/com/utsmm/kbz/config/data/model/CardTransactionType.java +++ b/app/src/main/java/com/utsmm/kbz/config/data/model/CardTransactionType.java @@ -5,5 +5,6 @@ public enum CardTransactionType { MPU, EMV, MAG, - FALLBACK + FALLBACK, + MOCK } diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java index a205951..9bd0e1a 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/CardWaitingFragment.java @@ -106,11 +106,15 @@ public class CardWaitingFragment extends DataBindingFragment implements DataBind public void onClickManualEntry() { -// showSingleInfoDialogAutoHide("Coming Soon!"); - routeId = R.id.action_cardWaitingFragment_to_manualEntryFragment; safeNavigateToRouteId(); } + + public void onClickTap() { + cardReadViewModel.setCardTransactionType(CardTransactionType.MOCK); + routeId = R.id.action_cardWaitingFragment_to_processingCardFragment; + safeNavigateToRouteId(); + } } @Override diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java index 4f1c3d4..60d2fff 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/ProcessingCardFragment.java @@ -7,6 +7,7 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.utsmm.kbz.util.MockData; import com.utsmyanmar.baselib.fragment.DataBindingFragment; import com.utsmyanmar.baselib.util.DataBindingConfig; import com.utsmyanmar.checkxread.model.CardDataX; @@ -41,6 +42,8 @@ public class ProcessingCardFragment extends DataBindingFragment { private TransProcessViewModel transProcessViewModel; private PinPadViewModel pinPadViewModel; private EmvTransactionProcessViewModel emvTransactionViewModel; + + private int routeId; @Override @@ -102,9 +105,24 @@ public class ProcessingCardFragment extends DataBindingFragment { break; case MAG: readMAGStripe(false,true); break; + case MOCK: mockMPUCard(); + break; } } + private void mockMPUCard() { + LogUtil.d(TAG,"initialize mock card data..."); + routeId = R.id.action_processingCardFragment_to_pinPadFragment; + transProcessViewModel.transType.postValue(sharedViewModel.transactionsType.getValue()); + pinPadViewModel.transType.postValue(sharedViewModel.transactionsType.getValue()); + CardDataX cardDataX = MockData.getInstance().generateMPUCard(); + + TradeData tradeData = TransactionUtil.getInstance().initMPUTransaction(cardDataX, CardTypeX.IC); + transProcessViewModel.setTradeData(tradeData); + pinPadViewModel.setTradeData(tradeData); + sharedViewModel.setCardDataExist(true); + safeNavigateToRouteId(); + } private void readMPUCard() { cardReadViewModel.startReadXProcess(MPUXReadCard.getInstance(), new ReadCardResultX() { diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java b/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java index 338a80b..d386231 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_ui/TransactionResultFragment.java @@ -42,12 +42,13 @@ import java.io.IOException; import javax.inject.Inject; +import dagger.hilt.android.AndroidEntryPoint; import retrofit2.HttpException; import com.utsmyanmar.paylibs.utils.LogUtil; // Temporarily disabled Hilt -// @AndroidEntryPoint + @AndroidEntryPoint public class TransactionResultFragment extends DataBindingFragment implements DataBindingFragment.BackPressCallback { private static final String TAG = TransactionResultFragment.class.getSimpleName(); diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/CardReadViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/CardReadViewModel.java index b1e41a0..634ffb9 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/CardReadViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/CardReadViewModel.java @@ -25,6 +25,8 @@ import java.util.HashSet; import javax.inject.Inject; +import io.reactivex.rxjava3.core.Single; + public class CardReadViewModel extends ViewModel { @@ -46,7 +48,7 @@ public class CardReadViewModel extends ViewModel { public SingleLiveEvent cardTypeData = new SingleLiveEvent<>(); public SingleLiveEvent payDetail = new SingleLiveEvent<>(); - public SingleLiveEvent readStatus = new SingleLiveEvent<>(); + public SingleLiveEvent checkCardAlertMsg = new SingleLiveEvent<>(); @@ -95,96 +97,6 @@ public class CardReadViewModel extends ViewModel { checkCardAlertMsg.setValue(null); } -// public void initCardReadProcess(int allType, int timeOutInSec, ReadCardResult readCardResult) { -// ReadCardProcess.getInstance().startReadCard(allType,"",timeOutInSec,false).onStartReadCardProcess(new CheckCardListener() { -// @Override -// public void onCheckCardSuccess(int cardType, MPUCardData mpuCardData, CardScheme cardScheme) { -// -// cardData.postValue(mpuCardData); -// cardSchemeData.postValue(cardScheme); -// cardTypeData.postValue(cardType); -// PayDetail payDetailData = new PayDetail(); -// payDetailData.setCardNo(mpuCardData.getPan()); -// payDetailData.setEXPDate(mpuCardData.getExp()); -// payDetailData.setAccountType(cardScheme.name()); -// payDetailData.setCardType(cardType); -// payDetailData.setCardHolderName(mpuCardData.getCardHolderName()); -// CardInfo cardInfo = new CardInfo(); -// MAGCardInfo magCardInfo = new MAGCardInfo(); -// LogUtil.d(TAG,"track 2 : "+mpuCardData.getTrack2()); -// magCardInfo.setTrack2Cipher(mpuCardData.getTrack2()); -// cardInfo.setMAGCardInfo(magCardInfo); -// payDetailData.setCardInfo(cardInfo); -// -// payDetail.postValue(payDetailData); -// -// mainThreadHandler.post(readCardResult::onSuccess); -//// readCardResult.onSuccess(); -// -// } -// -// @Override -// public void onCheckCardFail(int code, String message) { -// -// if(code == -2801) { -// mainThreadHandler.post(readCardResult::onCommunicationError); -//// readCardResult.onCommunicationError(); -// } else { -// mainThreadHandler.post(() -> readCardResult.onError(code,message)); -//// readCardResult.onError(code,message); -// } -// -// } -// }); -// } -// -// public SingleLiveEvent startReadProcess(int allType,int timeOutInSec){ -// -// ReadCardProcess.getInstance().startReadCard(allType,"",timeOutInSec,false).onStartReadCardProcess(new CheckCardListener() { -// @Override -// public void onCheckCardSuccess(int cardType, MPUCardData mpuCardData, CardScheme cardScheme) { -// flag.postValue(true); -// cardData.postValue(mpuCardData); -// cardSchemeData.postValue(cardScheme); -// cardTypeData.postValue(cardType); -// PayDetail payDetailData = new PayDetail(); -// payDetailData.setCardNo(mpuCardData.getPan()); -// payDetailData.setEXPDate(mpuCardData.getExp()); -// payDetailData.setAccountType(cardScheme.name()); -// payDetailData.setCardType(cardType); -// payDetailData.setCardHolderName(mpuCardData.getCardHolderName()); -// CardInfo cardInfo = new CardInfo(); -// MAGCardInfo magCardInfo = new MAGCardInfo(); -// LogUtil.d(TAG,"track 2 : "+mpuCardData.getTrack2()); -// magCardInfo.setTrack2Cipher(mpuCardData.getTrack2()); -// cardInfo.setMAGCardInfo(magCardInfo); -// payDetailData.setCardInfo(cardInfo); -// -// payDetail.postValue(payDetailData); -// -// readStatus.postValue(CardReadStatus.SUCCESS); -// -// -// } -// -// @Override -// public void onCheckCardFail(int code, String message) { -// -// readStatus.postValue(CardReadStatus.FAIL); -// // this action just need to do once because there's too many reason to get fail -// if(!oneTimeFlag){ -// errorCode.postValue(code+":"+message); -// flag.postValue(false); -// cardSchemeData.postValue(CardScheme.UNK); -// oneTimeFlag = true; -// } -// -// } -// }); -// -// return readStatus; -// } - public void resetOneTimeFlag(){ oneTimeFlag = false; } @@ -193,19 +105,5 @@ public class CardReadViewModel extends ViewModel { NexGoSDK.getInstance().cancelCheckCard(); } -// public void checkCard(){ -// int allType = AidlConstants.CardType.NFC.getValue() | AidlConstants.CardType.IC.getValue() | AidlConstants.CardType.MAGNETIC.getValue(); -// ReadCardProcess.getInstance().startReadCard(allType,"",60,false).onStartReadCardProcess(new CheckCardListener() { -// @Override -// public void onCheckCardSuccess(int cardType, MPUCardData mpuCardData, CardScheme cardScheme) { -// System.out.println("Success"); -// } -// -// @Override -// public void onCheckCardFail(int code, String message) { -// -// System.out.println("Failed"); -// } -// }); -// } + } diff --git a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java index 853ce69..cbcffc4 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/core_viewmodel/EmvTransactionProcessViewModel.java @@ -492,9 +492,9 @@ public class EmvTransactionProcessViewModel extends EmvBaseViewModel implements private void handleTransactionProcess() { String cardNo = mPayDetail.getCardNo(); - if (cardNo == null || TextUtils.equals(cardNo, "")) { +// if (cardNo == null || TextUtils.equals(cardNo, "")) { getCardInfo(); - } +// } getPayWaveData(); getF055Data(); if(transType.getValue() == TransactionsType.PRE_AUTH_COMPLETE || transType.getValue() == TransactionsType.PRE_AUTH_VOID || transType.getValue() == TransactionsType.REFUND ) { diff --git a/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java index 4d715b0..2f93a01 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/kpay/KPayViewModel.java @@ -36,6 +36,7 @@ import com.utsmyanmar.paylibs.model.TradeData; import com.utsmyanmar.paylibs.system.SingleLiveEvent; import com.utsmyanmar.paylibs.utils.LogUtil; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; +import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings; import java.security.SecureRandom; import java.util.HashMap; @@ -52,7 +53,11 @@ public class KPayViewModel extends ViewModel { private final Repository repository; - private final String appKey = "UTSMMuat@2025"; + private final String appKey = SystemParamsOperation.getInstance().getAppKey(); +// private final String appKey = "UTSMMuat@2025"; + + private final String appId = SystemParamsOperation.getInstance().getAppId(); +// private final String appId = "kp9b0794b349ae85b00c51e0677484c7"; private final ExecutorService executor = Executors.newSingleThreadExecutor(); private final Handler mainHandler = new Handler(Looper.getMainLooper()); @@ -114,7 +119,7 @@ public class KPayViewModel extends ViewModel { bizContent.put("refund_request_no", refundOrderId); bizContent.put("merch_order_id", origOrderId); bizContent.put("merch_code", mid); - bizContent.put("appid", "kp9b0794b349ae85b00c51e0677484c7"); + bizContent.put("appid", appId); if(!refundAmount.equals("0")) { bizContent.put("refund_amount", refundAmount); } @@ -138,7 +143,7 @@ public class KPayViewModel extends ViewModel { KPayRefund.RefundRequest.RequestBody.BizContent biz = new KPayRefund.RefundRequest.RequestBody.BizContent( - "kp9b0794b349ae85b00c51e0677484c7", + appId, mid, origOrderId, refundAmount, // This can be null for original refunds @@ -160,7 +165,7 @@ public class KPayViewModel extends ViewModel { } else { KPayRefund.RefundRequest.RequestBody.BizContent biz = new KPayRefund.RefundRequest.RequestBody.BizContent( - "kp9b0794b349ae85b00c51e0677484c7", + appId, mid, origOrderId, refundOrderId, @@ -195,7 +200,7 @@ public class KPayViewModel extends ViewModel { Map bizContent = new HashMap<>(); bizContent.put("merch_order_id", merchOrderId); bizContent.put("merch_code", mid); - bizContent.put("appid", "kp9b0794b349ae85b00c51e0677484c7"); + bizContent.put("appid", appId); bizContent.put("trade_type", "PAY_BY_QRCODE"); bizContent.put("total_amount", amount); bizContent.put("title", "testing"); @@ -216,7 +221,7 @@ public class KPayViewModel extends ViewModel { String sign = Sign.INSTANCE.generateSign(requestMap, appKey); KPayQRRequest.QrRequest.RequestBody.BizContent biz = new KPayQRRequest.QrRequest.RequestBody.BizContent( - "kp9b0794b349ae85b00c51e0677484c7", + appId, mid, merchOrderId, "PAY_BY_QRCODE", @@ -252,7 +257,7 @@ public class KPayViewModel extends ViewModel { Map bizContentMap = new HashMap<>(); bizContentMap.put("merch_order_id", merchOrderId); bizContentMap.put("merch_code", mid); - bizContentMap.put("appid", "kp9b0794b349ae85b00c51e0677484c7"); + bizContentMap.put("appid", appId); Map requestMap = new HashMap<>(); requestMap.put("timestamp", currentTime); @@ -264,7 +269,7 @@ public class KPayViewModel extends ViewModel { String sign = Sign.INSTANCE.generateSign(requestMap, appKey); KPayQRQueryRequest.QRQueryRequest.Request.BizContent bizContent = new KPayQRQueryRequest.QRQueryRequest.Request.BizContent( - "kp9b0794b349ae85b00c51e0677484c7", + appId, mid, merchOrderId ); diff --git a/app/src/main/java/com/utsmm/kbz/ui/pinpad/PinPadViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/pinpad/PinPadViewModel.java index 134158d..a7893bc 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/pinpad/PinPadViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/pinpad/PinPadViewModel.java @@ -119,7 +119,12 @@ public class PinPadViewModel extends ViewModel { case ON_CONFIRM_CLICK: LogUtil.d(TAG, "ON CLICK CONFIRM"); // increasedKSN(); - pinStatus.postValue(PinPadStatus.ON_CONFIRM); + if(transType.getValue() == TransactionsType.PRE_AUTH_COMPLETE || transType.getValue() == TransactionsType.PRE_AUTH_VOID || transType.getValue() == TransactionsType.REFUND ) { + pinStatus.postValue(PinPadStatus.ON_NEXT_SCREEN); + } else { + pinStatus.postValue(PinPadStatus.ON_CONFIRM); + } + break; case ON_CANCEL_CLICK: LogUtil.d(TAG, "ON CLICK CANCEL"); diff --git a/app/src/main/java/com/utsmm/kbz/ui/pre_auth/PreAuthVoidViewModel.java b/app/src/main/java/com/utsmm/kbz/ui/pre_auth/PreAuthVoidViewModel.java index 5700410..cc99565 100644 --- a/app/src/main/java/com/utsmm/kbz/ui/pre_auth/PreAuthVoidViewModel.java +++ b/app/src/main/java/com/utsmm/kbz/ui/pre_auth/PreAuthVoidViewModel.java @@ -8,6 +8,9 @@ import com.utsmyanmar.paylibs.model.PayDetail; import javax.inject.Inject; +import dagger.hilt.android.lifecycle.HiltViewModel; + +@HiltViewModel public class PreAuthVoidViewModel extends ViewModel { private Repository repository; diff --git a/app/src/main/java/com/utsmm/kbz/util/MockData.java b/app/src/main/java/com/utsmm/kbz/util/MockData.java index a39316a..317803d 100644 --- a/app/src/main/java/com/utsmm/kbz/util/MockData.java +++ b/app/src/main/java/com/utsmm/kbz/util/MockData.java @@ -1,6 +1,7 @@ package com.utsmm.kbz.util; import com.sunmi.pay.hardware.aidlv2.AidlConstantsV2; +import com.utsmyanmar.checkxread.model.CardDataX; import com.utsmyanmar.paylibs.model.CardInfo; import com.utsmyanmar.paylibs.model.ICCardInfo; import com.utsmyanmar.paylibs.model.MAGCardInfo; @@ -44,13 +45,29 @@ public class MockData { // .iccData("5F21BLAHBLAH") // .build(); +// mockCardData = new MockCardData.Builder() +// .cardNo("9503051034047056") +// .expDate("0230") +// .cardScheme("MPU") +// .cardHolderName("KBZ Debit") +// .iccData("9503051034047056=30021015930000000000") +// .build(); mockCardData = new MockCardData.Builder() - .cardNo("9503190006079422") - .expDate("0725") + .cardNo("9505050161133125") + .expDate("0127") .cardScheme("MPU") - .cardHolderName("YOMA VALUED CUSTOMER") + .cardHolderName("KBZ Credit") + .iccData("9505050161133125=27011017250000000000") .build(); +// mockCardData = new MockCardData.Builder() +// .cardNo("9503742975107251") +// .expDate("0629") +// .cardScheme("MPU") +// .cardHolderName("Bank Q") +// .iccData("9503742975107251=22081010000000000000") +// .build(); + // mockCardData = new MockCardData.Builder() // .phoneNo("9794452506") // .expDate("0425") @@ -74,6 +91,15 @@ public class MockData { return String.valueOf(randomNumber); } + public CardDataX generateMPUCard() { + CardDataX cardDataX = new CardDataX(); + cardDataX.setPan(mockCardData.getCardNo()); + cardDataX.setExp(mockCardData.getExpDate()); + cardDataX.setCardHolderName(mockCardData.getCardHolderName()); + cardDataX.setTrack2(mockCardData.getIccData()); + return cardDataX; + } + public TradeData generateMockDataWithTime(TransactionsType transType,int cardInputType,String transDate,String transTime) { String strDate = SystemDateTime.getMMDD(); String strTime = SystemDateTime.getHHmmss(); diff --git a/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java b/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java index d2ac49a..e07f4fc 100644 --- a/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java +++ b/app/src/main/java/com/utsmm/kbz/util/tms/TMSSetupsImpl.java @@ -10,6 +10,7 @@ import com.utsmyanmar.baselib.network.model.sirius.SiriusMerchant; import com.utsmyanmar.baselib.network.model.sirius.SiriusProperty; import com.utsmyanmar.baselib.network.model.sirius.SiriusResponse; import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation; +import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsSettings; import com.utsmyanmar.paylibs.utils.enums.CurrencyType; import com.utsmm.kbz.BuildConfig; @@ -412,15 +413,15 @@ public class TMSSetupsImpl implements TMSSetups{ } else if (TextUtils.equals(name,"ssl_enable")) { SystemParamsOperation.getInstance().setSslSwitchStatus(parseBoolean(data)); - } else if (TextUtils.equals(name,"wave_pay_inquiry_status_enable")) { + } else if (TextUtils.equals(name,"qrpay_inquiry_status_enable")) { - SystemParamsOperation.getInstance().setWavePayInquiryStatus(parseBoolean(data)); + SystemParamsOperation.getInstance().setQRPayInquiryStatus(parseBoolean(data)); } else if (TextUtils.equals(name,"tips_adjustment_enable")) { SystemParamsOperation.getInstance().setTipsAdjustmentStatus(parseBoolean(data)); - } else if (TextUtils.equals(name,"wave_enable")) { + } else if (TextUtils.equals(name,"qrpay_enable")) { - SystemParamsOperation.getInstance().setWavePayStatus(parseBoolean(data)); + SystemParamsOperation.getInstance().setQRPayStatus(parseBoolean(data)); } else if (TextUtils.equals(name,"print_iso_enable")) { SystemParamsOperation.getInstance().setPrintISOStatus(parseBoolean(data)); @@ -582,11 +583,14 @@ public class TMSSetupsImpl implements TMSSetups{ } } else if (TextUtils.equals(name,"speedup_contactless_enable")) { SystemParamsOperation.getInstance().setSpeedUpContactless(parseBoolean(data)); - } - else if (TextUtils.equals(name,"manual_entry_pin_enable")) { + } else if (TextUtils.equals(name,"manual_entry_pin_enable")) { SystemParamsOperation.getInstance().setManualEntryPinEnable(parseBoolean(data)); } else if (TextUtils.equals(name,"decimal_enable")) { SystemParamsOperation.getInstance().setDecimalEnable(parseBoolean(data)); + } else if (TextUtils.equals(name,"app_key")) { + SystemParamsOperation.getInstance().setAppKey(data); + } else if (TextUtils.equals(name,"app_id")) { + SystemParamsOperation.getInstance().setAppId(data); } } diff --git a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java index 76ad66b..87b8c5a 100644 --- a/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java +++ b/app/src/main/java/com/utsmm/kbz/util/tms/TMSUtil.java @@ -206,7 +206,7 @@ public class TMSUtil { voidStatus = SystemParamsOperation.getInstance().getVoidStatus(); cashAdvanceStatus = SystemParamsOperation.getInstance().getCashAdvanceStatus(); refundStatus = SystemParamsOperation.getInstance().getRefundStatus(); - wavePayInquiryStatus = SystemParamsOperation.getInstance().getWavePayInquiryStatus(); + wavePayInquiryStatus = SystemParamsOperation.getInstance().getQRPayInquiryStatus(); tipAdjustmentStatus = SystemParamsOperation.getInstance().getTipsAdjustmentStatus(); settlementStatus = SystemParamsOperation.getInstance().getSettlementStatus(); diff --git a/app/src/main/res/layout/fragment_capture_card_screen.xml b/app/src/main/res/layout/fragment_capture_card_screen.xml index 42f4a59..ca2e581 100644 --- a/app/src/main/res/layout/fragment_capture_card_screen.xml +++ b/app/src/main/res/layout/fragment_capture_card_screen.xml @@ -149,6 +149,7 @@ android:layout_weight="1" app:cardCornerRadius="12dp" app:cardElevation="2dp" + android:onClick="@{()->click.onClickTap()}" android:backgroundTint="#fff" android:foreground="?android:attr/selectableItemBackground" android:focusable="true" diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 8085dac..437fc16 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -186,6 +186,12 @@ app:popUpToInclusive="true" android:id="@+id/action_cardWaitingFragment_to_nav_main" app:destination="@id/nav_main" /> + tlvMap = TLVUtil.buildTLVMap(data); com.sunmi.pay.hardware.aidl.bean.CardInfo cardInfo = new com.sunmi.pay.hardware.aidl.bean.CardInfo(); - LogUtil.d(TAG,"EMV Track data : "+ByteUtil.bytes2HexStr(data)); + LogUtil.d(TAG, "EMV Track data : " + ByteUtil.bytes2HexStr(data)); // Two magnetic TLV tlv = tlvMap.get("57"); @@ -40,10 +42,10 @@ public class KernelDataProcessUtil { String value = tlv.getValue().toUpperCase(); cardInfo = Track2Util.parseTrack2(value); // cardInfo.track2=value; - LogUtil.d(TAG,"57 track:"+value); + LogUtil.d(TAG, "57 track:" + value); cardInfo.track2 = value.replaceAll("F", ""); // Edited "0" with "" 20,Nov,2024 - LogUtil.d(TAG,"57 track:"+cardInfo.track2); + LogUtil.d(TAG, "57 track:" + cardInfo.track2); } // IC card obtains the card number and expiration date through 5A and 5F24 if (AidlConstants.CardType.IC.getValue() == cardType) { @@ -67,7 +69,7 @@ public class KernelDataProcessUtil { } LogUtil.d(Constant.TAG, "The card is valid for:" + value); } - + } // Card serial number @@ -94,7 +96,7 @@ public class KernelDataProcessUtil { cardInfo = Track2Util.parseTrack2(value); cardInfo.track2 = value.replaceAll("F", "0"); // edited " " with "0" - LogUtil.d(TAG,"9F6B track:"+cardInfo.track2); + LogUtil.d(TAG, "9F6B track:" + cardInfo.track2); } cardInfo.cardType = cardType; @@ -102,6 +104,7 @@ public class KernelDataProcessUtil { } public static TradeData fillTradeDataInfo(com.sunmi.pay.hardware.aidl.bean.CardInfo cardInfo, TradeData tradeData) { + PayDetail payDetail = tradeData.getPayDetail(); if (cardInfo.expireDate != null && cardInfo.expireDate.length() > 4) { cardInfo.expireDate = cardInfo.expireDate.substring(0, 4); @@ -125,7 +128,11 @@ public class KernelDataProcessUtil { if (track2 != null && track2.length() > 0) { magCardInfo.setTrack2(track2); String track2Encrypt = TrackEncrypt.trackEncrypt(track2); - track2Encrypt = track2Encrypt.replace("=","D"); +// /* +// * comment this line cuz mastercard network validation is getting failure +// * */ + track2Encrypt = track2Encrypt.replace("=", "D"); + magCardInfo.setTrack2Cipher(track2Encrypt); } @@ -231,7 +238,7 @@ public class KernelDataProcessUtil { // if(value.equals("554E494F4E504159204445424954")){ // payDetail.setCardHolderName("UNIONPAY"); // }else{ - LogUtil.d(TAG,"App Label 50 : "+Utils.hexStr2AsciiStr(value)); + LogUtil.d(TAG, "App Label 50 : " + Utils.hexStr2AsciiStr(value)); icCardInfo.setAppLabel(Utils.hexStr2AsciiStr(value)); payDetail.setAppLabel(Utils.hexStr2AsciiStr(value)); @@ -246,7 +253,7 @@ public class KernelDataProcessUtil { String value = tlv.getValue(); icCardInfo.setAppName(value); payDetail.setAppName(value); - LogUtil.d(TAG,"App Name : "+value); + LogUtil.d(TAG, "App Name : " + value); } // TVR Terminal verification result @@ -530,14 +537,22 @@ public class KernelDataProcessUtil { // Cardholder verification method result CVM if (tlvMap.get("9F34") != null) { f55DataStr += "9F3403" + tlvMap.get("9F34").getValue(); - if(tlvMap.get("9F34").getValue() != null && !tlvMap.get("9F34").getValue().isEmpty()) { + if (tlvMap.get("9F34").getValue() != null && !tlvMap.get("9F34").getValue().isEmpty()) { f55WaveDataStr += "9F3403" + tlvMap.get("9F34").getValue(); } // f55WaveDataStr += "9F3403020200" ; } // f55DataStr += "9F34031F0302"; + // TSI Transaction status information + if (tlvMap.get("9B") != null && !tlvMap.get("9B").getValue().isEmpty()) { + f55DataStr += "9B02" + tlvMap.get("9B").getValue(); + f55WaveDataStr += "9B02" + tlvMap.get("9B").getValue(); + + + } + // terminal type if (tlvMap.get("9F35") != null) { f55DataStr += "9F3501" + tlvMap.get("9F35").getValue(); @@ -563,8 +578,8 @@ public class KernelDataProcessUtil { // need to keeps or not? if (tlvMap.get("9F41") != null) { int length = tlvMap.get("9F41").getLength(); - f55DataStr += "9F41" + String.format("%02d", length-1) + tlvMap.get("9F41").getValue().substring(2,8); - f55WaveDataStr += "9F41" + String.format("%02d", length-1) + tlvMap.get("9F41").getValue().substring(2,8); + f55DataStr += "9F41" + String.format("%02d", length - 1) + tlvMap.get("9F41").getValue().substring(2, 8); + f55WaveDataStr += "9F41" + String.format("%02d", length - 1) + tlvMap.get("9F41").getValue().substring(2, 8); } else { String batchNumStart = SystemParamsOperation.getInstance().getSystemParamsSettings().getBatchNumStart(); try { @@ -576,29 +591,16 @@ public class KernelDataProcessUtil { } } - /* if (tlvMap.get("4F") != null) { - tlv = tlvMap.get("4F"); - String value = tlv.getValue(); - int length = tlv.getLength(); - String len = getHexLen(length); - f55DataStr += "4F" + len + value; - } - if (tlvMap.get("9F08") != null) { - tlv = tlvMap.get("9F08"); - String value = tlv.getValue(); - int length = tlv.getLength(); - String len = getHexLen(length); - f55DataStr += "9F08" + len + value; - }*/ /* * merchant category code * */ -// disabled at 18/ July 2025 -// if(tlvMap.get("9F53") !=null){ -// f55DataStr += "9F5301"+ tlvMap.get("9F53").getValue(); -// } + if (tlvMap.get("9F53") != null) { + f55DataStr += "9F5301" + tlvMap.get("9F53").getValue(); + } else { + f55DataStr += "9F530150"; + } // else{ //// f55DataStr += "9F530152"; @@ -659,53 +661,62 @@ public class KernelDataProcessUtil { if (cardType == AidlConstants.CardType.IC.getValue()) { icCardInfo.setICC55(f55DataStr); payDetail.setICC55(f55DataStr); - LogUtil.d(TAG,"DE55 IC: "+f55DataStr); + LogUtil.d(TAG, "DE55 IC: " + f55DataStr); } else { String[] tagList = { "9F6E" }; + String hexStr = ""; - byte[] dataOut = new byte[1024]; - try { - int len = PayLibsUtils.getInstance().emvOptV2.getTlvList(AidlConstantsV2.EMV.TLVOpCode.OP_PAYWAVE, tagList, dataOut); - if (len > 0) { - byte[] dataOutBytes = Arrays.copyOf(dataOut, len); - hexStr = ByteUtil.bytes2HexStr(dataOutBytes); - LogUtil.d(TAG, "get 9F6E Data :" + hexStr); - Map map = TLVUtil.buildTLVMap(hexStr); - LogUtil.d(TAG, "get 9F6E Data :" + map); - - } else { - LogUtil.e(TAG, "Get the data length of payWave is negative = " + len); - } - } catch (Exception e) { - e.printStackTrace(); + if (tlvMap.get("9F6E") != null) { + int length = tlvMap.get("9F6E").getLength(); + String len = getHexLen(length); + f55WaveDataStr += "9F6E" + len + tlvMap.get("9F6E").getValue(); } - if (hexStr.equals("9F6E00")) { - try { - int len = PayLibsUtils.getInstance().emvOptV2.getTlvList(AidlConstantsV2.EMV.TLVOpCode.OP_PAYPASS, tagList, dataOut); - if (len > 0) { - byte[] dataOutBytes = Arrays.copyOf(dataOut, len); - hexStr = ByteUtil.bytes2HexStr(dataOutBytes); - LogUtil.d(TAG, "get 9F6E Data :" + hexStr); - Map map = TLVUtil.buildTLVMap(hexStr); - LogUtil.d(TAG, "get 9F6E Data :" + map); - - } else { - LogUtil.e(TAG, "Get the data length of payPass is negative = " + len); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - if(!hexStr.equals("9F6E00")) { - f55WaveDataStr += hexStr; - } + LogUtil.d(TAG,"9F6E data :"+hexStr); +// byte[] dataOut = new byte[1024]; +// +// try { +// int len = PayLibsUtils.getInstance().emvOptV2.getTlvList(AidlConstantsV2.EMV.TLVOpCode.OP_PAYWAVE, tagList, dataOut); +// if (len > 0) { +// byte[] dataOutBytes = Arrays.copyOf(dataOut, len); +// hexStr = ByteUtil.bytes2HexStr(dataOutBytes); +// LogUtil.d(TAG, "get 9F6E Data :" + hexStr); +// Map map = TLVUtil.buildTLVMap(hexStr); +// LogUtil.d(TAG, "get 9F6E Data :" + map); +// +// } else { +// LogUtil.e(TAG, "Get the data length of payWave is negative = " + len); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// if (hexStr.equals("9F6E00")) { +// try { +// int len = PayLibsUtils.getInstance().emvOptV2.getTlvList(AidlConstantsV2.EMV.TLVOpCode.OP_PAYPASS, tagList, dataOut); +// if (len > 0) { +// byte[] dataOutBytes = Arrays.copyOf(dataOut, len); +// hexStr = ByteUtil.bytes2HexStr(dataOutBytes); +// LogUtil.d(TAG, "get 9F6E Data :" + hexStr); +// Map map = TLVUtil.buildTLVMap(hexStr); +// LogUtil.d(TAG, "get 9F6E Data :" + map); +// +// } else { +// LogUtil.e(TAG, "Get the data length of payPass is negative = " + len); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// if (!hexStr.equals("9F6E00")) { +// f55WaveDataStr += hexStr; +// } icCardInfo.setICC55(f55WaveDataStr); payDetail.setICC55(f55WaveDataStr); - LogUtil.d(TAG,"DE55 kpay: "+f55WaveDataStr); + LogUtil.d(TAG, "DE55 wave: " + f55WaveDataStr); } @@ -715,6 +726,7 @@ public class KernelDataProcessUtil { return tradeData; } + private static String getHexLen(int len) { String str = Integer.toHexString(len); if (str.length() == 1) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java index 38366a6..2ce2755 100755 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsOperation.java @@ -395,9 +395,9 @@ public class SystemParamsOperation { saveSystemParamsSettings(params); } - public void setWavePayInquiryStatus(boolean status) { + public void setQRPayInquiryStatus(boolean status) { SystemParamsSettings params = getSystemParamsSettings(); - params.setWavePayInquiryStatus(status); + params.setQRPayInquiryStatus(status); saveSystemParamsSettings(params); } @@ -423,9 +423,9 @@ public class SystemParamsOperation { saveSystemParamsSettings(params); } - public boolean getWavePayInquiryStatus() { + public boolean getQRPayInquiryStatus() { SystemParamsSettings params = getSystemParamsSettings(); - return params.getWavePayInquiryStatus(); + return params.getQRPayInquiryStatus(); } public void setNfcEnabled(boolean status) { @@ -478,9 +478,9 @@ public class SystemParamsOperation { return params.isFallbackEnabled(); } - public void setWavePayStatus(boolean status) { + public void setQRPayStatus(boolean status) { SystemParamsSettings params = getSystemParamsSettings(); - params.setWavePayStatus(status); + params.setQRPayStatus(status); saveSystemParamsSettings(params); } @@ -494,9 +494,9 @@ public class SystemParamsOperation { SystemParamsSettings params = getSystemParamsSettings(); return params.isDecimal_enable(); } - public boolean getWavePayStatus() { + public boolean getQRPayStatus() { SystemParamsSettings params = getSystemParamsSettings(); - return params.getWavePayStatus(); + return params.getQRPayStatus(); } public boolean getTipsAdjustmentStatus() { @@ -701,6 +701,28 @@ public class SystemParamsOperation { return params.isEmvEnabled(); } + public String getAppId() { + SystemParamsSettings params = getSystemParamsSettings(); + return params.getAppId(); + } + + public void setAppId(String appId) { + SystemParamsSettings params = getSystemParamsSettings(); + params.setAppId(appId); + saveSystemParamsSettings(params); + } + + public String getAppKey() { + SystemParamsSettings params = getSystemParamsSettings(); + return params.getAppKey(); + } + + public void setAppKey(String appKey) { + SystemParamsSettings params = getSystemParamsSettings(); + params.setAppKey(appKey); + saveSystemParamsSettings(params); + } + public String getComp1(){ SystemParamsSettings params = getSystemParamsSettings(); return params.getComp1(); diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java index f546119..accfdcf 100755 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/core_utils/SystemParamsSettings.java @@ -129,6 +129,10 @@ public class SystemParamsSettings implements Serializable { private String lastSuccessTranx = "000001"; + private String appId = ""; + + private String appKey = ""; + private int fallbackCounter = 2; private long jCbCVMLimit = 75000; @@ -177,7 +181,7 @@ public class SystemParamsSettings implements Serializable { private boolean cvv_bypass_status = false; - private boolean wave_pay_inquiry_status = true; + private boolean qrpay_inquiry_status = true; private boolean tips_adjustment_status = true; @@ -187,7 +191,7 @@ public class SystemParamsSettings implements Serializable { private boolean refund_status = true; - private boolean wave_status = true; + private boolean qrpay_status = true; private boolean full_void_preauth_status = true; @@ -285,6 +289,22 @@ public class SystemParamsSettings implements Serializable { this.disabledMessage = disabledMessage; } + public void setAppId(String appId) { + this.appId = appId; + } + + public void setAppKey(String appKey) { + this.appKey = appKey; + } + + public String getAppId() { + return appId; + } + + public String getAppKey() { + return appKey; + } + protected void setjCbCVMLimit(long amount) { this.jCbCVMLimit = amount; } @@ -369,8 +389,8 @@ public class SystemParamsSettings implements Serializable { return ecrKey; } - protected void setWavePayInquiryStatus(boolean status) { - this.wave_pay_inquiry_status = status; + protected void setQRPayInquiryStatus(boolean status) { + this.qrpay_inquiry_status = status; } protected String getTerminalCapability() { return terminalCapability;} @@ -403,11 +423,11 @@ public class SystemParamsSettings implements Serializable { protected void setRandomPinPad(boolean randomPinPad) { this.isRandomPinPad = randomPinPad;} protected boolean isRandomPinPad() { return isRandomPinPad; } - protected void setWavePayStatus(boolean status) { - this.wave_status = status; + protected void setQRPayStatus(boolean status) { + this.qrpay_status = status; } - protected boolean getWavePayStatus() { return wave_status; } + protected boolean getQRPayStatus() { return qrpay_status; } protected boolean isAutoPrintCustomerCopy() { return isAutoPrintCustomerCopy; @@ -415,8 +435,8 @@ public class SystemParamsSettings implements Serializable { protected void setAutoPrintCustomerCopy(boolean flag) { this.isAutoPrintCustomerCopy = flag; } - protected boolean getWavePayInquiryStatus() { - return wave_pay_inquiry_status; + protected boolean getQRPayInquiryStatus() { + return qrpay_inquiry_status; } protected void setTipsAdjustmentStatus(boolean status) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java index c77459d..b6e2a9e 100755 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/BitmapConfig.java @@ -24,7 +24,8 @@ public class BitmapConfig { public static final String FUND_TRANSFER = "7024048020801080"; - public static final String CASH_ADVANCE = "7024048020801000"; +// public static final String CASH_ADVANCE = "7024048020801000"; + public static final String CASH_ADVANCE = "7020048020801000"; // removed DE 14 // 7020048000808000 public static final String SIGN_ON = "2020000000800000"; @@ -58,7 +59,8 @@ public class BitmapConfig { // public static final String BPC_SALE = "3230058020C09000"; // original // public static final String BPC_SALE = "3230058020C09A00"; // for emv // public static final String BPC_SALE = "7234058020C19A00"; // DUKPT - public static final String BPC_SALE = "7234058020C19200"; // TMK +// public static final String BPC_SALE = "7234058020C19200"; // TMK + public static final String BPC_SALE = "7230058020C19200"; // TMK no DE 14 // public static final String BPC_SALE = "7230058020C19A00"; // also for manual // public static final String BPC_SALE = "7230058020C09A00"; // also for manual , also added DE48 @@ -88,19 +90,22 @@ public class BitmapConfig { // commented on Nov 13,2024 // public static final String BPC_PRE_AUTH_SALE = "3230058020C09800"; // public static final String BPC_PRE_AUTH_SALE = "3230058020C09A00"; - public static final String BPC_PRE_AUTH_SALE = "7230058020C09A00"; // for manual +// public static final String BPC_PRE_AUTH_SALE = "7230058020C09A00"; // for manual + public static final String BPC_PRE_AUTH_SALE = "7230058020C09200"; // for tmk // public static final String BPC_PRE_AUTH_SALE_COMPLETE = "7230058028C09000"; // public static final String BPC_PRE_AUTH_SALE_COMPLETE = "3230058020C09000"; // commented on Nov 13, 2024 // public static final String BPC_PRE_AUTH_SALE_COMPLETE = "3230058028C09800"; - public static final String BPC_PRE_AUTH_SALE_COMPLETE = "3230058028C09A00"; +// public static final String BPC_PRE_AUTH_SALE_COMPLETE = "3230058028C09A00"; + public static final String BPC_PRE_AUTH_SALE_COMPLETE = "3230058028C09200"; // for tmk // public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7230058028C09000"; // commented on Nov 13,2024 - public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7230058028C19800"; // added DE 2 +// public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7230058028C19800"; // added DE 2 + public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "7234058008C09000"; // for tmk MPU // public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "3230058028C19800"; // public static final String BPC_PRE_AUTH_SALE_VOID_REVERSAL = "3230058028C19A00"; //DE55 // @@ -122,7 +127,8 @@ public class BitmapConfig { public static final String BPC_TIP_ADJUSTMENTS = "723005802CC08000"; // public static final String BPC_BATCH_UPLOAD = "7234058028C09000"; - public static final String BPC_BATCH_UPLOAD = "3234058028C08000"; +// public static final String BPC_BATCH_UPLOAD = "3234058028C08000"; + public static final String BPC_BATCH_UPLOAD = "3230058028C08000"; //removed de 14 public static final String BPC_NETWORK_CUT_OVER = "2220010000C00000"; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/TransactionsType.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/TransactionsType.java index 90a6b12..7c0d484 100755 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/TransactionsType.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/iso_utils/TransactionsType.java @@ -3,7 +3,7 @@ package com.utsmyanmar.paylibs.utils.iso_utils; public enum TransactionsType { SALE("SALE",1,"000000"), - VOID("VOID SALE",2,"200000"), //020000 + VOID("VOID SALE",2,"020000"), //200000 SETTLEMENT("SETTLEMENT",3,"920000"), @@ -11,7 +11,7 @@ public enum TransactionsType { PRE_AUTH_SALE("PRE-AUTH",5,"930000"), - PRE_AUTH_VOID("PREAUTH CANCELLATION",6,"200000"), + PRE_AUTH_VOID("PREAUTH CANCELLATION",6,"020000"), //200000 PRE_AUTH_COMPLETE("PREAUTH COMPLETION",7,"940000"),