added bin list and its features

This commit is contained in:
kizzy 2026-01-19 23:46:55 +07:00
parent e4f706f24f
commit 4d30d0134c
11 changed files with 122 additions and 16 deletions

View File

@ -39,6 +39,8 @@ import com.utsmyanmar.checkxread.sdk.NexGoSDK;
import com.utsmyanmar.ecr.ECRHelper;
import com.utsmyanmar.paylibs.Constant;
import com.utsmyanmar.paylibs.model.PayDetail;
import com.utsmyanmar.paylibs.model.SettleData;
import com.utsmyanmar.paylibs.model.TradeData;
import com.utsmyanmar.paylibs.print.printx.PrintXReceipt;
import com.utsmyanmar.paylibs.utils.POSUtil;
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation;
@ -71,6 +73,8 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import com.utsmyanmar.paylibs.utils.LogUtil;
import com.utsmyanmar.paylibs.utils.params.Params;
/**
* Main Activity handling application navigation and fragment interactions
*/
@ -153,9 +157,9 @@ public class MainActivity extends AppCompatActivity implements
}
private void initKey(){
// SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius");
SystemParamsOperation.getInstance().setTmsAddress("https://api-tms-uat.kbzbank.com:8443/sirius");
// SystemParamsOperation.getInstance().setTmsAddress("https://sirius-nest.utsmyanmar.com");
// SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt");
SystemParamsOperation.getInstance().setEReceiptAddress("https://api-tms-uat.kbzbank.com:8443/receipt");
// SystemParamsOperation.getInstance().setEReceiptAddress("http://receipt-nest.utsmyanmar.com");
PinPad pinPad = MyApplication.getInstance().deviceEngine.getPinPad();
@ -452,10 +456,12 @@ public class MainActivity extends AppCompatActivity implements
// Handle regular auto settlement
boolean auto = intent.getBooleanExtra("AUTO_SETTLEMENT", false);
if (auto) {
com.utsmyanmar.paylibs.model.PayDetail payDetail = (com.utsmyanmar.paylibs.model.PayDetail) intent.getSerializableExtra("EXTRA_PAY_DETAIL");
PayDetail payDetail = (PayDetail) intent.getSerializableExtra("EXTRA_PAY_DETAIL");
if (payDetail != null) {
sharedViewModel.payDetail.setValue(payDetail);
sharedViewModel.transactionsType.setValue(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.SETTLEMENT);
sharedViewModel.transactionsType.setValue(TransactionsType.SETTLEMENT);
sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(payDetail.getAmount()));
try {
navController.navigate(R.id.transactionResultFragment);
} catch (Exception e) {
@ -476,14 +482,14 @@ public class MainActivity extends AppCompatActivity implements
List<PayDetail> qrTransList = (List<PayDetail>) intent.getSerializableExtra("QR_TRANS_LIST");
// Create QR settlement PayDetail
com.utsmyanmar.paylibs.model.SettleData settleData = new com.utsmyanmar.paylibs.model.SettleData(
SettleData settleData = new SettleData(
qrSaleCount, qrSaleAmount, 0, 0L, qrRefundCount, qrRefundAmount, 0, 0L);
com.utsmyanmar.paylibs.model.TradeData tradeData = com.utsmyanmar.paylibs.utils.params.Params.newTrade(false);
com.utsmyanmar.paylibs.model.PayDetail payDetail = tradeData.getPayDetail();
TradeData tradeData = Params.newTrade(false);
PayDetail payDetail = tradeData.getPayDetail();
payDetail.setSettleDataObj(settleData);
payDetail.setTransactionType(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.MMQR_SETTLEMENT.value);
payDetail.setTransType(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.MMQR_SETTLEMENT.name);
payDetail.setTransactionType(TransactionsType.MMQR_SETTLEMENT.value);
payDetail.setTransType(TransactionsType.MMQR_SETTLEMENT.name);
payDetail.setAmount(totalAmount);
payDetail.setTradeAnswerCode("000");
@ -491,7 +497,7 @@ public class MainActivity extends AppCompatActivity implements
sharedViewModel.setAmount(POSUtil.getInstance().getDecimalAmountSeparatorFormat(totalAmount));
sharedViewModel.payDetails.setValue(qrTransList);
sharedViewModel.payDetail.setValue(payDetail);
sharedViewModel.transactionsType.setValue(com.utsmyanmar.paylibs.utils.iso_utils.TransactionsType.MMQR_SETTLEMENT);
sharedViewModel.transactionsType.setValue(TransactionsType.MMQR_SETTLEMENT);
try {
navController.navigate(R.id.transactionResultFragment);

View File

@ -146,10 +146,10 @@ public class MainFragment extends DataBindingFragment {
delayFunctionCall(() -> {
NexGoSDK.getInstance().cancelCheckCard();
NexGoSDK.getInstance().closeReader();
// enableHomeButton();
enableHomeButton();
// disableTaskButton();
// BaseApplication.getInstance().deviceEngine.getPlatform().hideNavigationBar();
// BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
BaseApplication.getInstance().deviceEngine.getPlatform().showNavigationBar();
});
}

View File

@ -155,8 +155,8 @@ public class AutoSettleService extends Service {
createNotification();
if (SystemParamsOperation.getInstance().getSettlementStatus()) {
// performSettlement();
regularSettlementCompleted = true;
performSettlement();
// regularSettlementCompleted = true;
performQRSettlement();
} else {
LogUtil.d(TAG, "Settlement is disabled in system parameters");

View File

@ -129,6 +129,14 @@ public class ProcessingCardFragment extends DataBindingFragment {
@Override
public void onSuccess(CardDataX cardDataX) {
if(!TransactionUtil.getInstance().getBinList().isEmpty()) {
if(TransactionUtil.getInstance().getBinList().contains(cardDataX.getBin())) {
LogUtil.d(TAG," <= contain bin => ");
handlePreEmvProcess();
return;
}
}
routeId = R.id.action_processingCardFragment_to_pinPadFragment;
transProcessViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());
pinPadViewModel.transType.setValue(sharedViewModel.transactionsType.getValue());

View File

@ -13,6 +13,11 @@ import com.utsmm.kbz.config.Constants;
import com.utsmyanmar.paylibs.utils.LogUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class TransactionUtil {
@ -138,4 +143,25 @@ public class TransactionUtil {
return payDetail;
}
public static List<String> binParser(String input) {
if (input == null || input.trim().isEmpty()) {
return new ArrayList<>();
}
String[] parts = input.split("[,/\\-]");
return Arrays.stream(parts)
.map(String::trim)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
}
public List<String> getBinList() {
if(SystemParamsOperation.getInstance().getBinValues() == null || SystemParamsOperation.getInstance().getBinValues().isEmpty())
return new ArrayList<>();
else
return binParser(SystemParamsOperation.getInstance().getBinValues());
}
}

View File

@ -644,6 +644,9 @@ public class TMSSetupsImpl implements TMSSetups{
else if (TextUtils.equals(name, "certificate_password")) {
SystemParamsOperation.getInstance().setCertificatePassword(data);
}
else if(TextUtils.equals(name,"bin_list")) {
SystemParamsOperation.getInstance().setBinValue(data);
}
}
SystemParamsOperation.getInstance().setCarouselUrls(convertToString(imgUrls));

View File

@ -4,6 +4,11 @@ import com.utsmyanmar.baselib.util.EReceiptHelper;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class GeneralTest {
@Test
@ -22,4 +27,29 @@ public class GeneralTest {
String dataToHash = bodyString + secret + timestamp;
return EReceiptHelper.sha256(dataToHash);
}
@Test
public void testBinParser() {
String input1 = "629214, 624445";
System.out.println(binParser(input1)); // Output: [629214, 624445]
String input2 = "11111/ 22222 - 33333,44444";
System.out.println(binParser(input2)); // Output: [11111, 22222, 33333, 44444]
String input3 = "55555,";
System.out.println(binParser(input3)); // Output: [55555]
}
public static List<String> binParser(String input) {
if (input == null || input.trim().isEmpty()) {
return new ArrayList<>();
}
String[] parts = input.split("[,/\\-]");
return Arrays.stream(parts)
.map(String::trim)
.filter(s -> !s.isEmpty())
.collect(Collectors.toList());
}
}

View File

@ -287,8 +287,8 @@ public class NetworkModule {
tmsAddress = getTMSUrlFromNative();
}
String baseUrl = tmsAddress.trim() + "/api/v1/"; //for on prim
// String baseUrl = tmsAddress.trim() + "/"; //for uat and prod
// String baseUrl = tmsAddress.trim() + "/api/v1/"; //for on prim
String baseUrl = tmsAddress.trim() + "/"; //for uat and prod
final Gson gson =
new GsonBuilder().create();

View File

@ -68,4 +68,15 @@ public class CardDataX {
public String toString() {
return "Card number :"+pan + " expire date : "+exp + " track1 : "+ track1 + " track2 : "+ track2 + " track3 : "+ track3 + " card holder name : "+cardHolderName + " service code: "+serviceCode;
}
public String getBin() {
String bin = "";
if (pan != null) {
if (pan.length() >= 6) {
bin = pan.substring(0, 6);
System.out.println("BIN: " + bin);
}
}
return bin;
}
}

View File

@ -1420,6 +1420,18 @@ public class SystemParamsOperation {
return params.getShortCode();
}
public void setBinValue(String value) {
SystemParamsSettings params = getSystemParamsSettings();
params.setBinValues(value);
saveSystemParamsSettings(params);
}
public String getBinValues() {
SystemParamsSettings params = getSystemParamsSettings();
return params.getBinValues();
}
public String getSecHostMerchantId() {
SystemParamsSettings params = getSystemParamsSettings();
return params.getSecHostMerchantId();

View File

@ -47,6 +47,8 @@ public class SystemParamsSettings implements Serializable {
private String ereceiptAddress = "http://receipt-nest.utsmyanmar.com"; //for on prime
// private String ereceiptAddress = "https://api-tms-uat.kbzbank.com:8443/receipt"; //for uat
private String binValues = "";
private String terminalName = "";
private String terminalCapability = "E0E8C8";
@ -324,6 +326,14 @@ public class SystemParamsSettings implements Serializable {
this.secHostIpAddress = secHostIpAddress;
}
protected void setBinValues(String binValues) {
this.binValues = binValues;
}
protected String getBinValues() {
return this.binValues;
}
protected void setDisabledMessage(String disabledMessage) {
this.disabledMessage = disabledMessage;
}