You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1085 lines
48 KiB
Java

package gtpa.brs.payment.service;
import gtpa.brs.payment.service.impl.PreRegistPaymentMapper;
import gtpa.brs.security.KISA_SEED_CBC;
import com.raonsecure.transkey.TransKey;
import com.raonsecure.transkey.XSSValueExpection;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import gtpa.brs.util.SHA256Util;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* /////////////////////////////////////////////////////
* Company : MQNIC
* Create : seunghyun
* Date : 30/04/2019
* TIME : 10:58 AM
* Project : BRSPW
* Class : PreRegistPaymentService
* Desc :
* /////////////////////////////////////////////////////
*/
@SuppressFBWarnings
@Service
public class PreRegistPaymentService {
Logger logger = LoggerFactory.getLogger(PreRegistPaymentService.class);
@Resource(name = "preRegistPaymentDao")
PreRegistPaymentMapper paymentMapper;
@Resource(name = "globalsProperties")
Properties env;
/*@Autowired
HttpClient httpClient;*/
public Map registPayment(Map param, HttpServletRequest request) {
Map result = new HashMap();
try {
String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpRegist");
String terminalId = env.getProperty("Globals.PreRegistPayment.TerminalId");
String pbszUserKey = env.getProperty("Globals.PreRegistPayment.UserKey");
String tranSerialNo = paymentMapper.getTranSerialNo();
String priorOrdr = "1";
String mBerCi;
String vhcleNo = "";
String mberNo;
String vhcleManageNo = "";
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
String cardNo1;
String cardNo2;
String cardNo3;
String cardNo4;
String expireDay;
String secureNo = "";
String cvcNo = "";
String niNo;
String carrier;
String phoneNo;
String isForeigner;
String stcmpNo;
String setleMnKnd;
String setleMnMno;
String ccmpCode;
/* 22.08.08 서주희 - 웹접근성 작업(기능 추가)
* 22.08.29 서주희 - 웹접근성 작업(기능 제거)
* 23.07.20 김경민 - 웹접근성 작업(기능 복구)
*/
String cNo1 = (String) param.get("cardNo1");
String cNo4 = (String) param.get("cardNo4");
String decodeCardNo2 = (String) param.get("cardNo2");
String decodeCardNo3 = (String) param.get("cardNo3");
String cardNo = cNo1 + decodeCardNo2 + decodeCardNo3 + cNo4;
cvcNo = (String) param.get("cvcNo");
secureNo = (String) param.get("secureNo");
logger.info("cNo1:" + cNo1 + ",decodeCardNo2:" + decodeCardNo2 + ",decodeCardNo3:" + decodeCardNo3 + ",cNo4:" + cNo4);
logger.info("decodeInfo[ cardNo2:" + decodeCardNo2 + ",cardNo3:" + decodeCardNo3 + ",cvcNo:" + cvcNo + ",secureNo:" + secureNo + "]");
/* 22.08.08 서주희 - 웹접근성 작업(기능제거)
* 22.08.29 서주희 - 웹접근성 작업(기능 복구)
* 23.07.20 김경민 - 웹접근성 작업(가상 키패드 제거)
String cNo1 = (String) param.get("cardNo1");
String cNo4 = (String) param.get("cardNo4");
String decodeCardNo2 = TransKey.withoutSessionDecode(param.get("cardNo2_transkeyID").toString()
, param.get("initTime").toString()
, "numberMobile"
, param.get("cardNo2_transkey_keyIndex").toString()
, param.get("cardNo2_transkey_fieldType").toString()
, param.get("seedKey").toString()
, param.get("cardNo2_transkey").toString()
, param.get("cardNo2_transkey_HM").toString()
, null);
String decodeCardNo3 = TransKey.withoutSessionDecode(param.get("cardNo3_transkeyID").toString()
, param.get("initTime").toString()
, "numberMobile"
, param.get("cardNo3_transkey_keyIndex").toString()
, param.get("cardNo3_transkey_fieldType").toString()
, param.get("seedKey").toString()
, param.get("cardNo3_transkey").toString()
, param.get("cardNo3_transkey_HM").toString()
, null);
String cardNo = cNo1 + decodeCardNo2 + decodeCardNo3 + cNo4;
String decodeCvcNo = TransKey.withoutSessionDecode(param.get("cardNo2_transkeyID").toString()
, param.get("initTime").toString()
, "numberMobile"
, param.get("cvcNo_transkey_keyIndex").toString()
, param.get("cvcNo_transkey_fieldType").toString()
, param.get("seedKey").toString()
, param.get("cvcNo_transkey").toString()
, param.get("cvcNo_transkey_HM").toString()
, null);
String decodeSecureNo = TransKey.withoutSessionDecode(param.get("secureNo_transkeyID").toString()
, param.get("initTime").toString()
, "numberMobile"
, param.get("secureNo_transkey_keyIndex").toString()
, param.get("secureNo_transkey_fieldType").toString()
, param.get("seedKey").toString()
, param.get("secureNo_transkey").toString()
, param.get("secureNo_transkey_HM").toString()
, null);
secureNo = decodeSecureNo;
cvcNo = decodeCvcNo;
logger.info("decodeInfo[ cardNo2:" + decodeCardNo2 + ",cardNo3:" + decodeCardNo3 + ",cvcNo:" + decodeCvcNo + ",secureNo:" + decodeSecureNo + "]");
*/
mBerCi = (String) param.get("mberCi");
List<LinkedHashMap> carList = (ArrayList) param.get("cars");
LinkedHashMap carInfo = carList.get(0);
//for (LinkedHashMap carInfo : carList) {
logger.info("registedCarInfo: " + carInfo);
vhcleNo = (String) carInfo.get("vhcleNo");
vhcleManageNo = (String) carInfo.get("vhcleManageNo");
mberNo = (String) param.get("mberNo");
//cardNo = (String) param.get("cardNo");
logger.info("[" + cardNo + "]");
logger.info("cNo1:" + cNo1 + ",decodeCardNo2:" + decodeCardNo2 + ",decodeCardNo3:" + decodeCardNo3 + ",cNo4:" + cNo4);
if (cardNo.length() == 14) {
cardNo1 = cardNo.substring(0, 2);
cardNo2 = cardNo.substring(2, 6);
cardNo3 = cardNo.substring(6, 10);
cardNo4 = cardNo.substring(10, 14);
} else if (cardNo.length() == 15) {
cardNo1 = cardNo.substring(0, 3);
cardNo2 = cardNo.substring(3, 7);
cardNo3 = cardNo.substring(7, 11);
cardNo4 = cardNo.substring(11, 15);
} else {
cardNo1 = cardNo.substring(0, 4);
cardNo2 = cardNo.substring(4, 8);
cardNo3 = cardNo.substring(8, 12);
cardNo4 = cardNo.substring(12, 16);
}
logger.info("cardNo1:" + cardNo1 + ",cardNo2:" + cardNo2 + ",cardNo3:" + cardNo3 + ",cardNo4:" + cardNo4);
expireDay = (String) param.get("expireDay");
//secureNo = (String) param.get("secureNo");
//cvcNo = (String) param.get("cvcNo");
niNo = (String) param.get("niNo");
carrier = (String) param.get("phoneCarrier");
phoneNo = (String) param.get("phoneNo");
isForeigner = (String) param.get("isForeigner");
stcmpNo = (String) param.get("stcmpNo");
setleMnKnd = (String) param.get("setleMnKnd");
setleMnMno = (String) param.get("setleMnMno");
ccmpCode = (String) param.get("ccmpCode");
Map seedEncrypt = cardSeedEncrypt(terminalId, tranSerialNo, cardNo1, cardNo2
, cardNo3
, cardNo4, expireDay, secureNo, cvcNo, niNo, carrier, phoneNo
, isForeigner, vhcleNo
, pbszUserKey);
logger.info("seedEncrypt::" + seedEncrypt);
String trackData = (String) seedEncrypt.get("trackData");
String authInfo = (String) seedEncrypt.get("authInfo");
String custInfo = (String) seedEncrypt.get("custInfo");
String encryptNoData = SHA256Util.encryptSHA256(cardNo);
Map reqData = new LinkedHashMap();
reqData.put("insttNo", "BRSMC0100001");
reqData.put("insttCntcJobSe", "001");
reqData.put("mberNo", mberNo);
reqData.put("vhcleManageNo", vhcleManageNo);
reqData.put("stcmpNo", stcmpNo);
reqData.put("setleMnKnd", setleMnKnd);
reqData.put("setleMnMno", setleMnMno);
reqData.put("ccmpCode", ccmpCode);
reqData.put("requstDt", now);
reqData.put("tranSerialNo", tranSerialNo);
reqData.put("cardInfo", trackData);
reqData.put("authInfo", authInfo);
reqData.put("custInfo", custInfo);
reqData.put("mberCi", mBerCi);
reqData.put("vhcleNo", vhcleNo);
reqData.put("priorOrdr", priorOrdr);
reqData.put("registSe", "03");
logger.info("reqData::" + reqData);
result = requestPreRegistPayment(url, reqData);
logger.info("result::" + result);
/*if(result.get("rspnsCode").equals("0000")){
resultLlist.add(result);
}*/
//}
} catch (RuntimeException re) {
logger.error("[RuntimeException::" + "" + "]", re);
logger.error("registPayment :[" + param + "]");
result.put("rspnsResult", "E");
result.put("rspnsCode", "9998");
result.put("rspnsMssage", "잘못된 정보가 입력되었습니다. 다시 확인 후 입력바랍니다.");
} catch (Exception e) {
logger.error("[process error::" + "" + "]", e);
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "연결 오류가 발생하였습니다.");
}
return result;
}
public Map registTMPayment(Map param, HttpServletRequest request) {
Map result = new HashMap();
try {
String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpRegist");
String terminalId = env.getProperty("Globals.PreRegistPayment.TerminalId");
String pbszUserKey = env.getProperty("Globals.PreRegistPayment.UserKey");
String tranSerialNo = paymentMapper.getTranSerialNo();
String priorOrdr = "1";
String mBerCi;
String vhcleNo = "";
String mberNo;
String vhcleManageNo = "";
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
String secureNo = "";
String niNo = "";
String stcmpNo;
String setleMnKnd;
String setleMnMno;
String ccmpCode;
String ccmpKnd;
String decodeSecureNo = "";
mBerCi = (String) param.get("mberCi");
List<LinkedHashMap> carList = (ArrayList) param.get("cars");
LinkedHashMap carInfo = carList.get(0);
//for (LinkedHashMap carInfo : carList) {
logger.info("registedCarInfo: " + carInfo);
vhcleNo = (String) carInfo.get("vhcleNo");
vhcleManageNo = (String) carInfo.get("vhcleManageNo");
mberNo = (String) param.get("mberNo");
stcmpNo = (String) param.get("stcmpNo");
setleMnKnd = (String) param.get("setleMnKnd");
setleMnMno = (String) param.get("setleMnMno");
ccmpCode = (String) param.get("ccmpCode");
ccmpKnd = (String) param.get("ccmpKnd");
if("TP".equals(ccmpKnd)){
niNo = (String) param.get("niNo");
/*secureNo = (String) param.get("secureNo");
22.08.08 서주희 - 웹접근성 작업(기능제거)
* 22.08.29 서주희 - 웹접근성 작업(기능 복구)
* 23.07.20 김경민 - 웹접근성 작업(가상 키패드 제거)
*/
decodeSecureNo = TransKey.withoutSessionDecode(param.get("secureNo_transkeyID").toString()
, param.get("initTime").toString()
, "numberMobile"
, param.get("secureNo_transkey_keyIndex").toString()
, param.get("secureNo_transkey_fieldType").toString()
, param.get("seedKey").toString()
, param.get("secureNo_transkey").toString()
, param.get("secureNo_transkey_HM").toString()
, null);
secureNo = decodeSecureNo;
logger.info("decodeInfo[ secureNo:" + decodeSecureNo + "]");
}
Map seedEncrypt = tMoneySeedEncrypt(terminalId, tranSerialNo, mberNo, ccmpKnd
, secureNo, niNo, vhcleNo, pbszUserKey);
logger.info("seedEncrypt::" + seedEncrypt);
String trackData = (String) seedEncrypt.get("trackData");
String authInfo = "";
if("TP".equals(ccmpKnd)){
authInfo = (String) seedEncrypt.get("authInfo");
}else if("TB".equals(ccmpKnd)){
authInfo = (String) param.get("authInfo");
}
String custInfo = "NO_DATA";
Map reqData = new LinkedHashMap();
reqData.put("insttNo", "BRSMC0100001");
reqData.put("insttCntcJobSe", "001");
reqData.put("mberNo", mberNo);
reqData.put("vhcleManageNo", vhcleManageNo);
reqData.put("stcmpNo", stcmpNo);
reqData.put("setleMnKnd", setleMnKnd);
reqData.put("setleMnMno", setleMnMno);
reqData.put("ccmpCode", ccmpCode);
reqData.put("requstDt", now);
reqData.put("tranSerialNo", tranSerialNo);
reqData.put("cardInfo", trackData);
reqData.put("authInfo", authInfo);
reqData.put("custInfo", custInfo);
reqData.put("mberCi", mBerCi);
reqData.put("vhcleNo", vhcleNo);
reqData.put("priorOrdr", priorOrdr);
reqData.put("registSe", "03");
reqData.put("ccmpKnd", ccmpKnd);
logger.info("reqData::" + reqData);
result = requestPreRegistPayment(url, reqData);
logger.info("result::" + result);
} catch (RuntimeException re) {
logger.error("[RuntimeException::" + "" + "]", re);
logger.error("registPayment :[" + param + "]");
result.put("rspnsResult", "E");
result.put("rspnsCode", "9998");
result.put("rspnsMssage", "잘못된 정보가 입력되었습니다. 다시 확인 후 입력바랍니다.");
} catch (Exception e) {
logger.error("[process error::" + "" + "]", e);
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "연결 오류가 발생하였습니다.");
}
return result;
}
/**
* Terminate payment map.
*
* @param param the param
* @return the map
*/
public Map terminatePayment(Map param) {
Map result;
String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpTerminate");
String mberNo = (String) param.get("mberNo");
logger.info("terminatePayment mberNo -> " + mberNo);
List<LinkedHashMap> carList = (ArrayList) param.get("cars");
logger.info("carList -> " + carList);
//LinkedHashMap carInfo = carList.get(0);
Map carInfo = carList.get(0);
logger.info("carInfo -> " + carInfo);
//LinkedHashMap payInfo = (LinkedHashMap)param.get("pay");
Map payInfo = (Map) param.get("pay");
logger.info("payInfo -> " + payInfo);
String vhcleManageNo = (String) carInfo.get("VHCLE_MANAGE_NO");
String vkeyIssuSeqNo = (String) payInfo.get("VKEY_ISSU_SEQ_NO");
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
String stcmpNo = (String) payInfo.get("STCMP_NO");
String setleMnKnd = (String) payInfo.get("SETLE_MN_KND");
String setleMnMno = (String) payInfo.get("SETLE_MN_MNO");
Map reqData = new LinkedHashMap();
reqData.put("insttNo", "BRSMC0100001");
reqData.put("insttCntcJobSe", "002");
reqData.put("vhcleManageNo", vhcleManageNo);
reqData.put("mberNo", mberNo);
reqData.put("stcmpNo", stcmpNo);
reqData.put("setleMnKnd", setleMnKnd);
reqData.put("setleMnMno", setleMnMno);
reqData.put("requstDt", now);
reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo);
logger.info("reqData::" + reqData);
result = requestPreRegistPayment(url, reqData);
logger.info("result::" + result);
return result;
}
public List completePayment(Map param) {
List resultLlist = new ArrayList();
Map result;
String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpComplete");
String mberNo = (String) param.get("mberNo");
List<LinkedHashMap> pays = (ArrayList) param.get("credits");
for (LinkedHashMap payInfo : pays) {
String vkeyIssuSeqNo = (String) payInfo.get("vkeyIssuSeqNo");
String priorOrdr = (String) payInfo.get("priorOrdr");
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
Map reqData = new LinkedHashMap();
reqData.put("insttNo", "BRSMC0100001");
reqData.put("insttCntcJobSe", "008");
reqData.put("mberNo", mberNo);
reqData.put("vkeyIssuSeqNo", vkeyIssuSeqNo);
reqData.put("requstDt", now);
reqData.put("priorOrdr", priorOrdr);
reqData.put("registSe", "00");
logger.info("reqData::" + reqData);
result = requestPreRegistPayment(url, reqData);
logger.info("result::" + result);
if (result.get("rspnsCode").equals("0000")) {
resultLlist.add(result);
}
}
return resultLlist;
}
public Map approvalPayment(Map param) {
Map result;
String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpApproval");
String insttDelngNo = (String) param.get("insttDelngNo");
String vhcleNo = (String) param.get("vhcleNo");
String vhcleTy = (String) param.get("vhcleTy");
String vhcleOwnerCi = (String) param.get("vhcleOwnerCi");
String requstAmount = param.get("requstAmount").toString();
String occrrncDate = (String) param.get("occrrncDate");
String occrrncTime = (String) param.get("occrrncTime");
String insttChrgeDetail = (String) param.get("insttChrgeDetail");
String insttDetailCode = (String) param.get("insttDetailCode");
String insttDetailNm = (String) param.get("insttDetailNm");
String pasngSeCode = (String) param.get("pasngSeCode");
String ffnlgTaxitm = (String) param.get("ffnlgTaxitm");
String passivePaymentAt = (String) param.get("passivePaymentAt");
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
Map reqData = new LinkedHashMap();
reqData.put("insttNo", param.get("insttNo"));
reqData.put("insttCntcJobSe", "003");
reqData.put("vhcleNo", vhcleNo);
reqData.put("vhcleTy", vhcleTy);
reqData.put("vhcleOwnerCi", vhcleOwnerCi);
reqData.put("insttDelngNo", insttDelngNo);
reqData.put("requstDt", now);
reqData.put("requstAmount", requstAmount);
reqData.put("occrrncDate", occrrncDate);
reqData.put("occrrncTime", occrrncTime);
reqData.put("insttChrgeDetail", insttChrgeDetail);
reqData.put("insttDetailCode", insttDetailCode);
reqData.put("insttDetailNm", insttDetailNm);
reqData.put("pasngSeCode", pasngSeCode);
reqData.put("ffnlgTaxitm", ffnlgTaxitm);
reqData.put("passivePaymentAt", passivePaymentAt);
logger.info("reqData::" + reqData);
result = requestPreRegistPayment(url, reqData);
logger.info("result::" + result);
return result;
}
public Map approvalReservePayment(Map param) {
Map result;
String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpApprovalResve");
String insttDelngNo = (String) param.get("insttDelngNo");
String vhcleNo = (String) param.get("vhcleNo");
String vhcleTy = (String) param.get("vhcleTy");
String vhcleOwnerCi = (String) param.get("vhcleOwnerCi");
String requstAmount = (String) param.get("requstAmount");
String occrrncDate = (String) param.get("occrrncDate");
String occrrncTime = (String) param.get("occrrncTime");
String insttChrgeDetail = (String) param.get("insttChrgeDetail");
String insttDetailCode = (String) param.get("insttDetailCode");
String insttDetailNm = (String) param.get("insttDetailNm");
String pasngSeCode = (String) param.get("pasngSeCode");
String ffnlgTaxitm = (String) param.get("ffnlgTaxitm");
String reserveDate = (String) param.get("reserveDate");
String passivePaymentAt = (String) param.get("passivePaymentAt");
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
Map reqData = new LinkedHashMap();
reqData.put("insttNo", param.get("insttNo"));
reqData.put("insttCntcJobSe", "003");
reqData.put("vhcleNo", vhcleNo);
reqData.put("vhcleTy", vhcleTy);
reqData.put("vhcleOwnerCi", vhcleOwnerCi);
reqData.put("insttDelngNo", insttDelngNo);
reqData.put("requstDt", now);
reqData.put("requstAmount", requstAmount);
reqData.put("occrrncDate", occrrncDate);
reqData.put("occrrncTime", occrrncTime);
reqData.put("insttChrgeDetail", insttChrgeDetail);
reqData.put("insttDetailCode", insttDetailCode);
reqData.put("insttDetailNm", insttDetailNm);
reqData.put("pasngSeCode", pasngSeCode);
reqData.put("ffnlgTaxitm", ffnlgTaxitm);
reqData.put("passivePaymentAt", passivePaymentAt);
reqData.put("reserveDate", reserveDate);
logger.info("reqData::" + reqData);
result = requestPreRegistPayment(url, reqData);
logger.info("result::" + result);
return result;
}
public Map approvalResult(Map param) {
Map result;
String url = env.getProperty("Globals.SmartPlatform.Url") + env.getProperty("Globals.SmartPlatform.prpApprovalResult");
String vhcleNo = (String) param.get("vhcleNo");
String vhcleOwnerCi = (String) param.get("vhcleOwnerCi");
String brsNo = (String) param.get("brsNo");
String insttNo = (String) param.get("insttNo");
String insttDelngNo = (String) param.get("insttDelngNo");
String delngDate = (String) param.get("delngDate");
String delngTime = (String) param.get("delngTime");
String stcmpNm = (String) param.get("stcmpNm");
String mrhstNo = (String) param.get("mrhstNo");
String ffnlgTaxitm = (String) param.get("ffnlgTaxitm");
String requstAmount = (String) param.get("requstAmount");
String dscntRt = (String) param.get("dscntRt");
String dscntAmount = (String) param.get("dscntAmount");
String setleAmount = (String) param.get("setleAmount");
String feeRt = (String) param.get("feeRt");
String fee = (String) param.get("fee");
String stcmpDelngNo = (String) param.get("stcmpDelngNo");
String ccmpCode = (String) param.get("ccmpCode");
String ccmpNm = (String) param.get("ccmpNm");
String cardNo = (String) param.get("cardNo");
String confmNo = (String) param.get("confmNo");
String confmDt = (String) param.get("confmDt");
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
Map reqData = new LinkedHashMap();
reqData.put("insttNo", "BRSMC0000002");
reqData.put("insttCntcJobSe", "003");
reqData.put("vhcleNo", vhcleNo);
reqData.put("brsNo", brsNo);
reqData.put("vhcleOwnerCi", vhcleOwnerCi);
reqData.put("insttDelngNo", insttDelngNo);
reqData.put("requstDt", now);
reqData.put("requstAmount", requstAmount);
reqData.put("delngDate", delngDate);
reqData.put("delngTime", delngTime);
reqData.put("stcmpNm", stcmpNm);
reqData.put("mrhstNo", mrhstNo);
reqData.put("dscntRt", dscntRt);
reqData.put("dscntAmount", dscntAmount);
reqData.put("setleAmount", setleAmount);
reqData.put("feeRt", feeRt);
reqData.put("fee", fee);
reqData.put("stcmpDelngNo", stcmpDelngNo);
reqData.put("ccmpCode", ccmpCode);
reqData.put("ccmpNm", ccmpNm);
reqData.put("cardNo", cardNo);
reqData.put("confmNo", confmNo);
reqData.put("confmDt", confmDt);
reqData.put("ffnlgTaxitm", ffnlgTaxitm);
logger.info("reqData::" + reqData);
result = requestPreRegistPayment(url, reqData);
logger.info("result::" + result);
return result;
}
public Map requestPreRegistPayment(String requestURL,
//Map param
Map reqData
) {
Map result = new HashMap();
//CloseableHttpClient client = HttpClients.createDefault();
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(10000)
.setConnectTimeout(10000)
.setConnectionRequestTimeout(10000)
.setStaleConnectionCheckEnabled(true)
.build();
CloseableHttpClient client = HttpClients.custom()
.setDefaultRequestConfig(defaultRequestConfig)
.build();
try {
String token = env.getProperty("Globals.SmartPlatform.token");
HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성
postRequest.setHeader("Accept", "application/json");
postRequest.setHeader("BROKER_TOKEN", token);
List<NameValuePair> pairs = new ArrayList<>();
Iterator<String> keys = reqData.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
pairs.add(new BasicNameValuePair(key, (String) reqData.get(key)));
}
postRequest.setEntity(new UrlEncodedFormEntity(pairs, "UTF-8"));
HttpResponse response = client.execute(postRequest);
//Response 출력
if (response.getStatusLine().getStatusCode() == 200) {
ResponseHandler<String> handler = new BasicResponseHandler();
String body = handler.handleResponse(response);
JSONParser parser = new JSONParser();
Object obj = parser.parse(body);
JSONObject jsonObj = (JSONObject) obj;
JSONObject data = (JSONObject) jsonObj.get("data");
logger.info("body::" + jsonObj.toJSONString());
if (jsonObj.get("result").equals("SUCCESS")) {
if (data.get("rspnsCode").equals("0000")) {
result.put("rspnsResult", "S");
result.put("ccmpNm", data.get("ccmpNm"));
result.put("vkeyPblNo", data.get("vkeyPblNo"));
result.put("vkeyIssuSeqNo", data.get("vkeyIssuSeqNo"));
result.put("mberNo", data.get("mberNo"));
result.put("vkeyInfoSttus", data.get("vkeyInfoSttus"));
} else {
result.put("rspnsResult", "E");
}
result.put("rspnsCode", data.get("rspnsCode"));
result.put("rspnsMssage", data.get("rspnsMssage"));
} else {
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", jsonObj.get("resultMessage"));
}
} else {
logger.error("response is error : " + response.getStatusLine().getStatusCode());
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "response is error");
}
} catch (RuntimeException re) {
logger.error("[RuntimeException::" + "" + "]", re);
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "시스템 오류가 발생하였습니다.");
} catch (Exception e) {
logger.error("errorMessage::" + "", e);
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "연결 오류가 발생하였습니다.");
} finally {
try {
client.close();
} catch (IOException io) {
logger.error("[process error::" + "" + "]", io);
}
}
return result;
}
public Map cardSeedEncrypt(
String terminalId, String tranSerialNo, String cardNo1, String cardNo2, String cardNo3, String cardNo4
, String expireDay, String secureNo, String cvcNo, String niNo, String phoneCarrier, String phoneNo
, String isForeigner, String carNo, String userKey) {
byte[] pbszUserKey = hexStringToByteArray(userKey);
Map result = new HashMap();
String errLine = "";
logger.info("cardNo1:" + cardNo1 + ",cardNo2:" + cardNo2 + ",cardNo3:" + cardNo3 + ",cardNo4:" + cardNo4);
terminalId = terminalId.substring(terminalId.length() - 8, terminalId.length());
errLine = "1";
String cardBackNo = cardNo2 + cardNo3 + cardNo4;
cvcNo = padRightSpace(cvcNo, 4);
errLine = "2";
phoneNo = padRightSpace(phoneNo, 12);
errLine = "3";
carNo = carNo.substring(carNo.length() - 4, carNo.length());
errLine = "4";
byte[] fByte = new byte[3];
fByte[0] = (byte) 0xFF;
fByte[1] = (byte) 0xFF;
fByte[2] = (byte) 0xFF;
ByteArrayOutputStream sourceData1 = new ByteArrayOutputStream();
ByteArrayOutputStream bData1 = new ByteArrayOutputStream();
ByteArrayOutputStream sourceData2 = new ByteArrayOutputStream();
ByteArrayOutputStream bData2 = new ByteArrayOutputStream();
ByteArrayOutputStream sourceData3 = new ByteArrayOutputStream();
ByteArrayOutputStream bData3 = new ByteArrayOutputStream();
try {
sourceData1.write(cardBackNo.getBytes());
errLine = "5";
sourceData1.write(expireDay.getBytes());
errLine = "6";
byte sourceDataByte1[] = sourceData1.toByteArray();
bData1.write(terminalId.getBytes());
bData1.write(tranSerialNo.getBytes());
errLine = "7";
byte bDataByte1[] = bData1.toByteArray();
errLine = "8";
byte[] seedCbcEncryptData1 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceDataByte1, bDataByte1, 0, 16);
errLine = "9";
String hexString = byteArrayToHexString(seedCbcEncryptData1, 0, 32);
errLine = "10";
String trackData = cardNo1 + hexString;
result.put("trackData", trackData);
/*print_hex("sourceDataByte1", sourceDataByte1, 16);
print_hex("bDataByte", bDataByte1, 16);
print_hex("seedCbcEncryptData1", seedCbcEncryptData1, 16);*/
logger.info("hexString::" + hexString);
logger.info("trackData::" + trackData);
sourceData2.write(secureNo.getBytes());
sourceData2.write(niNo.getBytes());
sourceData2.write(cvcNo.getBytes());
sourceData2.write(fByte);
byte sourceData2Byte[] = sourceData2.toByteArray();
bData2.write(carNo.getBytes());
bData2.write(cardBackNo.getBytes());
byte bData2Byte[] = bData2.toByteArray();
byte[] seedCbcEncryptData2 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceData2Byte, bData2Byte, 0, 16);
String hexString2 = byteArrayToHexString(seedCbcEncryptData2, 0, 32);
result.put("authInfo", hexString2);
/*print_hex("sourceData2Byte", sourceData2Byte, 16);
print_hex("bData2", bData2Byte, 16);
print_hex("authDataSeedEncrypt", seedCbcEncryptData2, 16);*/
logger.info("hexString2::" + hexString2);
sourceData3.write(phoneCarrier.getBytes());
sourceData3.write(phoneNo.getBytes());
sourceData3.write(fByte);
byte sourceData3Byte[] = sourceData3.toByteArray();
bData3.write(carNo.getBytes());
bData3.write(cardBackNo.getBytes());
byte bData3Byte[] = bData3.toByteArray();
byte[] seedCbcEncryptData3 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceData3Byte, bData3Byte, 0, 16);
String hexText3 = byteArrayToHexString(seedCbcEncryptData3, 0, 32);
String custInfo = isForeigner + hexText3;
result.put("custInfo", custInfo);
/*print_hex("sourceData3Byte", sourceData3Byte, 16);
print_hex("bData3Byte", bData3Byte, 16);
print_hex("authDataSeedEncrypt", seedCbcEncryptData3, 16);*/
logger.info("hexText3::" + hexText3);
logger.info("custInfo::" + custInfo);
result.put("rsMsg", "success");
result.put("rsCd", "01");
} catch (RuntimeException re) {
logger.error("[RuntimeException::" + "" + "]", re);
result.put("rsMsg", "시스템 처리 오류");
result.put("rsCd", "02");
if("".equals(errLine)){
logger.info(errLine+":cardS:terminalId::" + terminalId);
}else if("1".equals(errLine)){
logger.info(errLine+":cardS:cvcNo::" + cvcNo);
}else if("2".equals(errLine)){
logger.info(errLine+":cardS:phoneNo::" + phoneNo);
}else if("3".equals(errLine)){
logger.info(errLine+":cardS:carNo::" + carNo);
}else if("4".equals(errLine)){
logger.info(errLine+":cardS:cardBackNo::" + cardBackNo);
}else if("5".equals(errLine)){
logger.info(errLine+":cardS:expireDay::" + expireDay);
}else if("6".equals(errLine)){
logger.info(errLine+":cardS:tranSerialNo::" + tranSerialNo);
}else if("7".equals(errLine)){
logger.info(errLine+":cardS:bData1::" + bData1);
}else if("8".equals(errLine)){
logger.info(errLine+":cardS:pbszUserKey::" + pbszUserKey);
}else if("9".equals(errLine)){
logger.info(errLine+":cardS:");
}else if("10".equals(errLine)){
logger.info(errLine+":cardS:");
}
} catch (IOException re) {
logger.error("[IOException::" + "" + "]", re);
result.put("rsMsg", "시스템 스트림처리 오류");
result.put("rsCd", "02");
} catch (Exception e) {
logger.error("[process error::" + "" + "]", e);
result.put("rsMsg", "시스템 오류");
result.put("rsCd", "02");
} finally {
try {
if (sourceData1 != null) sourceData1.close();
if (bData1 != null) bData1.close();
if (sourceData2 != null) sourceData2.close();
if (bData2 != null) bData2.close();
if (sourceData3 != null) sourceData3.close();
if (bData3 != null) bData3.close();
} catch (IOException io) {
logger.error("[process error::" + "" + "]", io);
}
}
return result;
}
public Map tMoneySeedEncrypt(
String terminalId, String tranSerialNo, String mberNo, String ccmpKnd
, String secureNo, String niNo, String carNo, String userKey) {
byte[] pbszUserKey = hexStringToByteArray(userKey);
Map result = new HashMap();
terminalId = terminalId.substring(terminalId.length() - 8, terminalId.length());
String cardBackNo = "";
String expireDay = "";
carNo = carNo.substring(carNo.length() - 4, carNo.length());
String mberNo1 = mberNo.substring(0, mberNo.length() - 16);
String mberNoSub = mberNo.substring(mberNo.length() - 12, mberNo.length());
mberNo = mberNo.substring(mberNo.length() - 16, mberNo.length());
byte[] fByte = new byte[3];
fByte[0] = (byte) 0xFF;
fByte[1] = (byte) 0xFF;
fByte[2] = (byte) 0xFF;
ByteArrayOutputStream sourceData1 = new ByteArrayOutputStream();
ByteArrayOutputStream bData1 = new ByteArrayOutputStream();
ByteArrayOutputStream sourceData2 = new ByteArrayOutputStream();
ByteArrayOutputStream bData2 = new ByteArrayOutputStream();
try {
sourceData1.write(mberNo.getBytes());
byte sourceDataByte1[] = sourceData1.toByteArray();
bData1.write(terminalId.getBytes());
bData1.write(tranSerialNo.getBytes());
byte bDataByte1[] = bData1.toByteArray();
byte[] seedCbcEncryptData1 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceDataByte1, bDataByte1, 0, 16);
String hexString = byteArrayToHexString(seedCbcEncryptData1, 0, 32);
String trackData = mberNo1+hexString;
result.put("trackData", trackData);
logger.info("trackData::" + trackData);
if("TP".equals(ccmpKnd)){
sourceData2.write(secureNo.getBytes());
sourceData2.write(niNo.getBytes());
sourceData2.write(fByte);
byte sourceData2Byte[] = sourceData2.toByteArray();
bData2.write(carNo.getBytes());
bData2.write(mberNoSub.getBytes());
byte bData2Byte[] = bData2.toByteArray();
byte[] seedCbcEncryptData2 = KISA_SEED_CBC.SEED_CBC_Encrypt(pbszUserKey, sourceData2Byte, bData2Byte, 0, 16);
String hexString2 = byteArrayToHexString(seedCbcEncryptData2, 0, 32);
result.put("authInfo", hexString2);
logger.info("hexString2::" + hexString2);
}
result.put("rsMsg", "success");
result.put("rsCd", "01");
} catch (RuntimeException re) {
logger.error("[RuntimeException::" + "" + "]", re);
result.put("rsMsg", "시스템 처리 오류");
result.put("rsCd", "02");
} catch (IOException re) {
logger.error("[IOException::" + "" + "]", re);
result.put("rsMsg", "시스템 스트림처리 오류");
result.put("rsCd", "02");
} catch (Exception e) {
logger.error("[process error::" + "" + "]", e);
result.put("rsMsg", "시스템 오류");
result.put("rsCd", "02");
} finally {
try {
if (sourceData1 != null) sourceData1.close();
if (bData1 != null) bData1.close();
if (sourceData2 != null) sourceData2.close();
if (bData2 != null) bData2.close();
} catch (IOException io) {
logger.error("[process error::" + "" + "]", io);
}
}
return result;
}
private byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}
private String byteArrayToHexString(byte[] bytes, int offset, int length) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b & 0xff));
}
return sb.toString().substring(offset, length);
}
private String padRightSpace(String str, int num) {
return String.format("%1$-" + num + "s", str).replace(' ', ' ');
}
private String padLeftSpace(String inputString, int length) {
if (inputString.length() >= length) {
return inputString;
}
StringBuilder sb = new StringBuilder();
while (sb.length() < length - inputString.length()) {
sb.append(' ');
}
sb.append(inputString);
return sb.toString();
}
private void print_hex(String valName, byte[] data, int dataLen) {
int i = 0;
//System.out.printf("%s [%dbyte] :", valName, dataLen);
for (i = 0; i < dataLen; i++) {
if ((i & 0x0F) == 0)
logger.info("");
//System.out.printf(" %02X", data[i]);
}
logger.info("");
}
public List<Map> getPaymentMngCd() {
return paymentMapper.getPaymentMngCd();
}
public List<Map> getPaymentCd(Map params) {
return paymentMapper.getPaymentCd(params);
}
public Map getPaymentInfo(String userNo) {
return paymentMapper.getPaymentInfo(userNo);
}
public Map checkNormalAcctNo(Map param) {
Map result;
String url = env.getProperty("Globals.PreRegistPayment.acctnmRcms");
String secrKey = env.getProperty("Globals.PreRegistPayment.secrKey");
String key = env.getProperty("Globals.PreRegistPayment.key");
String trscSeqNo = paymentMapper.getTrscSeqNo();
String bankCd = (String) param.get("bankCd");
String searchAcctNo = (String) param.get("acctNo");
String niNo1 = (String) param.get("niNo1");
JSONObject jsonData = new JSONObject();
jsonData.put("SECR_KEY", secrKey);
jsonData.put("KEY", key);
JSONArray reqDatas = new JSONArray();
JSONObject reqData = new JSONObject();
reqData.put("BANK_CD", bankCd);
reqData.put("SEARCH_ACCT_NO", searchAcctNo);
reqData.put("ACNM_NO", niNo1);
reqData.put("ICHE_AMT", "0");
reqData.put("TRSC_SEQ_NO", trscSeqNo);
reqDatas.add(reqData);
jsonData.put("REQ_DATA", reqDatas);
logger.info("jsonData::" + jsonData);
result = requestAcctNmRcms(url, jsonData);
String now = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
result.put("reqDt", now);
result.put("TRSC_SEQ_NO", trscSeqNo);
result.put("BANK_CD", bankCd);
result.put("BANK_NM", param.get("bankNm"));
result.put("ACNUT_NO", searchAcctNo);
result.put("BSNM_REGIST_NO", param.get("bsnmRegistNo"));
result.put("NI_NO1", niNo1);
if (result.get("ACCT_NM") != null) {
result.put("ACCT_NM", result.get("ACCT_NM"));
}
result.put("rspnsCode", result.get("rspnsCode"));
result.put("rspnsMssage", result.get("rspnsMssage"));
logger.info("result::" + result);
return result;
}
public Map requestAcctNmRcms(String requestURL,
//Map param
JSONObject jsonData
) {
Map result = new HashMap();
try {
//CloseableHttpClient client = HttpClients.createDefault();
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(10000)
.setConnectTimeout(10000)
.setConnectionRequestTimeout(10000)
.setStaleConnectionCheckEnabled(true)
.build();
CloseableHttpClient client = HttpClients.custom()
.setDefaultRequestConfig(defaultRequestConfig)
.build();
try {
HttpPost postRequest = new HttpPost(requestURL); //POST 메소드 URL 새성
postRequest.setHeader("Accept", "application/json");
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("JSONData", jsonData.toString()));
postRequest.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = client.execute(postRequest);
//Response 출력
if (response.getStatusLine().getStatusCode() == 200) {
ResponseHandler<String> handler = new BasicResponseHandler();
String body = handler.handleResponse(response);
body = body.replaceAll("\r\n", "");
body = body.replaceAll("\r", "");
body = body.replaceAll("\n", "");
JSONParser parser = new JSONParser();
Object obj = parser.parse(body.trim());
JSONObject jsonObj = (JSONObject) obj;
JSONArray data = (JSONArray) jsonObj.get("RESP_DATA");
logger.info(body.trim());
if (jsonObj.get("RSLT_CD").equals("000")) {
JSONObject respData = (JSONObject) data.get(0);
result.put("ACCT_NM", respData.get("ACCT_NM"));
result.put("TRSC_SEQ_NO", respData.get("TRSC_SEQ_NO"));
result.put("rspnsCode", jsonObj.get("RSLT_CD"));
result.put("rspnsMssage", jsonObj.get("RSLT_MSG"));
} else {
result.put("rspnsResult", "E");
//result.put("rspnsCode", jsonObj.get("RSLT_CD"));
result.put("rspnsCode", jsonObj.get("RSLT_CD"));
result.put("rspnsMssage", jsonObj.get("RSLT_MSG"));
}
} else {
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "response is error");
}
} catch (RuntimeException re) {
logger.error("[RuntimeException::" + "" + "]", re);
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "시스템 오류가 발생하였습니다.");
} catch (Exception e) {
result.put("rspnsResult", "E");
result.put("rspnsCode", "9999");
result.put("rspnsMssage", "연결 오류가 발생하였습니다.");
} finally {
try {
client.close();
} catch (IOException io) {
logger.error("[process error::" + "" + "]", io);
}
}
} catch (RuntimeException re) {
logger.error("[RuntimeException::" + "" + "]", re);
} catch (Exception e) {
logger.error("[process error::" + "" + "]", e);
}
return result;
}
public List<Map> getBankCd(Map params) throws SQLException {
return paymentMapper.getBankCd(params);
}
public void insertAcctHist(Map acctHistData) throws SQLException {
paymentMapper.insertAcctHist(acctHistData);
}
public int insertAcctInfoComplete(List acctHistData) throws SQLException {
return paymentMapper.insertAcctInfoComplete(acctHistData);
}
}