From 759cd20209bce9ea67db560728fb4e9c40e012ef Mon Sep 17 00:00:00 2001 From: kizzy Date: Mon, 8 Jun 2026 16:21:38 +0700 Subject: [PATCH] configured for MPU --- .../ui/dashboard/DashboardScreen2.kt | 50 +- .../utsmyanmar/ui/navigation/AppNavGraph.kt | 16 +- .../ui/print_receipt/PrintReceiptScreen.kt | 96 +- .../ui/settlement/SettlementViewModel.kt | 2 +- .../TransactionResultRoute.kt | 2 +- .../TransactionResultScreen.kt | 3 +- .../utsmyanmar/baselib/TerminalKeyUtil.java | 6 +- .../isobuilder/builderx/BaseISOMsgX.java | 2 +- .../utsmyanmar/paylibs/network/ISOSocket.java | 16 +- .../paylibs/print/printx/PrintXImpl.java | 4 +- .../paylibs/reversal/ReversalAction.java | 2 +- .../paylibs/sign_on/SignOnProcess.java | 4 +- .../transactions/TransactionsOperation.java | 3441 +---------------- .../com/utsmyanmar/paylibs/utils/POSUtil.java | 4 + .../utils/iso_utils/TransactionsType.java | 10 +- .../paylibs/utils/params/Params.java | 7 +- .../src/main/res/drawable/print_logo_mpu.png | Bin 0 -> 55154 bytes paylibs/src/main/res/raw/mpu_crt_2026.crt | 23 + 18 files changed, 178 insertions(+), 3510 deletions(-) create mode 100644 paylibs/src/main/res/drawable/print_logo_mpu.png create mode 100644 paylibs/src/main/res/raw/mpu_crt_2026.crt diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt index e14fc09..760dd4e 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/dashboard/DashboardScreen2.kt @@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.shape.CircleShape @@ -33,11 +34,13 @@ import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.AlertDialog import androidx.compose.material3.DrawerValue +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalDrawerSheet import androidx.compose.material3.ModalNavigationDrawer import androidx.compose.material3.NavigationDrawerItem import androidx.compose.material3.NavigationDrawerItemDefaults import androidx.compose.material3.Scaffold +import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.VerticalDivider @@ -70,6 +73,7 @@ import com.mob.utsmyanmar.ui.preview.P3Preview import com.mob.utsmyanmar.ui.theme.Color import com.utsmyanmar.paylibs.sign_on.EchoTestProcess import com.utsmyanmar.paylibs.sign_on.SignOnListener +import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -267,6 +271,20 @@ fun DashboardScreen2( fontWeight = FontWeight.Medium, modifier = Modifier.padding(horizontal = 16.dp) ) + var switchChecked by remember { mutableStateOf(SystemParamsOperation.getInstance().isReversalOn) } + DrawerItem( + title = "Reversal On/Off", + icon = Icons.Default.Sync, + showSwitch = true, + isChecked = switchChecked, + onCheckedChange = { isChecked -> + switchChecked = isChecked + SystemParamsOperation.getInstance().setReversalFlag(isChecked) + + }, + onClick = {} + ) + DrawerItem("Function", Icons.Default.Dashboard) { scope.launch { drawerState.close() } } @@ -274,6 +292,7 @@ fun DashboardScreen2( scope.launch { drawerState.close() } onNavigateVersion() } + } }) { Scaffold( @@ -325,21 +344,44 @@ fun DashboardScreen2( @Composable private fun DrawerItem( - title: String, icon: ImageVector, onClick: () -> Unit + title: String, + icon: ImageVector, + showSwitch: Boolean = false, // New: Flag to enable switch mode + isChecked: Boolean = false, // New: Switch state + onCheckedChange: (Boolean) -> Unit = {}, // New: Switch callback + onClick: () -> Unit ) { NavigationDrawerItem( label = { Text( - text = title, fontWeight = FontWeight.Medium + text = title, + fontWeight = FontWeight.Medium ) }, selected = false, - onClick = onClick, + // If it's a switch item, clicking the whole row toggles the switch instead of navigating + onClick = { + if (showSwitch) { + onCheckedChange(!isChecked) + } else { + onClick() + } + }, icon = { Icon( - imageVector = icon, contentDescription = title + imageVector = icon, + contentDescription = title ) }, + + badge = { + if (showSwitch) { + Switch( + checked = isChecked, + onCheckedChange = onCheckedChange + ) + } + }, modifier = Modifier.padding(horizontal = 12.dp, vertical = 2.dp), colors = NavigationDrawerItemDefaults.colors( unselectedContainerColor = androidx.compose.ui.graphics.Color.Transparent, diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt index ee88c95..1deca99 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/navigation/AppNavGraph.kt @@ -35,6 +35,8 @@ import com.mob.utsmyanmar.viewmodel.CardReaderViewModel import com.mob.utsmyanmar.viewmodel.EmvTransactionProcessViewModel import com.mob.utsmyanmar.ui.pinpad.PinPadViewModel import com.mob.utsmyanmar.ui.settlement.SettlementViewModel +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultEvent +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultViewModel import com.mob.utsmyanmar.ui.version.VersionScreen import com.mob.utsmyanmar.viewmodel.SharedViewModel import com.mob.utsmyanmar.viewmodel.TransProcessViewModel @@ -397,8 +399,9 @@ fun AppNavGraph( composable(Routes.TransactionResult.route) { val sharedViewModel: SharedViewModel = hiltViewModel(activity) - + val transResultViewModel: TransactionResultViewModel = hiltViewModel(activity) TransactionResultRoute( + viewModel = transResultViewModel, sharedViewModel = sharedViewModel, onNavigateMain = { navController.navigate(Routes.Dashboard.route) { @@ -423,8 +426,17 @@ fun AppNavGraph( } composable(Routes.PrintReceipt.route) { + val sharedViewModel: SharedViewModel = hiltViewModel(activity) + val transResultViewModel: TransactionResultViewModel = hiltViewModel(activity) PrintReceiptScreen( - onPrint = {}, + sharedViewModel = sharedViewModel, + transactionResultViewModel = transResultViewModel, + onPrint = { + transResultViewModel.onEvent( + TransactionResultEvent.RetryPrint, + sharedViewModel + ) + }, onDone = { navController.navigate(Routes.Dashboard.route) { popUpTo(Routes.Dashboard.route) { diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/print_receipt/PrintReceiptScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/print_receipt/PrintReceiptScreen.kt index 4d177de..c989aa5 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/print_receipt/PrintReceiptScreen.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/print_receipt/PrintReceiptScreen.kt @@ -18,6 +18,8 @@ import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment @@ -29,25 +31,35 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mob.utsmyanmar.ui.components.appbar.AppBar import com.mob.utsmyanmar.ui.theme.Color +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultEvent +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultState +import com.mob.utsmyanmar.ui.transaction_result.TransactionResultViewModel +import com.mob.utsmyanmar.viewmodel.SharedViewModel import com.utsmyanmar.paylibs.print.PrintReceipt +import com.utsmyanmar.paylibs.utils.POSUtil import kotlinx.coroutines.delay import kotlinx.coroutines.launch @Composable fun PrintReceiptScreen( + transactionResultViewModel: TransactionResultViewModel, + sharedViewModel: SharedViewModel, onPrint: () -> Unit, onDone: () -> Unit ) { - + val state by transactionResultViewModel.state.collectAsStateWithLifecycle() val scope = rememberCoroutineScope(); val receiptOffsetY = remember { Animatable(0f); } val animationDuration = 3000; + Scaffold( topBar = { AppBar(title = "Receipt") @@ -64,6 +76,7 @@ fun PrintReceiptScreen( ) { ReceiptPreview( + state = state, modifier = Modifier .weight(1f) .verticalScroll(rememberScrollState()) @@ -107,35 +120,35 @@ fun PrintReceiptScreen( ), shape = RoundedCornerShape(12.dp), onClick = { -// onPrint() - try { - PrintReceipt.getInstance().printNow() - scope.launch { - launch { - receiptOffsetY.animateTo( - targetValue = -1500f, - animationSpec = tween( - durationMillis = animationDuration, - easing = FastOutSlowInEasing - ) - ) - } - delay(5000) - launch { - receiptOffsetY.animateTo( - targetValue = 0f, - animationSpec = tween( - durationMillis = 0, - easing = FastOutSlowInEasing - ) - ) - } - } - } catch (e: Exception) { - - Log.d("PrintReceipt", "error with $e") - - } + onPrint() +// try { +// PrintReceipt.getInstance().printNow() +// scope.launch { +// launch { +// receiptOffsetY.animateTo( +// targetValue = -1500f, +// animationSpec = tween( +// durationMillis = animationDuration, +// easing = FastOutSlowInEasing +// ) +// ) +// } +// delay(5000) +// launch { +// receiptOffsetY.animateTo( +// targetValue = 0f, +// animationSpec = tween( +// durationMillis = 0, +// easing = FastOutSlowInEasing +// ) +// ) +// } +// } +// } catch (e: Exception) { +// +// Log.d("PrintReceipt", "error with $e") +// +// } } ) { Text( @@ -155,6 +168,7 @@ fun PrintReceiptScreen( @Composable fun ReceiptPreview( + state: TransactionResultState, modifier: Modifier = Modifier ) { Column( @@ -184,16 +198,16 @@ fun ReceiptPreview( ) Spacer(modifier = Modifier.height(16.dp)) ReceiptDivider() - ReceiptRow("Merchant", "MOB UTS Myanmar") - ReceiptRow("Terminal ID", "POS001") - ReceiptRow("Transaction", "SALE") - ReceiptRow("Amount", "500.00 MMK") - ReceiptRow("Card Type", "MPU") - ReceiptRow("Card No", "1234 **** **** 5678") - ReceiptRow("Status", "SUCCESS") - ReceiptRow("Date", "13/05/2026") - ReceiptRow("Time", "14:30:22") - ReceiptRow("Ref No", "REF123456789") + ReceiptRow("Merchant", state.payDetail?.merchantName.toString() ) + ReceiptRow("Terminal ID", state.payDetail?.terminalNo.toString() ) + ReceiptRow("Transaction", state.payDetail?.transType.toString()) + ReceiptRow("Amount", POSUtil.getInstance().getDecimalAmountSeparatorFormat(state.payDetail?.amount?:0)) + ReceiptRow("Card Type", state.payDetail?.accountType.toString()) + ReceiptRow("Card No", state.payDetail?.cardNo.toString()) + ReceiptRow("Status", POSUtil.getInstance().getResponse(state.payDetail?.tradeAnswerCode?: "-")) + ReceiptRow("Date", state.payDetail?.transDate.toString() ) + ReceiptRow("Time", state.payDetail?.transTime.toString()) + ReceiptRow("Ref No", state.payDetail?.referNo.toString()) ReceiptDivider() Spacer(modifier = Modifier.height(8.dp)) Text( @@ -257,6 +271,8 @@ fun ReceiptDivider() { fun PreviewPrintReceiptScreen() { MaterialTheme { PrintReceiptScreen( + sharedViewModel = hiltViewModel(), + transactionResultViewModel = hiltViewModel(), onPrint = {}, onDone = {} ) diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt b/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt index df026e8..9558d74 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/settlement/SettlementViewModel.kt @@ -99,7 +99,7 @@ class SettlementViewModel @Inject constructor( private val isoMsgX: ISOMsgX = ISOMsgX.ISOMsgXBuilder( ISOVersion.VERSION_1993, - ISOMode.BOTH_HEADER_TPDU, + ISOMode.ONLY_HEADER, HostName.MPU ).build() diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt index fd4fef4..2248334 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultRoute.kt @@ -11,7 +11,7 @@ import com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType @Composable fun TransactionResultRoute( - viewModel: TransactionResultViewModel = hiltViewModel(), + viewModel: TransactionResultViewModel, sharedViewModel: SharedViewModel, onNavigateMain: () -> Unit, onNavigatePrintReceipt: () -> Unit, diff --git a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt index 47354a2..d6f6695 100644 --- a/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt +++ b/app/src/main/java/com/mob/utsmyanmar/ui/transaction_result/TransactionResultScreen.kt @@ -26,6 +26,7 @@ import com.mob.utsmyanmar.ui.preview.P2Preview import com.mob.utsmyanmar.ui.theme.Color import com.utsmyanmar.paylibs.model.PayDetail import com.utsmyanmar.paylibs.print.PrintReceipt +import com.utsmyanmar.paylibs.utils.POSUtil @Composable @@ -76,7 +77,7 @@ fun TransactionResultScreen( Spacer(modifier = Modifier.height(28.dp)) - AmountCard(amount = state.payDetail?.amount.toString()) + AmountCard(amount = POSUtil.getInstance().getDecimalAmountSeparatorFormat(state.payDetail?.amount?:0)) Spacer(modifier = Modifier.height(16.dp)) diff --git a/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java b/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java index 55f7e2e..694a32c 100644 --- a/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java +++ b/baselib/src/main/java/com/utsmyanmar/baselib/TerminalKeyUtil.java @@ -27,8 +27,8 @@ public final class TerminalKeyUtil { byte[] pik_kcv; SecurityOptV2 mSecurityOptV2 = BaseApplication.getInstance().mSecurityOptV2; - byte[] cvByte = ByteUtil.hexStr2Bytes("60430856F15FAE51"); - byte[] dataByte = ByteUtil.hexStr2Bytes("170003A44E7D5366FECD4731D9BD4E49"); + byte[] cvByte = ByteUtil.hexStr2Bytes("B7B520"); + byte[] dataByte = ByteUtil.hexStr2Bytes("e121249099a677e8b7d4f6a9d49fe8d1".toUpperCase()); byte[] makBytes = ByteUtil.hexStr2Bytes("250738083EC15BD3BA67D66B8A7AA13B"); // byte[] makCvBytes = ByteUtil.hexStr2Bytes("204E449B97"); @@ -48,7 +48,7 @@ public final class TerminalKeyUtil { if(!SystemParamsOperation.getInstance().isInjectOnce()) { try { // result = mSecurityOptV2.saveKeyDukpt(AidlConstantsV2.Security.KEY_TYPE_DUPKT_IPEK,IPEKByte,IPEKKCVByte,KSNByte,AidlConstantsV2.Security.KEY_ALG_TYPE_3DES,9); - result = mSecurityOptV2.savePlaintextKey(AidlConstantsV2.Security.KEY_TYPE_TMK,IPEKByte,IPEKKCVByte,AidlConstantsV2.Security.KEY_ALG_TYPE_3DES,9); + result = mSecurityOptV2.savePlaintextKey(AidlConstantsV2.Security.KEY_TYPE_TMK,dataByte,cvByte,AidlConstantsV2.Security.KEY_ALG_TYPE_3DES,9); LogUtil.d(ContentValues.TAG, "save TMK result:" + result); if (result != 0) { LogUtil.d(TAG, "save TMK fail"); diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/isobuilder/builderx/BaseISOMsgX.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/isobuilder/builderx/BaseISOMsgX.java index 1ea739f..d44972a 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/isobuilder/builderx/BaseISOMsgX.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/isobuilder/builderx/BaseISOMsgX.java @@ -18,7 +18,7 @@ public abstract class BaseISOMsgX { byte[] newSendBytes = EncodePackage.assembly(map, msgIdentifier, 0, "0000000000",hostName); // String BPCTPDU = "6003550000"; - String MOBTPDU = "6030303030"; + String MOBTPDU = "6005170000"; if(isoMode == ISOMode.BOTH_HEADER_TPDU) { byte[] outBytes = new byte[newSendBytes.length - 6 ]; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/network/ISOSocket.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/network/ISOSocket.java index 85cc684..6068dc9 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/network/ISOSocket.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/network/ISOSocket.java @@ -148,7 +148,7 @@ public class ISOSocket { private SSLSocketFactory getSSLSocketFactory() throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException, KeyManagementException { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - InputStream caInput = context.getResources().openRawResource(R.raw.mob_uat); // this cert file stored in \app\src\main\res\raw folder path + InputStream caInput = context.getResources().openRawResource(R.raw.mpu_crt_2026); // this cert file stored in \app\src\main\res\raw folder path Certificate ca = cf.generateCertificate(caInput); caInput.close(); @@ -175,7 +175,7 @@ public class ISOSocket { private OkHttpClient getClient() throws CertificateException, KeyStoreException, IOException, NoSuchAlgorithmException, KeyManagementException { CertificateFactory cf = CertificateFactory.getInstance("X.509"); - InputStream caInput = context.getResources().openRawResource(R.raw.mob_uat); // this cert file stored in \app\src\main\res\raw folder path + InputStream caInput = context.getResources().openRawResource(R.raw.mpu_crt_2026); // this cert file stored in \app\src\main\res\raw folder path Certificate ca = cf.generateCertificate(caInput); caInput.close(); @@ -331,8 +331,10 @@ public class ISOSocket { isSwitchIp = true; // serverIP = "posuat.myanmarorientalbank.com"; // serverPort = 5033; - serverIP = "192.168.0.100"; - serverPort = 5001; +// serverIP = "192.168.0.100"; +// serverPort = 5001; + serverIP = "103.84.101.82"; + serverPort = 60147; // serverIP = getSecondaryIp(); // serverPort = getSecondaryPort(); } @@ -353,8 +355,10 @@ public class ISOSocket { if (!isSwitchIp) { // serverIP = getIp(); // serverPort = getPort(); - serverIP = "192.168.0.100"; - serverPort = 5001; +// serverIP = "192.168.0.100"; +// serverPort = 5001; + serverIP = "103.84.101.82"; + serverPort = 60147; SystemParamsOperation.getInstance().setSslSwitchStatus(false); // serverIP = "posuat.myanmarorientalbank.com"; // serverPort = 5033; diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java index 3dfcbb6..a7dfafc 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/print/printx/PrintXImpl.java @@ -58,14 +58,14 @@ public class PrintXImpl extends BaseXPrint implements PrintX { opts.inJustDecodeBounds = true; // Step 1: Only read dimensions first - BitmapFactory.decodeResource(resources, R.drawable.primary_print_logo_yoma_bank, opts); + BitmapFactory.decodeResource(resources, R.drawable.print_logo_mpu, opts); // Step 2: Calculate sample size so width <= 384px opts.inSampleSize = calculateInSampleSize(opts, 384, 384); opts.inJustDecodeBounds = false; // Step 3: Decode scaled-down bitmap - bitmap = BitmapFactory.decodeResource(resources, R.drawable.primary_print_logo_yoma_bank, opts); + bitmap = BitmapFactory.decodeResource(resources, R.drawable.print_logo_mpu, opts); } @Override diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/reversal/ReversalAction.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/reversal/ReversalAction.java index c62ae53..6838839 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/reversal/ReversalAction.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/reversal/ReversalAction.java @@ -53,7 +53,7 @@ public class ReversalAction { } private ReversalAction() { - isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.BOTH_HEADER_TPDU,HostName.BPC) + isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.ONLY_HEADER,HostName.MPU) .build(); } diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/sign_on/SignOnProcess.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/sign_on/SignOnProcess.java index afc7394..2f2931f 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/sign_on/SignOnProcess.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/sign_on/SignOnProcess.java @@ -50,7 +50,7 @@ public class SignOnProcess { private SignOnProcess() { tradeData = Params.newTrade(true); // payDetail = tradeData.getPayDetail(); - isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.BOTH_HEADER_TPDU,HostName.MPU) + isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.ONLY_HEADER,HostName.MPU) .build(); } @@ -67,7 +67,7 @@ public class SignOnProcess { payDetail.setTransactionType(TransactionsType.SIGN_ON.value); payDetail.setHostName(hostName.name); - byte[] sendBytes = isoMsgX.buildISOPackets(tradeData, BitmapConfig.CZ_SIGN_ON, MessageType.NETWORK_MANAGEMENT); + byte[] sendBytes = isoMsgX.buildISOPackets(tradeData, BitmapConfig.MPU_NEW_SIGN_ON, MessageType.NETWORK_MANAGEMENT); ISOSocket.getInstance().enqueue(sendBytes, sendBytes.length,false, new ISOCallback() { @Override public void onReceive(byte[] bytes, int length) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java index f17e0c8..50a1c9c 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/transactions/TransactionsOperation.java @@ -34,3444 +34,7 @@ import java.util.Objects; import sunmi.sunmiui.utils.LogUtil; -public class - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TransactionsOperation { +public class TransactionsOperation { private Map responseMap; @@ -3515,7 +78,7 @@ TransactionsOperation { TradeData transTradeData; PayDetail transPayDetail; - isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.BOTH_HEADER_TPDU, hostName) + isoMsgX = new ISOMsgX.ISOMsgXBuilder(ISOVersion.VERSION_1993, ISOMode.ONLY_HEADER, hostName) .build(); if (transactionsType == TransactionsType.SALE || transactionsType == TransactionsType.PRE_AUTH_SALE || transactionsType == TransactionsType.CASH_OUT) { diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java index 7be7734..c68949a 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/POSUtil.java @@ -177,6 +177,10 @@ public class POSUtil { return BaseErrorCode.convert93to87(responseCode); } + public String getResponse(String responseCode) { + return BaseErrorCode.getCode(responseCode); + } + public String getCardType(PayDetail payDetail) { int value = 0; 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 c7a99f8..418e0f4 100644 --- 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,19 +3,19 @@ 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"), REFUND("REFUND",4,"200000"), - PRE_AUTH_SALE("PRE-AUTH",5,"930000"), + PRE_AUTH_SALE("PRE-AUTH",5,"300000"), //930000 - PRE_AUTH_VOID("PREAUTH CANCELLATION",6,"200000"), + PRE_AUTH_VOID("PREAUTH CANCELLATION",6,"020000"), - PRE_AUTH_COMPLETE("PREAUTH COMPLETION",7,"940000"), + PRE_AUTH_COMPLETE("PREAUTH COMPLETION",7,"000000"), //940000 - PRE_AUTH_COMPLETE_VOID("VOID PREAUTH COMPLETE",8,"940000"), + PRE_AUTH_COMPLETE_VOID("VOID PREAUTH COMPLETE",8,"000000"), //940000 CASH_OUT("CASH_OUT",9,"010000"), REVERSAL("REVERSAL",10,"00"), diff --git a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/params/Params.java b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/params/Params.java index c80467b..fca79a1 100644 --- a/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/params/Params.java +++ b/paylibs/src/main/java/com/utsmyanmar/paylibs/utils/params/Params.java @@ -106,8 +106,11 @@ public class Params { // mock tid,mid - payDetail.setTerminalNo("00000003"); - payDetail.setMerchantNo("777031200000001"); +// payDetail.setTerminalNo("00000003"); +// payDetail.setMerchantNo("777031200000001"); + // mpu + payDetail.setTerminalNo("10040018"); + payDetail.setMerchantNo("110400000000006"); // 4, Nov ,2024 payDetail.setTransCVM(TransCVM.NO_CVM); diff --git a/paylibs/src/main/res/drawable/print_logo_mpu.png b/paylibs/src/main/res/drawable/print_logo_mpu.png new file mode 100644 index 0000000000000000000000000000000000000000..a1dae0f6ae142871c514cc64b7343cdcdfe56ad4 GIT binary patch literal 55154 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 Hv&a7rGiT9E literal 0 HcmV?d00001 diff --git a/paylibs/src/main/res/raw/mpu_crt_2026.crt b/paylibs/src/main/res/raw/mpu_crt_2026.crt new file mode 100644 index 0000000..bf7b7b0 --- /dev/null +++ b/paylibs/src/main/res/raw/mpu_crt_2026.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID3DCCAsSgAwIBAgIJAIuL4ypXInCoMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNV +BAYTAk1SMQswCQYDVQQIDAJNUjEMMAoGA1UECgwDTVBVMQwwCgYDVQQLDANNUFUx +DTALBgNVBAMMBHRlc3QxIDAeBgkqhkiG9w0BCQEWEXdhaXlhbkBmcHQuY29tLnZu +MB4XDTIxMDIwMzE3MTExMloXDTIyMDIwMzE3MTExMlowdzELMAkGA1UEBhMCTVIx +DzANBgNVBAgMBllhbmdvbjEPMA0GA1UEBwwGWWFuZ29uMQwwCgYDVQQKDANNUFUx +DDAKBgNVBAsMA01QVTENMAsGA1UEAwwEdGVzdDEbMBkGCSqGSIb3DQEJARYMdGVz +dEBtcHUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAujLe6mWJ +GXliGUoLdJEA37VyBOQ7zLpge7u2QM2UMQXnKosdtZzMzXnVrnctJ6ehzLnhL0Lv +Oissr7qo53haXsJJccHeqcTH5cFkh96IswOrc8/1MMrb4zMjnNjOZaxmB4HeGHKk +KjNLKTTO8It3v/MziBhxUEEKVrN4npeUfsGVPfrvYnZXSWuRLhzYYLtEz/LFg4Yh +28pCXqk2vmGNV62oZ2+SDisoiYdIVEOMRqb/7cJg+cd0JRdvxHsTNuYRHGtJOM10 +lEnoI+moE5OIUpp8Z+i4ZcvyThpNbRWf9sRzB8oc32fZ2UWnlN5+bVRLCjlk2jNO +SGdMuMaF0bs3GwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P +cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUipyzRYfqRc2P +QCJ0FJp6eAvI1wkwHwYDVR0jBBgwFoAUvYEAOtcvUt4CxCp+9zRG2oJqos8wDQYJ +KoZIhvcNAQEFBQADggEBAAjBQroy74ACyyJCZJ50KBTYQI3Sk82hO/+zZFqsJgWm +mNum31TtfwhvQmi94sXQSar0UsqLTmLC3UTucwEdSKOPzXF5BK4EEbkYgMm78hNK +2zqhGvcWlqun+KPxmnMRFoVmN3Ck2PkcgudvAeV0G3rm0OdLUwLoK2TcREVf1Cwg +C7jX5QtGOgVqnKDZBuoSvdbV30ka7pKkdJAy/Wus4N9hHH+bR2FNkLgTDoXnV8LL +E2dRKVYAh9TtuXiW/ejhPtEc14sMP+8JpCFX3DYx4yRW8ZeMl5jal4LhRFXdDbVl +Wm99KcWM+TNw/nzKwv0zUJXy0HlN82tvLX1/wbBUo8M= +-----END CERTIFICATE-----