| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335 |
- import id.co.hanoman.mbplugin.codex.Codex;
- import id.co.hanoman.mbplugin.codex.CodexContext;
- import java.util.HashMap;
- import java.util.Map;
- import java.io.IOException;
- import java.net.URISyntaxException;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- public class ResponseBuilder {
- public static Map<String, Object> createIsoResponse(Map<String, Object> receivedMessage, String code) {
- Map<String, Object> responseMessage = new HashMap<>(receivedMessage);
- String messageType = (String) receivedMessage.get("messageType");
- // Handle network management messages dulu (0800/0810)
- if ("0800".equals(messageType) || "0810".equals(messageType)) {
- responseMessage.put("responseCode", "00"); // selalu accept
- responseMessage.put("messageType", messageType.equals("0800") ? "0810" : messageType);
- return responseMessage;
- }
-
- String kodePemda = (String) receivedMessage.get("kodePemda");
- String processingCode = (String) receivedMessage.get("processingCode");
- String reservedPrivate3 = (String) receivedMessage.get("reservedPrivate3");
- String fromAccount = (String) receivedMessage.get("fromAccount");
- String toAccount = (String) receivedMessage.get("toAccount");
- if (messageType != null && messageType.matches("\\d{4}")) {
- try {
- int messageTypeNumber = Integer.parseInt(messageType);
- messageTypeNumber += 10;
- responseMessage.put("messageType", String.format("%04d", messageTypeNumber));
- } catch (NumberFormatException e) {
- responseMessage.put("messageType", messageType);
- }
- }
- responseMessage.put("responseCode", "00");
- String additionalDataPrivate = (String) receivedMessage.get("additionalDataPrivate");
-
- switch (code) {
- // pln nontaglist payment
- case "0200.18.305111":
- responseMessage.put("additionalDataPrivate", "30511100000000212001703515404122025085706RAMBAT SUGIYONO 00000122310000000000450022001733982271055179 0000000001");
- responseMessage.put("reservedPrivate2", "MIGRASI PRABAYAR 212001703515404DES25RAMBAT SUGIYONO 2120003540341.218.600 22001733982271055179 4.500 1.223.100 21200 ");
- responseMessage.put("reservedForPrivateUse2", "Informasi Hubungi Call Center 123 Atau Hub PLN Terdekat :");
- break;
- // pln postpaid payment
- case "0200.18.301211":
- responseMessage.put("additionalDataPrivate", "3012110535851014157 04122025091631DENY FIRMANSYAH 00000018932100000000300022001745735141055392 1 1457351492");
- responseMessage.put("reservedForPrivateUse1", "20251204091613000010550003392514");
- responseMessage.put("reservedPrivate2", "535851014157DES25 DENY FIRMANSYAH 00025077-00025211R1M /000000900 0 18932122001745735141055392 3000 192321 0 53585 ");
- responseMessage.put("reservedForPrivateUse2", "Informasi Hubungi Call Center 123 Atau hubungi PLN Terdekat");
- break;
- // pln prepaid payment
- case "0200.18.301422":
- responseMessage.put("reservedForPrivateUse2", "BANK BTN\nInformasi Hubungi Call Center 123 Atau hubungi PLN Terdekat\nDownload PLN Mobile");
- responseMessage.put("reservedPrivate2", "32115720610 3.500JUNAIDI 0,00R1 /000002200 0,002BBT1742510913077976 18.182,00 0,00 203.500 181.818,00 125,920905033469869694456 1.444,14613112 ");
- responseMessage.put("additionalDataPrivate", "3014220000000001310111420930 10082025234420JUNAIDI 0000002000000000000035002BBT1742510913077976 131011142093 ");
- break;
- // pln manual advice case 1
- case "0220.18.301422":
- responseMessage.put("reservedForPrivateUse2", "BANK BTN\nInformasi Hubungi Call Center 123 Atau hubungi PLN Terdekat\nDownload PLN Mobile");
- responseMessage.put("reservedPrivate2", "32115720610 3.500JUNAIDI 0,00R1 /000002200 0,002BBT1742510913077976 18.182,00 0,00 203.500 181.818,00 125,920905033469869694456 1.444,14613112 ");
- responseMessage.put("additionalDataPrivate", "3014220"+additionalDataPrivate.substring(7,27)+"0 10082025234420JUNAIDI 0000002000000000000035002BBT1742510913077976 131011142093 ");
- responseMessage.put("messageType", "0230");
- String s1 = additionalDataPrivate.substring(7, 27);
- String s2 = "00000000056223261220";
- boolean stringsMatch = s1.equals(s2);
- if (!stringsMatch) {
- responseMessage.put("responseCode", "68");
- }
- break;
- // pln manual advice case 2
- case "0221.18.301422":
- responseMessage.put("reservedForPrivateUse2", "BANK BTN\nInformasi Hubungi Call Center 123 Atau hubungi PLN Terdekat\nDownload PLN Mobile");
- responseMessage.put("reservedPrivate2", "32115720610 3.500JUNAIDI 0,00R1 /000002200 0,002BBT1742510913077976 18.182,00 0,00 203.500 181.818,00 125,920905033469869694456 1.444,14613112 ");
- if(additionalDataPrivate.substring(7,27).equals("00000000056223261222")) {
- try {
- // 1. Get the exact path of the running JAR file
- Path jarLocation = Paths.get(ResponseBuilder.class.getProtectionDomain().getCodeSource().getLocation().toURI());
-
- // 2. Get the folder that contains the JAR
- Path jarDirectory = jarLocation.getParent();
-
- // 3. Resolve (attach) "done.txt" to that specific folder
- Path filePath = jarDirectory.resolve("done.txt");
- // --- The rest of your logic remains exactly the same ---
- if (Files.notExists(filePath)) {
- Files.createFile(filePath);
- responseMessage.put("responseCode", "68");
- } else {
- Files.delete(filePath);
- }
-
- } catch (IOException | URISyntaxException e) {
- System.err.println("An error occurred: " + e.getMessage());
- e.printStackTrace();
- responseMessage.put("responseCode", "68");
- }
- } else if(!additionalDataPrivate.substring(7,27).equals("00000000056223261221")) {
- responseMessage.put("responseCode", "68");
- }
- responseMessage.put("additionalDataPrivate", "3014220"+additionalDataPrivate.substring(7,27)+"0 10082025234420JUNAIDI 0000002000000000000035002BBT1742510913077976 131011142093 ");
- responseMessage.put("messageType", "0230");
- break;
- // pln nontaglist inquiry
- case "0200.38.305111":
- responseMessage.put("additionalDataPrivate", "30511100000000212001703515404122025085638RAMBAT SUGIYONO 000001223100000000004500 1339822779");
- responseMessage.put("reservedPrivate2", "000000005622331DEC16PENYAMBUNGAN BARU NAMA PELANGGAN DUMMY 999999999999 138.000 5.000 143.000");
- responseMessage.put("reservedForPrivateUse1", "52021014609012345678901234567890");
- break;
- // pln postpaid inquiry
- case "0200.38.301211":
- responseMessage.put("reservedForPrivateUse1", "20230511205447204973203818072193");
- responseMessage.put("additionalDataPrivate", "3012110535851014157 04122025091613DENY FIRMANSYAH 000000189321000000003000 1 1457351492");
- responseMessage.put("reservedPrivate2", "562232628760 NAMA PELANGGAN DUMMY 1 DEC16 137000 2000 139000");
- break;
- // pln prepaid inquiry
- case "0200.38.301422":
- responseMessage.put("additionalDataPrivate", "3014220000000000562232628760 10082025234421PT.GRAHA DUTA PUTRA JAYA 00000000000000000000350020250810234421000030770008977481545301379058 ");
- responseMessage.put("reservedPrivate2", "12233368101 PLGN LPB 12233368101 R3 /000002200 0000000000000000000000000000000000");
- responseMessage.put("reservedForPrivateUse1", "20230118144146186738850085697412");
- break;
- // pgn payment
- case "0200.18.212":
- responseMessage.put("receivingInstitutionIdentificationCode", "20000000001");
- responseMessage.put("reservedPrivate1", "BTN4PRO100000000000");
- // responseMessage.put("amountTransaction", "181000");
- // responseMessage.put("processingCode", "1880113");
- // responseMessage.put("transmissionDateTime", "0414092338");
- // responseMessage.put("systemsTraceAuditNumber", "015713");
- // responseMessage.put("timeLocalTransaction", "162338");
- // responseMessage.put("dateLocalTransaction", "0414");
- // responseMessage.put("dateSettlement", "0415");
- // responseMessage.put("dateCapture", "0414");
- // responseMessage.put("merchantType", "6014");
- // responseMessage.put("acquiringInstitutionIdentificationCode", "000200");
- // responseMessage.put("retrievalReferenceNumber", "ESB607509073");
- // responseMessage.put("responseCode", "00");
- // responseMessage.put("cardAcceptorIdentificationCode", "000000013000008");
- // responseMessage.put("additionalDataPrivate", "210200040793 73053 000001880113");
- // responseMessage.put("currencyCodeTransaction", "360");
- // responseMessage.put("reservedPrivate3", "212");
- // responseMessage.put("receivingInstitutionIdentificationCode", "20000000001");
- break;
- case "0200.38.212":
- responseMessage.put("additionalDataPrivate", "210200040793 73053 0000018801130000000363MARTHENMINGGU RT20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010326 1");
- break;
- case "0200.312000":
- if (fromAccount != null) {
- if (fromAccount.equals("19901510004062")) {
- responseMessage.put("responseCode", "53");
- responseMessage.put("reasonCode", "");
- } else {
- responseMessage.put("additionalDataPrivate", "20230608BTANIDJA5100000028020230608BTANIDJA510O020000028020230608BTANIDJA51000000280NASABAH R286263 01010103 SVGS20230613");
- responseMessage.put("processingCode", "312010");
- responseMessage.put("reasonCode", "U000");
- }
- }
- if (toAccount != null) {
- if (toAccount.equals("19901510004062")) {
- responseMessage.put("responseCode", "53");
- responseMessage.put("reasonCode", "");
- } else {
- responseMessage.put("additionalDataPrivate", "20230608BTANIDJA5100000028020230608BTANIDJA510O020000028020230608BTANIDJA51000000280NASABAH R286263 01010103 SVGS20230613");
- responseMessage.put("processingCode", "312010");
- responseMessage.put("reasonCode", "U000");
- }
- }
- break;
- case "0200.031000":
- break;
- case "0400.031000":
- responseMessage.put("additionalDataPrivate", " MASJID JAMI AL MUNAWWAROH GRAHN");
- break;
- case "0200.010010":
- break;
- case "0400.010010":
- break;
- case "0200.041000":
- break;
- case "0400.041000":
- responseMessage.put("responseCode", "97");
- responseMessage.put("additionalResponseData", "000195953600000271093600");
- responseMessage.put("additionalDataPrivate", "HARIS NUGROHO SETIAWAN ");
- break;
- case "0200.38.090001":
- responseMessage.put("responseCode", "00");
- responseMessage.put("reservedPrivate1", "0401000899880DEETJE MARENTEK 23042026-22052026000000276400");
- break;
- case "0200.311000.001001BIF":
- break;
- case "0200.312000.001001BIF":
- // responseMessage.put("responseCode", "88");
- responseMessage.put("additionalDataPrivate", "20240223FASTIDJA5104908809820240223BTANIDJA510O020003363720240223BTANIDJA51000033637ASIA KARYA MANDIRI CV 9120007592095 02 0291 CACC20240223");
- break;
- case "0200.321000": // inq proxy bifast
- break;
- case "0200.322000": // inq proxy bifast
- responseMessage.put("additionalDataPrivate", "20211229FASTIDJA6100024111220211229BTANIDJA6108000817620211229BTANIDJAO80008176016285696212272 BTANIDJABMRIIDJA0000181345 THERESIA ");
- break;
- case "0200.471000": // Posting BiFast Credit Transfer
- break;
- case "0200.472000": // Posting BiFast Credit Transfer
- // responseMessage.put("responseCode", "99");
- responseMessage.put("additionalDataPrivate", "20260409FASTIDJA0105640492220260409BTANIDJA0100007400420260409BTANIDJA010O020007400420260409FASTIDJA01056404711MIRA ERIANCE 20260409");
- responseMessage.put("reasonCode", "U000");
- break;
- case "0200.480000": // linking inq bin
- responseMessage.put("additionalDataPrivate", "BIN00001BIN00002BIN00003BIN00004BIN00005BIN00006BIN00007BIN00008BIN00009BIN00010BIN00011BIN00012BIN00013BIN00014BIN00015BIN00016BIN00017BIN00018BIN00019BIN00020BIN00021BIN00022BIN00023BIN00024BIN00025BIN00026BIN00027BIN00028BIN00029BIN00030BIN00031BIN00032BIN00033BIN00034BIN00035BIN00036BIN00037BIN00038BIN00039BIN00040BIN00041BIN00042BIN00043BIN00044BIN00045BIN00046BIN00047BIN00048BIN00049BIN00050BIN00051BIN00052BIN00053BIN00054BIN00055BIN00056BIN00057BIN00058BIN00059BIN00060BIN00061BIN00062BIN00063BIN00064BIN00065BIN00066BIN00067BIN00068BIN00069BIN00070BIN00071BIN00072BIN00073BIN00074BIN00075BIN00076BIN00077BIN00078BIN00079BIN00080BIN00081BIN00082BIN00083BIN00084BIN00085BIN00086BIN00087BIN00088BIN00089BIN00090BIN00091BIN00092BIN00093BIN00094BIN00095BIN00096BIN00097BIN00098BIN00099BIN00100");
- break;
- case "0200.490000":
- responseMessage.put("additionalDataPrivate", "BIN00001BIN00002BIN00003BIN00004BIN00005BIN00006BIN00007BIN00008BIN00009BIN00010BIN00011BIN00012BIN00013BIN00014BIN00015BIN00016BIN00017BIN00018BIN00019BIN00020BIN00021BIN00022BIN00023BIN00024BIN00025BIN00026BIN00027BIN00028BIN00029BIN00030BIN00031BIN00032BIN00033BIN00034BIN00035BIN00036BIN00037BIN00038BIN00039BIN00040BIN00041BIN00042BIN00043BIN00044BIN00045BIN00046BIN00047BIN00048BIN00049BIN00050BIN00051BIN00052BIN00053BIN00054BIN00055BIN00056BIN00057BIN00058BIN00059BIN00060BIN00061BIN00062BIN00063BIN00064BIN00065BIN00066BIN00067BIN00068BIN00069BIN00070BIN00071BIN00072BIN00073BIN00074BIN00075BIN00076BIN00077BIN00078BIN00079BIN00080BIN00081BIN00082BIN00083BIN00084BIN00085BIN00086BIN00087BIN00088BIN00089BIN00090BIN00091BIN00092BIN00093BIN00094BIN00095BIN00096BIN00097BIN00098BIN00099BIN00100");
- responseMessage.put("responseCode", "90");
- break;
- case "0200.701000":
- break;
- case "0200.702000":
- responseMessage.put("additionalResponseData", "4000000990280000000309780");
- responseMessage.put("issuerTraceId", "& 0000200372! Q500350 150119184140ATMDATM EDC ALTO SA Ex 000000023000000000000000150119183729ATMDATM Link Acq SA Ex 000000200000000000000000150119183758ATMDATM SA Withdrawal 000000350000000000000000160119161444ATMDATM SA Link Wdr 000000007500000000000000160119161444ATMDATM SA Link Wdr 000000100000000000000000");
- break;
- // case "0800.000101": // key exchange
- // responseMessage.put("additionalDataPrivate", "11BA2E4B71D512AD62265BFA86D2243E");
- // break;
- case "0200.38.1041": // inq fortuna pdam
- responseMessage.put("responseCode", "13");
- responseMessage.put("amountTransaction", "11084800");
- responseMessage.put("additionalDataPrivate", "0101005015 MISLAHUDDIN A JL. M. YAMIN - NN 02120230500000000000000000398560002500000000136-00000024220230600000000000000000209920002500000000160-00000013");
- break;
- case "0200.10.1371": // inq PDAM PADANG
- responseMessage.put("amountTransaction", "11084800");
- responseMessage.put("reservedPrivate3", "01122025000000226137");
- responseMessage.put("additionalDataPrivate", "137115502025");
- responseMessage.put("reservedPrivate2", "SUWANDI (MBR5-U) Komp. Griya Anak Air Permai Blok F No. 11 082017000000000000000000000000000000036500");
- break;
- case "0200.20.1371": // pay PDAM PADANG
- responseMessage.put("amountTransaction", "11084800");
- responseMessage.put("reservedPrivate2", "20035648YEASY DARMAYANTI. SE. MSI KOMP. CEMARA II BLOK EE.2/1 2CTNA12242317 1220250000000055350000000055610000000000102026-01-0514:45:45K300000000000000000000000000000011700000000000000000000000750000000002443700000013193713000008 K3-2555188");
- responseMessage.put("additionalDataPrivate", "137120035648122025000000000000000000000000000000131937");
- break;
- case "0200.471010"://bif
- responseMessage.put("responseCode", "30");
- responseMessage.put("reasonCode", "0041");
- break;
- case "0200.38.612": //inq spp 0019
- responseMessage.put("additionalDataPrivate", "6101240635289125126A1B8F4SITI MAULIDINAH APRI;C3+TG+D 100001299975001012020");
- break;
- case "0200.18.612": //payment spp 0019
- responseMessage.put("additionalDataPrivate", "6101 25126A1B8F4000000000000");
- break;
- case "0200.3":
- if (kodePemda != null) {
- if(kodePemda.equals("4005")) {
- // inq pemko 4005
- responseMessage.put("reservedPrivate1", "3278007007021208302017");
- responseMessage.put("reservedPrivate2", "3278007007021208302017ADI AHMAD SAEPULLOH KP BOJONG SALAM SUKAMAJU BARU TAPOS JAWA BARAT 00000000006000000000003620170831000000137050000000002741000000139791");
- responseMessage.put("reservedPrivate3", "214");
- } else if(kodePemda.equals("PAD")) {
- // inq pemko 4003
- responseMessage.put("reservedPrivate1", "398092017");
- responseMessage.put("reservedPrivate2", "2.000299.01.004 MISO SARI RASO MISO SARI RASO JL. DAMAR NO. 1 525000 ");
- responseMessage.put("reservedForIsoUse3", "C09+925");
- } else if(kodePemda.equals("0196")) {
- // inq pemko 4008
- responseMessage.put("amountTransaction", "203500");
- responseMessage.put("reservedPrivate2", "3280710004016061602017AYI RIYADHI, M.SI, DRS MELONG ASRI REGENCY MELONG CIMAHI SELATAN JAWA BARAT 00000000011500000000008020170929000000203500000000000000000000203500");
- }
- } else if(processingCode.equals("341019")) {
- // inq pemko 4014
- responseMessage.put("reservedPrivate2", "3271040002004049402017AMIR BALFAS, IR JL CEMPAKA PUTIH TENGAH SINDANG BARANG BOGOR BARAT JAWA BARAT 00000000011800000000007220170929000000386688000000000000000000386688");
- }
- break;
- case "0200.5":
- if (kodePemda != null) {
- if(kodePemda.equals("4005")) {
- // pay pemko 4005
- responseMessage.put("additionalDataNational", "2211030250120002");
- responseMessage.put("additionalDataPrivate", "81170919080023");
- responseMessage.put("currencyCodeTransaction", "360");
- responseMessage.put("transactionType", "PAY");
- responseMessage.put("kodePemda", "4005");
- responseMessage.put("reservedPrivate1", "3278007007021208302017");
- responseMessage.put("reservedPrivate2", "3278007007021208302017ADI AHMAD SAEPULLOH 000000139791");
- responseMessage.put("reservedPrivate3", "214");
- } else if(kodePemda.equals("PAD")) {
- // pay pemko 4003
- responseMessage.put("additionalDataPrivate", "0009257328");
- } else if(kodePemda.equals("0196")) {
- // pay pemko 4008
- responseMessage.put("additionalDataNational", "010197712992");
- }
- } else if(reservedPrivate3 != null) {
- if(reservedPrivate3.equals("4000")) {
- // pay pemko 4013
- responseMessage.put("additionalDataNational", "010143704282");
- }
- } else if(processingCode.equals("541019")) {
- // pay pemko 4014
- responseMessage.put("processingCode", processingCode);
- }
-
- break;
- case "0200.50.4000":
- // pemko pay 4013
- responseMessage.put("additionalDataPrivate", "3175031003018407902017PT. TMJ/ DAFICKA PRAC 0000002991469117392102410198");
- break;
- case "0200.402000":
- //bi-fast
- responseMessage.put("additionalDataPrivate", "20260224FASTIDJA5100131725420250920FASTIDJA5108047598520250920BTANIDJA510O020005093120250920BTANIDJA01050001076BXXXXXXXXXXXXXXXXXXX 01010300 20260224");
- responseMessage.put("reasonCode", "U000");
- break;
- case "0200.311000":
- responseMessage.put("additionalDataPrivate", "20251112FASTIDJA5108746434520251112BTANIDJA510O995000000820251112BTANIDJA51050000008BXXXXXXXXXXXXXXXXXXX 01010300 SVGS20251112");
- responseMessage.put("processingCode", "311010");
- responseMessage.put("reasonCode", "U000");
-
- }
- return responseMessage;
- }
- public static byte[] encodeMessage(Map<String, Object> message, Codex codex) throws Exception {
- CodexContext cc = new CodexContext();
- codex.encode(cc, message);
- return cc.toByteArray();
- }
- }
|