File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
2024-08-23
2023-10-11
File name
Commit message
Commit date
package itn.com.cmm.util;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.mjo.mjocommon.MjonCommon;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.pay.service.MjonKgmVO;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.EgovUserManageService;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
import itn.let.utl.user.service.MjonNoticeSendUtil;
import mup.mcash.module.common.McashCipher.McashCipher;
@Component("kgmPayUtil")
public class KgmPayUtil {
/** KG 모빌리언스 설정 */
// CARD
@Value("#{globalSettings['Globals.pay.kgm.card.cnSvcid']}")
private String globalCnSvcid;
@Value("#{globalSettings['Globals.pay.kgm.card.payMode']}")
private String globalCnPayMode;
// BANK
@Value("#{globalSettings['Globals.pay.kgm.bank.raSvcid']}")
private String globalRaSvcid;
@Value("#{globalSettings['Globals.pay.kgm.bank.payMode']}")
private String globalRaPayMode;
// MOBILE
@Value("#{globalSettings['Globals.pay.kgm.mobile.mcSvcid']}")
private String globalMcSvcid;
@Value("#{globalSettings['Globals.pay.kgm.mobile.payMode']}")
private String globalMcPayMode;
@Resource(name = "egovPgMoidGnrService")
private EgovIdGnrService idgenPgMoid;
@Resource(name = "egovMjonCashIdGnrService")
private EgovIdGnrService idgenMjonCashId;
@Resource(name = "egovMjonPointIdGnrService")
private EgovIdGnrService idgenMjonPointId;
@Resource(name="MjonCommon")
private MjonCommon mjonCommon;
@Resource(name = "mjonPayService")
private MjonPayService mjonPayService;
@Resource(name = "userManageService")
private EgovUserManageService userManageService;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
/** 사이트 설정 */
@Resource(name = "egovSiteManagerService")
private EgovSiteManagerService egovSiteManagerService;
/** 알림전송 Util */
@Resource(name = "mjonNoticeSendUtil")
private MjonNoticeSendUtil mjonNoticeSendUtil;
@Resource(name = "mjonPayUtil")
MjonPayUtil mjonPayUtil;
public MjonKgmVO kgmCardEncode(HttpServletRequest request, String okUrl, String notiurl) {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
// Get Server Info
String kgmServerName = request.getServerName();
String kgmPath = "";
kgmPath = getKgServerPath(request);
// Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
String appr_dtm = dateFormat.format(new Date());
/*****************************************************************************************/
String CASH_GB = "CN"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가!
/*****************************************************************************************
- 필수 입력 항목
*****************************************************************************************/
String VER = "ALL_NEW"; //ALL_NEW : 버전설정 고정
String CN_SVCID = globalCnSvcid.trim(); //서비스아이디
String PAY_MODE = globalCnPayMode.trim(); //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금)
String Prdtprice = request.getParameter("Prdtprice");; //결제요청금액.
String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 )
String Siteurl = kgmServerName; //가맹점도메인
String Tradeid = CN_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //가맹점거래번호 //결제 요청 시 마다 unique한 값을 세팅해야 함.
String Okurl = kgmPath + okUrl; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp )
String Notiurl = kgmPath + notiurl; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL
/*****************************************************************************************
- 선택 입력 항목
*****************************************************************************************/
String Userid = userId; //가맹점결제자ID
String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용.
/*****************************************************************************************
- 암호화 처리 (암호화 사용 시)
Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다.
주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로
암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다.
*****************************************************************************************/
String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용
String Cryptstring = ""; //암호화 사용 시 암호화된 스트링
if ("Y".equals(Cryptyn)) {
Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl)
Okurl = McashCipher.encodeString(Okurl, Tradeid);
Failurl = McashCipher.encodeString(Failurl, Tradeid);
Notiurl = McashCipher.encodeString(Notiurl, Tradeid);
Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid);
Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid);
}
MjonKgmVO mjonKgmVO = new MjonKgmVO();
// 필수
mjonKgmVO.setCash_gb(CASH_GB);
mjonKgmVO.setRa_svcid(CN_SVCID);
mjonKgmVO.setPay_mode(PAY_MODE);
mjonKgmVO.setPrdtnm(Prdtnm);
mjonKgmVO.setSiteurl(Siteurl);
mjonKgmVO.setTradeid(Tradeid);
mjonKgmVO.setPrdtprice(Prdtprice);
mjonKgmVO.setUserid(Userid);
mjonKgmVO.setOkurl(Okurl);
mjonKgmVO.setNotiurl(Notiurl);
mjonKgmVO.setCryptstring(Cryptstring);
return mjonKgmVO;
}
public MjonPayVO kgmCardNotiUrl(HttpServletResponse response, HttpServletRequest request) {
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
/*****************************************************************************************/
MjonPayVO mjonPayVO = new MjonPayVO();
String rtnMsg = "";
String CASH_GB = request.getParameter("CASH_GB"); // 결제수단(CN)
String Svcid = request.getParameter("Svcid"); // 서비스ID
String Mobilid = request.getParameter("Mobilid"); // 모빌리언스 거래번호
String Signdate = request.getParameter("Signdate"); // 결제일자
String Tradeid = request.getParameter("Tradeid"); // 상점거래번호
String Mrchid = request.getParameter("Mrchid"); // 상점ID
String Prdtnm = request.getParameter("Prdtnm"); // 상품명
String Prdtprice = request.getParameter("Prdtprice"); // 상품가격
String Userid = request.getParameter("Userid"); // 사용자ID
String Resultcd = request.getParameter("Resultcd"); // 결과코드
String Resultmsg = request.getParameter("Resultmsg"); // 결과메세지
String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */
String Cardcode = request.getParameter("Cardcode"); /* 결제 카드코드 */
String Cardname = request.getParameter("Cardname"); /* 결제 카드사명 */
String chkValue = request.getParameter("chkValue"); /* 결과값 검증 hash데이터 */
String spayMethod = request.getParameter("Paymethod"); /* 지불방법 (간편결제 시에만 응답) */
String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - CARD MSTR : " + MSTR);
System.out.println("KG MOBILIANS NotiUrl - CARD SpayMethod : " + spayMethod);
String cpChkValue = "";
cpChkValue = "Mobilid="+ Mobilid +
"&Mrchid=null"+
"&Svcid="+ Svcid +
"&Tradeid="+ Tradeid +
"&Signdate="+ Signdate +
"&Prdtprice="+ Prdtprice;
String encChkValue = McashCipher.encodeString(cpChkValue, Tradeid);
System.out.println("KG MOBILIANS NotiUrl - CARD chkValue : " + chkValue);
System.out.println("KG MOBILIANS NotiUrl - CARD encChkValue : " + encChkValue);
System.out.println("KG MOBILIANS NotiUrl - CARD getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check
try {
// Step 1. Tid로 존재여부 체크
int tidCnt = mjonPayService.selectPayCountByTid(Tradeid);
if (tidCnt > 0) {
// 저장된 데이터 있을경우
rtnMsg = "SUCCESS";
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg2 : " + rtnMsg);
} else if (tidCnt == 0) {
// Check1. KG모빌리언스 호출아이피 체크
if (!getIsKgmServerIp(request)) {
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리");
Resultcd = "9998";
Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요.";
try {
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
// 스미싱의심 SMS 알림전송
mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요.";
mjonCommon.sendSimpleSlackMsg(msg);
}
} catch (Exception e) {
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류");
}
}
// 저장 Start
// 사용자 정보
String mberNm = "";
String moblphonNo = "";
String mberEmailAdres = "";
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(Userid);
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
if (userInfo != null) {
mberNm = userInfo.getMberNm();
moblphonNo = userInfo.getMoblphonNo();
mberEmailAdres = userInfo.getMberEmailAdres();
}
mjonPayVO.setResultCd(Resultcd);
mjonPayVO.setResultMsg(Resultmsg);
mjonPayVO.setAutoBillKey("");
mjonPayVO.setCashGb(CASH_GB);
mjonPayVO.setAutoYn("");
mjonPayVO.setCommId("");
mjonPayVO.setMobileId(Mobilid);
mjonPayVO.setMrchId(Mrchid);
mjonPayVO.setPno("");
mjonPayVO.setPrdtNm(Prdtnm);
mjonPayVO.setPrdtPrice(Prdtprice);
mjonPayVO.setSignDate(Signdate);
mjonPayVO.setSvcId(Svcid);
mjonPayVO.setTradeId(Tradeid);
mjonPayVO.setUserId(Userid);
mjonPayVO.setUserKey("");
mjonPayVO.setMcEzKey("");
// 추가정보(mj_pg)
String pgStatus = "";
if("0000".equals(Resultcd)) {
pgStatus = "1"; // 1:결제완료
}else {
pgStatus = "4"; // 4.결제오류
}
mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료
mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값]
mjonPayVO.setResultCode(Resultcd);
mjonPayVO.setResultMsg(Resultmsg);
mjonPayVO.setAmt(Prdtprice); // 결제금액
mjonPayVO.setPayMethod("BANK"); // 결제방법
mjonPayVO.setSpayMethod(""); // 간편결제 결제방법
mjonPayVO.setSpayDiv(""); // 간편결제분류
mjonPayVO.setPgCode("KGM"); //
mjonPayVO.setGoodsName(Prdtnm); //
mjonPayVO.setPhone(""); // 모바일
mjonPayVO.setMobile(""); // 모바일
mjonPayVO.setPayerEmail(Payeremail);
mjonPayVO.setTid(Tradeid); // Tid
mjonPayVO.setMid(Svcid); // Mid = Svcid
// 회원정보
mjonPayVO.setBuyerName(mberNm);
mjonPayVO.setBuyerTel(moblphonNo);
mjonPayVO.setBuyerEmail(mberEmailAdres);
mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보)
// 추가
// 상점 주문번호 결제 완료 후 생성
mjonPayVO.setMoid(idgenPgMoid.getNextStringId());
//세금 값 넣기
mjonPayVO = this.setKgmTexV2VO(mjonPayVO);
//cash 값 넣기
mjonPayVO = this.setKgmCashVO(mjonPayVO);
//point 값 넣기
mjonPayVO = this.setKgmPointVO(mjonPayVO);
rtnMsg = "SUCCESS";
}
}catch(Exception e) {
rtnMsg = "FAIL";
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg);
System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage());
}
mjonPayVO.setRtnMsg(rtnMsg);
return mjonPayVO;
}
public MjonKgmVO kgmBankEncode(HttpServletRequest request, String okUrl, String notiurl) {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
// Get Server Info
String kgmServerName = request.getServerName();
String kgmPath = "";
kgmPath = getKgServerPath(request);
// Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
String appr_dtm = dateFormat.format(new Date());
/*****************************************************************************************/
String CASH_GB = "RA"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가!
/*****************************************************************************************
- 필수 입력 항목
*****************************************************************************************/
String RA_SVCID = globalRaSvcid.trim(); //서비스아이디
String PAY_MODE = globalRaPayMode.trim(); //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금)
String Prdtprice = request.getParameter("Prdtprice");; //결제요청금액.
String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 )
String Siteurl = kgmServerName; //가맹점도메인
String Tradeid = RA_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //가맹점거래번호 //결제 요청 시 마다 unique한 값을 세팅해야 함.
String Okurl = kgmPath + okUrl; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp )
String Notiurl = kgmPath + notiurl; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL
/*****************************************************************************************
- 선택 입력 항목
*****************************************************************************************/
String Userid = userId; //가맹점결제자ID
String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용.
/*****************************************************************************************
- 암호화 처리 (암호화 사용 시)
Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다.
주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로
암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다.
*****************************************************************************************/
String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용
String Cryptstring = ""; //암호화 사용 시 암호화된 스트링
if ("Y".equals(Cryptyn)) {
Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl)
Okurl = McashCipher.encodeString(Okurl, Tradeid);
Failurl = McashCipher.encodeString(Failurl, Tradeid);
Notiurl = McashCipher.encodeString(Notiurl, Tradeid);
Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid);
Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid);
}
MjonKgmVO mjonKgmVO = new MjonKgmVO();
// 필수
mjonKgmVO.setCash_gb(CASH_GB);
mjonKgmVO.setRa_svcid(RA_SVCID);
mjonKgmVO.setPay_mode(PAY_MODE);
mjonKgmVO.setPrdtnm(Prdtnm);
mjonKgmVO.setSiteurl(Siteurl);
mjonKgmVO.setTradeid(Tradeid);
mjonKgmVO.setPrdtprice(Prdtprice);
mjonKgmVO.setUserid(Userid);
mjonKgmVO.setOkurl(Okurl);
mjonKgmVO.setNotiurl(Notiurl);
mjonKgmVO.setCryptstring(Cryptstring);
return mjonKgmVO;
}
public MjonPayVO kgmBankNotiUrl(HttpServletResponse response, HttpServletRequest request) {
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
/*****************************************************************************************/
MjonPayVO mjonPayVO = new MjonPayVO();
String rtnMsg = "";
String CASH_GB = "RA"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가!
String Svcid = request.getParameter("Svcid"); //[ 12byte 고정] 서비스ID
String Mobilid = request.getParameter("Mobilid"); //[ 15byte 이하] 모빌리언스 거래번호
String Signdate = request.getParameter("Signdate"); //[ 14byte 이하] 결제일자
String Tradeid = request.getParameter("Tradeid"); //[ 40byte 이하] 상점거래번호
String Mrchid = request.getParameter("Mrchid"); // 상점ID
String Prdtnm = request.getParameter("Prdtnm"); //[ 50byte 이하] 상품명
String Prdtprice = request.getParameter("Prdtprice"); //[ 10byte 이하] 상품가격
String Userid = request.getParameter("Userid"); //[ 20byte 이하] 사용자ID
String Resultcd = request.getParameter("Resultcd"); //[ 4byte 고정] 결과코드
String Resultmsg = request.getParameter("Resultmsg"); //[ 100byte 이하] 결과메세지
String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */
String Banknm = request.getParameter("Banknm"); /* 은행명 */
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - BANK Banknm : " + Banknm);
System.out.println("KG MOBILIANS NotiUrl - BANK getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check
try {
// Step 1. Tid로 존재여부 체크
int tidCnt = mjonPayService.selectPayCountByTid(Tradeid);
if (tidCnt > 0) {
// 저장된 데이터 있을경우
rtnMsg = "SUCCESS";
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg2 : " + rtnMsg);
} else if (tidCnt == 0) {
// Check1. KG모빌리언스 호출아이피 체크
if (!getIsKgmServerIp(request)) {
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리");
Resultcd = "9998";
Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요.";
try {
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
// 스미싱의심 SMS 알림전송
mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요.";
mjonCommon.sendSimpleSlackMsg(msg);
}
} catch (Exception e) {
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류");
}
}
// 저장 Start
// 사용자 정보
String mberNm = "";
String moblphonNo = "";
String mberEmailAdres = "";
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(Userid);
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
if (userInfo != null) {
mberNm = userInfo.getMberNm();
moblphonNo = userInfo.getMoblphonNo();
mberEmailAdres = userInfo.getMberEmailAdres();
}
mjonPayVO.setResultCd(Resultcd);
mjonPayVO.setResultMsg(Resultmsg);
mjonPayVO.setAutoBillKey("");
mjonPayVO.setCashGb(CASH_GB);
mjonPayVO.setAutoYn("");
mjonPayVO.setCommId("");
mjonPayVO.setMobileId(Mobilid);
mjonPayVO.setMrchId(Mrchid);
mjonPayVO.setPno("");
mjonPayVO.setPrdtNm(Prdtnm);
mjonPayVO.setPrdtPrice(Prdtprice);
mjonPayVO.setSignDate(Signdate);
mjonPayVO.setSvcId(Svcid);
mjonPayVO.setTradeId(Tradeid);
mjonPayVO.setUserId(Userid);
mjonPayVO.setUserKey("");
mjonPayVO.setMcEzKey("");
// 추가정보(mj_pg)
String pgStatus = "";
if("0000".equals(Resultcd)) {
pgStatus = "1"; // 1:결제완료
}else {
pgStatus = "4"; // 4.결제오류
}
mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료
mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값]
mjonPayVO.setResultCode(Resultcd);
mjonPayVO.setResultMsg(Resultmsg);
mjonPayVO.setAmt(Prdtprice); // 결제금액
mjonPayVO.setPayMethod("BANK"); // 결제방법
mjonPayVO.setSpayMethod(""); // 간편결제 결제방법
mjonPayVO.setSpayDiv(""); // 간편결제분류
mjonPayVO.setPgCode("KGM"); //
mjonPayVO.setGoodsName(Prdtnm); //
mjonPayVO.setPhone(""); // 모바일
mjonPayVO.setMobile(""); // 모바일
mjonPayVO.setPayerEmail(Payeremail);
mjonPayVO.setTid(Tradeid); // Tid
mjonPayVO.setMid(Svcid); // Mid = Svcid
// 회원정보
mjonPayVO.setBuyerName(mberNm);
mjonPayVO.setBuyerTel(moblphonNo);
mjonPayVO.setBuyerEmail(mberEmailAdres);
mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보)
// 추가
mjonPayVO.setBankName(Banknm); // 은행명
// 상점 주문번호 결제 완료 후 생성
mjonPayVO.setMoid(idgenPgMoid.getNextStringId());
//세금 값 넣기
mjonPayVO = this.setKgmTexV2VO(mjonPayVO);
//cash 값 넣기
mjonPayVO = this.setKgmCashVO(mjonPayVO);
//point 값 넣기
mjonPayVO = this.setKgmPointVO(mjonPayVO);
rtnMsg = "SUCCESS";
}
}catch(Exception e) {
rtnMsg = "FAIL";
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg);
System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage());
}
mjonPayVO.setRtnMsg(rtnMsg);
return mjonPayVO;
}
public MjonKgmVO kgmMobileEncode(HttpServletRequest request
, String okUrl
, String notiurl) {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
// Get Server Info
String kgmServerName = request.getServerName();
String kgmPath = "";
kgmPath = getKgServerPath(request);
// Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS");
String appr_dtm = dateFormat.format(new Date());
/*****************************************************************************************/
String CASH_GB = "MC"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가!
/*****************************************************************************************
- 필수 입력 항목
*****************************************************************************************/
String MC_SVCID = globalMcSvcid.trim(); //[ 12byte 고정] 모빌리언스에서 부여한 서비스ID (12byte 숫자 형식)
String PAY_MODE = globalMcPayMode.trim(); //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금)
String Prdtprice = request.getParameter("Prdtprice"); //결제요청금액.
String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 )
String Siteurl = kgmServerName; //가맹점도메인
String Tradeid = MC_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //[4byte 이상, 40byte 이하] 가맹점거래번호. 결제 요청 시 마다 unique한 값을 세팅해야 함. //해당 샘플에는 테스트를 위해 {가맹점 서비스ID + 요청일시} 형식으로 세팅하였음.
String Okurl = kgmPath + okUrl; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp )
String Notiurl = kgmPath + notiurl; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL
/*****************************************************************************************
- 선택 입력 항목
*****************************************************************************************/
String Userid = userId; //가맹점결제자ID
String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용.
/*****************************************************************************************
- 암호화 처리 (암호화 사용 시)
Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다.
주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로
암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다.
*****************************************************************************************/
String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용
String Cryptstring = ""; //암호화 사용 시 암호화된 스트링
if ("Y".equals(Cryptyn)) {
Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl)
Okurl = McashCipher.encodeString(Okurl, Tradeid);
Failurl = McashCipher.encodeString(Failurl, Tradeid);
Notiurl = McashCipher.encodeString(Notiurl, Tradeid);
Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid);
Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid);
}
MjonKgmVO mjonKgmVO = new MjonKgmVO();
// 필수
mjonKgmVO.setCash_gb(CASH_GB);
mjonKgmVO.setMc_svcid(MC_SVCID);
mjonKgmVO.setPay_mode(PAY_MODE);
mjonKgmVO.setPrdtnm(Prdtnm);
mjonKgmVO.setSiteurl(Siteurl);
mjonKgmVO.setTradeid(Tradeid);
mjonKgmVO.setUserid(Userid);
mjonKgmVO.setOkurl(Okurl);
mjonKgmVO.setNotiurl(Notiurl);
mjonKgmVO.setPrdtprice(Prdtprice);
mjonKgmVO.setCryptstring(Cryptstring);
return mjonKgmVO;
}
public MjonPayVO kgmMobileNotiUrl(HttpServletResponse response
, HttpServletRequest request
) throws Exception {
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
/*****************************************************************************************/
MjonPayVO mjonPayVO = new MjonPayVO();
String rtnMsg = "";
String CASH_GB = "MC"; //[ 2byte 고정] 결제수단구분. "MC" 고정값. 수정불가!
String Svcid = request.getParameter("Svcid"); /* 서비스아이디 */
String Mobilid = request.getParameter("Mobilid"); /* 모빌리언스 거래번호 */
String Signdate = request.getParameter("Signdate"); /* 결제일자 */
String Tradeid = request.getParameter("Tradeid"); /* 상점거래번호 */
String Mrchid = request.getParameter("Mrchid"); //[ 8byte 고정] 상점ID
String Prdtnm = request.getParameter("Prdtnm"); /* 상품명 */
String Prdtprice = request.getParameter("Prdtprice"); /* 상품가격 */
String Userid = request.getParameter("Userid"); /* 사용자아이디*/
String Resultcd = request.getParameter("Resultcd"); /* 결과코드 */
String Resultmsg = request.getParameter("Resultmsg"); //[ 100byte 이하] 결과메세지
String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */
String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수
String Commid = request.getParameter("Commid"); //[ 3byte 고정] 이통사
String chkValue = request.getParameter("chkValue"); /* 결과값 검증 hash데이터 */
String AutoBillKey = request.getParameter("AutoBillKey"); //[ 15byte 이하] 자동결제 최초등록키
String No = request.getParameter("No"); //[ 11byte 이하] 폰번호
String USERKEY = request.getParameter("USERKEY"); //[ 15byte 이하] 휴대폰정보(이통사, 휴대폰번호, 주민번호) 대체용 USERKEY
String MC_EZ_KEY = request.getParameter("Ezkey"); //[ 20byte 고정] 간소화결제 사용자키
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - MOBILE getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check
try {
// Step 1. Tid로 존재여부 체크
int tidCnt = mjonPayService.selectPayCountByTid(Tradeid);
if (tidCnt > 0) {
// 저장된 데이터 있을경우
rtnMsg = "SUCCESS";
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg2 : " + rtnMsg);
}else if (tidCnt == 0) {
// Check1. KG모빌리언스 호출아이피 체크
if (!getIsKgmServerIp(request)) {
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리");
Resultcd = "9998";
Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요.";
try {
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
// 스미싱의심 SMS 알림전송
mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, "");
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요.";
mjonCommon.sendSimpleSlackMsg(msg);
}
} catch (Exception e) {
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류");
}
}
// 저장 Start
// 사용자 정보
String mberNm = "";
String moblphonNo = "";
String mberEmailAdres = "";
MberManageVO mberManageVO = new MberManageVO();
mberManageVO.setMberId(Userid);
MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO);
if (userInfo != null) {
mberNm = userInfo.getMberNm();
moblphonNo = userInfo.getMoblphonNo();
mberEmailAdres = userInfo.getMberEmailAdres();
}
mjonPayVO.setResultCd(Resultcd);
mjonPayVO.setResultMsg(Resultmsg);
mjonPayVO.setAutoBillKey(AutoBillKey);
mjonPayVO.setCashGb(CASH_GB);
mjonPayVO.setAutoYn("");
mjonPayVO.setCommId(Commid);
mjonPayVO.setMobileId(Mobilid);
mjonPayVO.setMrchId(Mrchid);
mjonPayVO.setPno(No);
mjonPayVO.setPrdtNm(Prdtnm);
mjonPayVO.setPrdtPrice(Prdtprice);
mjonPayVO.setSignDate(Signdate);
mjonPayVO.setSvcId(Svcid);
mjonPayVO.setTradeId(Tradeid);
mjonPayVO.setUserId(Userid);
mjonPayVO.setUserKey(USERKEY);
mjonPayVO.setMcEzKey(MC_EZ_KEY);
// 추가정보(mj_pg)
String pgStatus = "";
if("0000".equals(Resultcd)) {
pgStatus = "1"; // 1:결제완료
}else {
pgStatus = "4"; // 4.결제오류
}
mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료
mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값]
mjonPayVO.setResultCode(Resultcd);
mjonPayVO.setResultMsg(Resultmsg);
mjonPayVO.setAmt(Prdtprice); // 결제금액
mjonPayVO.setPayMethod("CELLPHONE"); // 결제방법
mjonPayVO.setSpayMethod(""); // 간편결제 결제방법
mjonPayVO.setSpayDiv(""); // 간편결제분류
mjonPayVO.setPgCode("KGM"); //
mjonPayVO.setGoodsName(Prdtnm); //
mjonPayVO.setPhone(""); // 모바일
mjonPayVO.setMobile(""); // 모바일
mjonPayVO.setPayerEmail(Payeremail);
mjonPayVO.setTid(Tradeid); // Tid
mjonPayVO.setMid(Svcid); // Mid = Svcid
// 회원정보
mjonPayVO.setBuyerName(mberNm);
mjonPayVO.setBuyerTel(moblphonNo);
mjonPayVO.setBuyerEmail(mberEmailAdres);
mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보)
// 상점 주문번호 결제 완료 후 생성
mjonPayVO.setMoid(idgenPgMoid.getNextStringId());
//세금 값 넣기
mjonPayVO = this.setKgmTexV2VO(mjonPayVO);
//cash 값 넣기
mjonPayVO = this.setKgmCashVO(mjonPayVO);
//point 값 넣기
mjonPayVO = this.setKgmPointVO(mjonPayVO);
rtnMsg = "SUCCESS";
}
}catch(Exception e) {
rtnMsg = "FAIL";
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid);
System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg);
System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage());
}
mjonPayVO.setRtnMsg(rtnMsg);
return mjonPayVO;
}
public String slackKgPay(MjonPayVO mjonPayVO) {
String userId = mjonPayVO.getUserId();
String mberNm = mjonPayVO.getMberNm();
String tradeId = mjonPayVO.getTradeId();
String rtnMsg = "";
try {
// 휴대폰 15만원결제 => 법인폰 알림
if (mjonPayVO.getAmt().equals("165000")) {
// 법인폰 알람여부 체크
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
// 스미싱의심 SMS 알림전송
mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", userId, mberNm);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] 스미싱의심/휴대폰 15만원 결제 - " + mberNm +"("+ userId + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
// 스미싱 의심회원으로 변경
UserManageVO userManageVO = new UserManageVO();
userManageVO.setSmishingYn("Y");
userManageVO.setMberId(userId);
userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
} else {
String sandTxt = "";
if(mjonPayVO.getPayMethod().equals("CELLPHONE")) {
sandTxt = "스미싱의심/휴대폰 첫결제";
}else if(mjonPayVO.getPayMethod().equals("BANK")) {
sandTxt = "스미싱의심/즉시이체 첫결제";
}else if(mjonPayVO.getPayMethod().equals("SPAY")) {
sandTxt = "스미싱의심/간편결제 첫결제";
}
// 대상 : 휴대폰결제, 즉시이체, 전용계좌
// Step 1. 스미싱의심 지정 여부
JoinSettingVO joinSettingVO = new JoinSettingVO();
joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) {
// Step 1. 개인회원 여부 체크
int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(userId);
if (isPersnalMemberCnt == 1) {
// Step 2. 첫결제 여부 체크
int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(userId);
if (isFirstPayCnt == 1) {
// SMS 체크
if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) {
// 스미싱의심 SMS 알림전송
mjonNoticeSendUtil.smishingSmsNoticeSend(sandTxt, userId, mberNm);
}
// SLACK 체크
if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
// Slack 메시지 발송(단순본문)
String msg = "[문자온] "+sandTxt+" - " + mberNm +"("+ userId + ")";
mjonCommon.sendSimpleSlackMsg(msg);
}
// 스미싱 의심회원으로 변경
UserManageVO userManageVO = new UserManageVO();
userManageVO.setSmishingYn("Y");
userManageVO.setMberId(userId);
userManageService.updateOneUserSmishingYnNotAlert(userManageVO);
}
}
}
}
}catch (Exception e) {
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE 슬랙알림 & 스미싱의심 처리 Error");
System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + tradeId);
System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage());
}
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + tradeId);
System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg);
return rtnMsg;
}
// Get Server Path
public static String getKgServerPath(HttpServletRequest request) {
String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort();
if (request.getServerPort() == 80) {
kgmPath = request.getScheme() + "://" + request.getServerName();
}
// 테스트서버 정보 변환
if(kgmPath.indexOf("192.168.0.125") > -1){
kgmPath = "https://test.munjaon.co.kr:9998";
}
System.out.println("#############################################################");
System.out.println("KG MOBILIANS kgServerPath : " + kgmPath);
return kgmPath;
}
/**
* 전달된 파라미터에 맞게 난수를 생성한다
* @param len : 생성할 난수의 길이
* @param dupCd : 중복 허용 여부 (1: 중복허용, 2:중복제거)
*/
public static String numberGen(int len, int dupCd ) {
Random rand = new Random();
String numStr = ""; //난수가 저장될 변수
for(int i=0;i<len;i++) {
//0~9 까지 난수 생성
String ran = Integer.toString(rand.nextInt(10));
if(dupCd==1) {
//중복 허용시 numStr에 append
numStr += ran;
}else if(dupCd==2) {
//중복을 허용하지 않을시 중복된 값이 있는지 검사한다
if(!numStr.contains(ran)) {
//중복된 값이 없으면 numStr에 append
numStr += ran;
}else {
//생성된 난수가 중복되면 루틴을 다시 실행한다
i-=1;
}
}
}
return numStr;
}
// Kgm Ip Check
public static boolean getIsKgmServerIp(HttpServletRequest request) {
boolean rtnVal = false;
String[] kgmServerIpArray = {
"175.158.12.133"
, "175.158.12.140"
, "175.158.12.1"
, "116.127.121.151"
, "218.50.55.107"
, "116.127.121.132"};
// List 로 변환
List<String> strList = new ArrayList<>(Arrays.asList(kgmServerIpArray));
// List Contains
if(strList.contains(getClientIP(request))) {
rtnVal = true; // 해당아이피 strArray에 존재
}
return rtnVal;
}
// Get Ip
public static String getClientIP(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For") == null ? request.getHeader("X-Forwarded-For") : request.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim();
String ipMethod = "X-Forwarded-For";
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
ipMethod = "Proxy-Client-IP";
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
ipMethod = "WL-Proxy-Client-IP";
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
ipMethod = "HTTP_CLIENT_IP";
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
ipMethod = "HTTP_X_FORWARDED_FOR";
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
ipMethod = "getRemoteAddr";
}
System.out.println("#############################################################");
System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ipMethod);
System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ip);
return ip;
}
/**
* @param mjonPayVO
* @return
* @throws Exception
* tex 값 넣기
*/
private MjonPayVO setKgmTexV2VO(MjonPayVO mjonPayVO) throws Exception{
//PG Tax테이블 변수 생성
mjonPayVO.setRcptType("9"); //PG결제는 세금계산서 '발행유형-[PG결제-현금영수증 유형과 동일] 1:소득공제, 2:지출증빙, 9:세금계산서', (확인필요)
mjonPayVO.setRegNo(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호',
mjonPayVO.setMobile(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호',
mjonPayVO.setPhone(mjonPayVO.getBuyerTel()); //연락처
mjonPayVO.setEmail(mjonPayVO.getBuyerEmail()); //이메일
mjonPayVO.setRepName(mjonPayVO.getBuyerName()); //'대표자명',
mjonPayVO.setConfirmYn("Y"); //'완료여부',
return mjonPayVO;
}
/**
* @param mjonPayVO
* @return
* @throws Exception
* cash table 값 넣기
* 2022.04.12 JSP => mjonPayVO.getMoid() => userId 사용 제거 (휴대폰결제에서만 사용)
*/
private MjonPayVO setKgmCashVO(MjonPayVO mjonPayVO) throws Exception{
String amt = mjonPayVO.getAmt();
// 부가세별도 충전금액
amt = setCashVatNotIncluded(amt);
//캐쉬 테이블 변수 생성
mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()) ;
mjonPayVO.setPointId(idgenMjonPointId.getNextStringId()) ;
mjonPayVO.setCash(Float.parseFloat(amt)); //'사용 캐쉬-양수:지급, 음수:소모',
mjonPayVO.setOrderId(mjonPayVO.getMoid()); //'주문번호-주문번호가 없으면 관리자 임의 지급',
mjonPayVO.setUserId(mjonPayVO.getUserId());
mjonPayVO.setFrstRegisterId(mjonPayVO.getUserId());
String s_paymethod = mjonPayVO.getPayMethod();
String spaydiv = mjonPayVO.getSpayDiv();
if(s_paymethod.equals("CARD")){
s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001)
}else if(s_paymethod.equals("SPAY")){
s_paymethod = "간편결제" ; // 간편결제
if(spaydiv.equals("NAV")){
s_paymethod = "간편결제(네이버페이)" ;
}
else if(spaydiv.equals("KKO")){
s_paymethod = "간편결제(카카오페이)" ;
}
else if(spaydiv.equals("TOS")){
s_paymethod = "간편결제(토스페이)" ;
}
else if(spaydiv.equals("PYC")){
s_paymethod = "간편결제(페이코)" ;
}
}else if(s_paymethod.equals("BANK")){
s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000)
}else if(s_paymethod.equals("CELLPHONE")){
s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000)
}else if(s_paymethod.equals("VBANK")){
s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100)
}else if(s_paymethod.equals("SSG_BANK")){
s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000)
}else if(s_paymethod.equals("CMS_BANK")){
s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000)
}else {
s_paymethod = "";
}
String memo = s_paymethod + " " + amt + "원 충전" ;
mjonPayVO.setMemo(memo); //캐쉬메모
return mjonPayVO;
}
/**
* @param mjonPayVO
* @return
* @throws Exception
* point table 값 넣기
*/
private MjonPayVO setKgmPointVO(MjonPayVO mjonPayVO) throws Exception{
String s_paymethod = mjonPayVO.getPayMethod();
String spaydiv = mjonPayVO.getSpayDiv();
if(s_paymethod.equals("CARD")){
s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001)
}else if(s_paymethod.equals("SPAY")){
s_paymethod = "간편결제" ; // 간편결제
if(spaydiv.equals("NAV")){
s_paymethod = "간편결제(네이버페이)" ;
}
else if(spaydiv.equals("KKO")){
s_paymethod = "간편결제(카카오페이)" ;
}
else if(spaydiv.equals("TOS")){
s_paymethod = "간편결제(토스페이)" ;
}
else if(spaydiv.equals("PYC")){
s_paymethod = "간편결제(페이코)" ;
}
}else if(s_paymethod.equals("BANK")){
s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000)
}else if(s_paymethod.equals("CELLPHONE")){
s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000)
}else if(s_paymethod.equals("VBANK")){
s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100)
}else if(s_paymethod.equals("SSG_BANK")){
s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000)
}else if(s_paymethod.equals("CMS_BANK")){
s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000)
}else {
s_paymethod = "";
}
String s_amt = mjonPayVO.getAmt();
// 부가세별도 충전금액
s_amt = setCashVatNotIncluded(s_amt);
//포인트 테이블 변수설정
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//int point = Math.round( (Float.parseFloat(s_amt)*2/100) ) ;
float p_i_re_point = 0;
if (sysJoinSetVO != null) {
p_i_re_point = sysJoinSetVO.getPointPer();
}
int point = Math.round((Float.parseFloat(s_amt)*p_i_re_point/100)) ;
mjonPayVO.setPoint(point);
String pointMemo = s_paymethod; //포인트 메모
pointMemo = pointMemo + " " + point + " 충전" ;
mjonPayVO.setPointMemo(pointMemo);
return mjonPayVO;
}
// 부가세별도 충전금액
private String setCashVatNotIncluded(String val) {
String rtnVal = "";
// 공급대가 = 공급가액(공급대가/11*10) + 부가세(공급대가/11)
// 11000 = (11000/11*10 ) + 11000/11
// 공급가액 계산로직
rtnVal = Math.round(Float.parseFloat(val) / 11 * 10) + "";
return rtnVal;
}
}