이벤트 결제 로직 수정
@6d5eae5670f1387ddc5464a391147f64d8c2b4c3
+++ src/main/java/itn/com/cmm/util/KgmPayUtil.java
... | ... | @@ -0,0 +1,1160 @@ |
| 1 | +package itn.com.cmm.util; | |
| 2 | + | |
| 3 | +import java.text.SimpleDateFormat; | |
| 4 | +import java.util.ArrayList; | |
| 5 | +import java.util.Arrays; | |
| 6 | +import java.util.Date; | |
| 7 | +import java.util.List; | |
| 8 | +import java.util.Random; | |
| 9 | + | |
| 10 | +import javax.annotation.Resource; | |
| 11 | +import javax.servlet.http.HttpServletRequest; | |
| 12 | +import javax.servlet.http.HttpServletResponse; | |
| 13 | + | |
| 14 | +import org.springframework.beans.factory.annotation.Value; | |
| 15 | +import org.springframework.stereotype.Component; | |
| 16 | + | |
| 17 | +import egovframework.rte.fdl.idgnr.EgovIdGnrService; | |
| 18 | +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; | |
| 19 | +import itn.com.cmm.LoginVO; | |
| 20 | +import itn.com.utl.fcc.service.EgovStringUtil; | |
| 21 | +import itn.let.mjo.mjocommon.MjonCommon; | |
| 22 | +import itn.let.mjo.msgdata.service.MjonMsgDataService; | |
| 23 | +import itn.let.mjo.pay.service.MjonKgmVO; | |
| 24 | +import itn.let.mjo.pay.service.MjonPayService; | |
| 25 | +import itn.let.mjo.pay.service.MjonPayVO; | |
| 26 | +import itn.let.sym.site.service.EgovSiteManagerService; | |
| 27 | +import itn.let.sym.site.service.JoinSettingVO; | |
| 28 | +import itn.let.uss.umt.service.EgovUserManageService; | |
| 29 | +import itn.let.uss.umt.service.MberManageVO; | |
| 30 | +import itn.let.uss.umt.service.UserManageVO; | |
| 31 | +import itn.let.utl.user.service.MjonNoticeSendUtil; | |
| 32 | +import mup.mcash.module.common.McashCipher.McashCipher; | |
| 33 | + | |
| 34 | +@Component("kgmPayUtil") | |
| 35 | +public class KgmPayUtil { | |
| 36 | + | |
| 37 | + /** KG 모빌리언스 설정 */ | |
| 38 | + // CARD | |
| 39 | + @Value("#{globalSettings['Globals.pay.kgm.card.cnSvcid']}") | |
| 40 | + private String globalCnSvcid; | |
| 41 | + @Value("#{globalSettings['Globals.pay.kgm.card.payMode']}") | |
| 42 | + private String globalCnPayMode; | |
| 43 | + | |
| 44 | + // BANK | |
| 45 | + @Value("#{globalSettings['Globals.pay.kgm.bank.raSvcid']}") | |
| 46 | + private String globalRaSvcid; | |
| 47 | + @Value("#{globalSettings['Globals.pay.kgm.bank.payMode']}") | |
| 48 | + private String globalRaPayMode; | |
| 49 | + | |
| 50 | + // MOBILE | |
| 51 | + @Value("#{globalSettings['Globals.pay.kgm.mobile.mcSvcid']}") | |
| 52 | + private String globalMcSvcid; | |
| 53 | + @Value("#{globalSettings['Globals.pay.kgm.mobile.payMode']}") | |
| 54 | + private String globalMcPayMode; | |
| 55 | + | |
| 56 | + @Resource(name = "egovPgMoidGnrService") | |
| 57 | + private EgovIdGnrService idgenPgMoid; | |
| 58 | + | |
| 59 | + @Resource(name = "egovMjonCashIdGnrService") | |
| 60 | + private EgovIdGnrService idgenMjonCashId; | |
| 61 | + | |
| 62 | + @Resource(name = "egovMjonPointIdGnrService") | |
| 63 | + private EgovIdGnrService idgenMjonPointId; | |
| 64 | + | |
| 65 | + @Resource(name="MjonCommon") | |
| 66 | + private MjonCommon mjonCommon; | |
| 67 | + | |
| 68 | + @Resource(name = "mjonPayService") | |
| 69 | + private MjonPayService mjonPayService; | |
| 70 | + | |
| 71 | + @Resource(name = "userManageService") | |
| 72 | + private EgovUserManageService userManageService; | |
| 73 | + | |
| 74 | + @Resource(name = "MjonMsgDataService") | |
| 75 | + private MjonMsgDataService mjonMsgDataService; | |
| 76 | + | |
| 77 | + /** 사이트 설정 */ | |
| 78 | + @Resource(name = "egovSiteManagerService") | |
| 79 | + private EgovSiteManagerService egovSiteManagerService; | |
| 80 | + | |
| 81 | + /** 알림전송 Util */ | |
| 82 | + @Resource(name = "mjonNoticeSendUtil") | |
| 83 | + private MjonNoticeSendUtil mjonNoticeSendUtil; | |
| 84 | + | |
| 85 | + @Resource(name = "mjonPayUtil") | |
| 86 | + MjonPayUtil mjonPayUtil; | |
| 87 | + | |
| 88 | + public MjonKgmVO kgmCardEncode(HttpServletRequest request, String okUrl, String notiurl) { | |
| 89 | + | |
| 90 | + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); | |
| 91 | + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); | |
| 92 | + | |
| 93 | + // Get Server Info | |
| 94 | + String kgmServerName = request.getServerName(); | |
| 95 | + String kgmPath = ""; | |
| 96 | + kgmPath = getKgServerPath(request); | |
| 97 | + | |
| 98 | + // Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회) | |
| 99 | + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS"); | |
| 100 | + String appr_dtm = dateFormat.format(new Date()); | |
| 101 | + | |
| 102 | + /*****************************************************************************************/ | |
| 103 | + String CASH_GB = "CN"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가! | |
| 104 | + | |
| 105 | + /***************************************************************************************** | |
| 106 | + - 필수 입력 항목 | |
| 107 | + *****************************************************************************************/ | |
| 108 | + String VER = "ALL_NEW"; //ALL_NEW : 버전설정 고정 | |
| 109 | + String CN_SVCID = globalCnSvcid.trim(); //서비스아이디 | |
| 110 | + String PAY_MODE = globalCnPayMode.trim(); //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금) | |
| 111 | + String Prdtprice = request.getParameter("Prdtprice");; //결제요청금액. | |
| 112 | + String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 ) | |
| 113 | + String Siteurl = kgmServerName; //가맹점도메인 | |
| 114 | + String Tradeid = CN_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //가맹점거래번호 //결제 요청 시 마다 unique한 값을 세팅해야 함. | |
| 115 | + String Okurl = kgmPath + okUrl; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp ) | |
| 116 | + String Notiurl = kgmPath + notiurl; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL | |
| 117 | + | |
| 118 | + /***************************************************************************************** | |
| 119 | + - 선택 입력 항목 | |
| 120 | + *****************************************************************************************/ | |
| 121 | + String Userid = userId; //가맹점결제자ID | |
| 122 | + String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용. | |
| 123 | + | |
| 124 | + | |
| 125 | + /***************************************************************************************** | |
| 126 | + - 암호화 처리 (암호화 사용 시) | |
| 127 | + Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다. | |
| 128 | + | |
| 129 | + 주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로 | |
| 130 | + 암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다. | |
| 131 | + *****************************************************************************************/ | |
| 132 | + String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용 | |
| 133 | + String Cryptstring = ""; //암호화 사용 시 암호화된 스트링 | |
| 134 | + | |
| 135 | + if ("Y".equals(Cryptyn)) { | |
| 136 | + Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl) | |
| 137 | + Okurl = McashCipher.encodeString(Okurl, Tradeid); | |
| 138 | + Failurl = McashCipher.encodeString(Failurl, Tradeid); | |
| 139 | + Notiurl = McashCipher.encodeString(Notiurl, Tradeid); | |
| 140 | + Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid); | |
| 141 | + Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid); | |
| 142 | + } | |
| 143 | + | |
| 144 | + MjonKgmVO mjonKgmVO = new MjonKgmVO(); | |
| 145 | + // 필수 | |
| 146 | + mjonKgmVO.setCash_gb(CASH_GB); | |
| 147 | + mjonKgmVO.setRa_svcid(CN_SVCID); | |
| 148 | + mjonKgmVO.setPay_mode(PAY_MODE); | |
| 149 | + mjonKgmVO.setPrdtnm(Prdtnm); | |
| 150 | + mjonKgmVO.setSiteurl(Siteurl); | |
| 151 | + mjonKgmVO.setTradeid(Tradeid); | |
| 152 | + | |
| 153 | + mjonKgmVO.setPrdtprice(Prdtprice); | |
| 154 | + mjonKgmVO.setUserid(Userid); | |
| 155 | + mjonKgmVO.setOkurl(Okurl); | |
| 156 | + mjonKgmVO.setNotiurl(Notiurl); | |
| 157 | + mjonKgmVO.setCryptstring(Cryptstring); | |
| 158 | + | |
| 159 | + return mjonKgmVO; | |
| 160 | + } | |
| 161 | + | |
| 162 | + public MjonPayVO kgmCardNotiUrl(HttpServletResponse response, HttpServletRequest request) { | |
| 163 | + //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 | |
| 164 | + response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); | |
| 165 | + | |
| 166 | + /*****************************************************************************************/ | |
| 167 | + MjonPayVO mjonPayVO = new MjonPayVO(); | |
| 168 | + String rtnMsg = ""; | |
| 169 | + String CASH_GB = request.getParameter("CASH_GB"); // 결제수단(CN) | |
| 170 | + String Svcid = request.getParameter("Svcid"); // 서비스ID | |
| 171 | + String Mobilid = request.getParameter("Mobilid"); // 모빌리언스 거래번호 | |
| 172 | + String Signdate = request.getParameter("Signdate"); // 결제일자 | |
| 173 | + String Tradeid = request.getParameter("Tradeid"); // 상점거래번호 | |
| 174 | + String Mrchid = request.getParameter("Mrchid"); // 상점ID | |
| 175 | + String Prdtnm = request.getParameter("Prdtnm"); // 상품명 | |
| 176 | + String Prdtprice = request.getParameter("Prdtprice"); // 상품가격 | |
| 177 | + String Userid = request.getParameter("Userid"); // 사용자ID | |
| 178 | + String Resultcd = request.getParameter("Resultcd"); // 결과코드 | |
| 179 | + String Resultmsg = request.getParameter("Resultmsg"); // 결과메세지 | |
| 180 | + String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */ | |
| 181 | + | |
| 182 | + String Cardcode = request.getParameter("Cardcode"); /* 결제 카드코드 */ | |
| 183 | + String Cardname = request.getParameter("Cardname"); /* 결제 카드사명 */ | |
| 184 | + String chkValue = request.getParameter("chkValue"); /* 결과값 검증 hash데이터 */ | |
| 185 | + String spayMethod = request.getParameter("Paymethod"); /* 지불방법 (간편결제 시에만 응답) */ | |
| 186 | + String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수 | |
| 187 | + | |
| 188 | + | |
| 189 | + System.out.println("#############################################################"); | |
| 190 | + System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid); | |
| 191 | + System.out.println("KG MOBILIANS NotiUrl - CARD MSTR : " + MSTR); | |
| 192 | + System.out.println("KG MOBILIANS NotiUrl - CARD SpayMethod : " + spayMethod); | |
| 193 | + | |
| 194 | + String cpChkValue = ""; | |
| 195 | + cpChkValue = "Mobilid="+ Mobilid + | |
| 196 | + "&Mrchid=null"+ | |
| 197 | + "&Svcid="+ Svcid + | |
| 198 | + "&Tradeid="+ Tradeid + | |
| 199 | + "&Signdate="+ Signdate + | |
| 200 | + "&Prdtprice="+ Prdtprice; | |
| 201 | + String encChkValue = McashCipher.encodeString(cpChkValue, Tradeid); | |
| 202 | + System.out.println("KG MOBILIANS NotiUrl - CARD chkValue : " + chkValue); | |
| 203 | + System.out.println("KG MOBILIANS NotiUrl - CARD encChkValue : " + encChkValue); | |
| 204 | + System.out.println("KG MOBILIANS NotiUrl - CARD getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check | |
| 205 | + | |
| 206 | + try { | |
| 207 | + // Step 1. Tid로 존재여부 체크 | |
| 208 | + int tidCnt = mjonPayService.selectPayCountByTid(Tradeid); | |
| 209 | + if (tidCnt > 0) { | |
| 210 | + // 저장된 데이터 있을경우 | |
| 211 | + rtnMsg = "SUCCESS"; | |
| 212 | + | |
| 213 | + System.out.println("#############################################################"); | |
| 214 | + System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); | |
| 215 | + System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg2 : " + rtnMsg); | |
| 216 | + } else if (tidCnt == 0) { | |
| 217 | + // Check1. KG모빌리언스 호출아이피 체크 | |
| 218 | + if (!getIsKgmServerIp(request)) { | |
| 219 | + System.out.println("#############################################################"); | |
| 220 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리"); | |
| 221 | + | |
| 222 | + Resultcd = "9998"; | |
| 223 | + Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요."; | |
| 224 | + | |
| 225 | + try { | |
| 226 | + // 법인폰 알람여부 체크 | |
| 227 | + JoinSettingVO joinSettingVO = new JoinSettingVO(); | |
| 228 | + joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); | |
| 229 | + // SMS 체크 | |
| 230 | + if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { | |
| 231 | + // 스미싱의심 SMS 알림전송 | |
| 232 | + mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, ""); | |
| 233 | + } | |
| 234 | + | |
| 235 | + // SLACK 체크 | |
| 236 | + if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { | |
| 237 | + // Slack 메시지 발송(단순본문) | |
| 238 | + String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요."; | |
| 239 | + mjonCommon.sendSimpleSlackMsg(msg); | |
| 240 | + } | |
| 241 | + } catch (Exception e) { | |
| 242 | + System.out.println("#############################################################"); | |
| 243 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류"); | |
| 244 | + } | |
| 245 | + } | |
| 246 | + // 저장 Start | |
| 247 | + // 사용자 정보 | |
| 248 | + String mberNm = ""; | |
| 249 | + String moblphonNo = ""; | |
| 250 | + String mberEmailAdres = ""; | |
| 251 | + MberManageVO mberManageVO = new MberManageVO(); | |
| 252 | + mberManageVO.setMberId(Userid); | |
| 253 | + MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); | |
| 254 | + if (userInfo != null) { | |
| 255 | + mberNm = userInfo.getMberNm(); | |
| 256 | + moblphonNo = userInfo.getMoblphonNo(); | |
| 257 | + mberEmailAdres = userInfo.getMberEmailAdres(); | |
| 258 | + } | |
| 259 | + | |
| 260 | + mjonPayVO.setResultCd(Resultcd); | |
| 261 | + mjonPayVO.setResultMsg(Resultmsg); | |
| 262 | + mjonPayVO.setAutoBillKey(""); | |
| 263 | + mjonPayVO.setCashGb(CASH_GB); | |
| 264 | + mjonPayVO.setAutoYn(""); | |
| 265 | + mjonPayVO.setCommId(""); | |
| 266 | + mjonPayVO.setMobileId(Mobilid); | |
| 267 | + mjonPayVO.setMrchId(Mrchid); | |
| 268 | + mjonPayVO.setPno(""); | |
| 269 | + mjonPayVO.setPrdtNm(Prdtnm); | |
| 270 | + mjonPayVO.setPrdtPrice(Prdtprice); | |
| 271 | + mjonPayVO.setSignDate(Signdate); | |
| 272 | + mjonPayVO.setSvcId(Svcid); | |
| 273 | + mjonPayVO.setTradeId(Tradeid); | |
| 274 | + mjonPayVO.setUserId(Userid); | |
| 275 | + mjonPayVO.setUserKey(""); | |
| 276 | + mjonPayVO.setMcEzKey(""); | |
| 277 | + | |
| 278 | + // 추가정보(mj_pg) | |
| 279 | + String pgStatus = ""; | |
| 280 | + if("0000".equals(Resultcd)) { | |
| 281 | + pgStatus = "1"; // 1:결제완료 | |
| 282 | + }else { | |
| 283 | + pgStatus = "4"; // 4.결제오류 | |
| 284 | + } | |
| 285 | + mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 | |
| 286 | + mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] | |
| 287 | + mjonPayVO.setResultCode(Resultcd); | |
| 288 | + mjonPayVO.setResultMsg(Resultmsg); | |
| 289 | + mjonPayVO.setAmt(Prdtprice); // 결제금액 | |
| 290 | + mjonPayVO.setPayMethod("BANK"); // 결제방법 | |
| 291 | + mjonPayVO.setSpayMethod(""); // 간편결제 결제방법 | |
| 292 | + mjonPayVO.setSpayDiv(""); // 간편결제분류 | |
| 293 | + | |
| 294 | + mjonPayVO.setPgCode("KGM"); // | |
| 295 | + mjonPayVO.setGoodsName(Prdtnm); // | |
| 296 | + mjonPayVO.setPhone(""); // 모바일 | |
| 297 | + mjonPayVO.setMobile(""); // 모바일 | |
| 298 | + mjonPayVO.setPayerEmail(Payeremail); | |
| 299 | + mjonPayVO.setTid(Tradeid); // Tid | |
| 300 | + mjonPayVO.setMid(Svcid); // Mid = Svcid | |
| 301 | + | |
| 302 | + // 회원정보 | |
| 303 | + mjonPayVO.setBuyerName(mberNm); | |
| 304 | + mjonPayVO.setBuyerTel(moblphonNo); | |
| 305 | + mjonPayVO.setBuyerEmail(mberEmailAdres); | |
| 306 | + mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) | |
| 307 | + | |
| 308 | + // 추가 | |
| 309 | + | |
| 310 | + | |
| 311 | + // 상점 주문번호 결제 완료 후 생성 | |
| 312 | + mjonPayVO.setMoid(idgenPgMoid.getNextStringId()); | |
| 313 | + | |
| 314 | + //세금 값 넣기 | |
| 315 | + mjonPayVO = this.setKgmTexV2VO(mjonPayVO); | |
| 316 | + | |
| 317 | + //cash 값 넣기 | |
| 318 | + mjonPayVO = this.setKgmCashVO(mjonPayVO); | |
| 319 | + | |
| 320 | + //point 값 넣기 | |
| 321 | + mjonPayVO = this.setKgmPointVO(mjonPayVO); | |
| 322 | + | |
| 323 | + rtnMsg = "SUCCESS"; | |
| 324 | + } | |
| 325 | + }catch(Exception e) { | |
| 326 | + rtnMsg = "FAIL"; | |
| 327 | + | |
| 328 | + System.out.println("#############################################################"); | |
| 329 | + System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); | |
| 330 | + System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg); | |
| 331 | + System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage()); | |
| 332 | + } | |
| 333 | + | |
| 334 | + mjonPayVO.setRtnMsg(rtnMsg); | |
| 335 | + | |
| 336 | + return mjonPayVO; | |
| 337 | + } | |
| 338 | + | |
| 339 | + public MjonKgmVO kgmBankEncode(HttpServletRequest request, String okUrl, String notiurl) { | |
| 340 | + | |
| 341 | + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); | |
| 342 | + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); | |
| 343 | + | |
| 344 | + // Get Server Info | |
| 345 | + String kgmServerName = request.getServerName(); | |
| 346 | + String kgmPath = ""; | |
| 347 | + kgmPath = getKgServerPath(request); | |
| 348 | + | |
| 349 | + // Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회) | |
| 350 | + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS"); | |
| 351 | + String appr_dtm = dateFormat.format(new Date()); | |
| 352 | + | |
| 353 | + /*****************************************************************************************/ | |
| 354 | + String CASH_GB = "RA"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가! | |
| 355 | + | |
| 356 | + /***************************************************************************************** | |
| 357 | + - 필수 입력 항목 | |
| 358 | + *****************************************************************************************/ | |
| 359 | + String RA_SVCID = globalRaSvcid.trim(); //서비스아이디 | |
| 360 | + String PAY_MODE = globalRaPayMode.trim(); //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금) | |
| 361 | + String Prdtprice = request.getParameter("Prdtprice");; //결제요청금액. | |
| 362 | + String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 ) | |
| 363 | + String Siteurl = kgmServerName; //가맹점도메인 | |
| 364 | + String Tradeid = RA_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //가맹점거래번호 //결제 요청 시 마다 unique한 값을 세팅해야 함. | |
| 365 | + String Okurl = kgmPath + okUrl; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp ) | |
| 366 | + String Notiurl = kgmPath + notiurl; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL | |
| 367 | + | |
| 368 | + /***************************************************************************************** | |
| 369 | + - 선택 입력 항목 | |
| 370 | + *****************************************************************************************/ | |
| 371 | + String Userid = userId; //가맹점결제자ID | |
| 372 | + String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용. | |
| 373 | + | |
| 374 | + | |
| 375 | + /***************************************************************************************** | |
| 376 | + - 암호화 처리 (암호화 사용 시) | |
| 377 | + Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다. | |
| 378 | + | |
| 379 | + 주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로 | |
| 380 | + 암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다. | |
| 381 | + *****************************************************************************************/ | |
| 382 | + String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용 | |
| 383 | + String Cryptstring = ""; //암호화 사용 시 암호화된 스트링 | |
| 384 | + | |
| 385 | + if ("Y".equals(Cryptyn)) { | |
| 386 | + Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl) | |
| 387 | + Okurl = McashCipher.encodeString(Okurl, Tradeid); | |
| 388 | + Failurl = McashCipher.encodeString(Failurl, Tradeid); | |
| 389 | + Notiurl = McashCipher.encodeString(Notiurl, Tradeid); | |
| 390 | + Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid); | |
| 391 | + Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid); | |
| 392 | + } | |
| 393 | + | |
| 394 | + MjonKgmVO mjonKgmVO = new MjonKgmVO(); | |
| 395 | + // 필수 | |
| 396 | + mjonKgmVO.setCash_gb(CASH_GB); | |
| 397 | + mjonKgmVO.setRa_svcid(RA_SVCID); | |
| 398 | + mjonKgmVO.setPay_mode(PAY_MODE); | |
| 399 | + mjonKgmVO.setPrdtnm(Prdtnm); | |
| 400 | + mjonKgmVO.setSiteurl(Siteurl); | |
| 401 | + mjonKgmVO.setTradeid(Tradeid); | |
| 402 | + | |
| 403 | + mjonKgmVO.setPrdtprice(Prdtprice); | |
| 404 | + mjonKgmVO.setUserid(Userid); | |
| 405 | + mjonKgmVO.setOkurl(Okurl); | |
| 406 | + mjonKgmVO.setNotiurl(Notiurl); | |
| 407 | + mjonKgmVO.setCryptstring(Cryptstring); | |
| 408 | + | |
| 409 | + return mjonKgmVO; | |
| 410 | + } | |
| 411 | + | |
| 412 | + public MjonPayVO kgmBankNotiUrl(HttpServletResponse response, HttpServletRequest request) { | |
| 413 | + //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 | |
| 414 | + response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); | |
| 415 | + | |
| 416 | + /*****************************************************************************************/ | |
| 417 | + MjonPayVO mjonPayVO = new MjonPayVO(); | |
| 418 | + String rtnMsg = ""; | |
| 419 | + String CASH_GB = "RA"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가! | |
| 420 | + String Svcid = request.getParameter("Svcid"); //[ 12byte 고정] 서비스ID | |
| 421 | + String Mobilid = request.getParameter("Mobilid"); //[ 15byte 이하] 모빌리언스 거래번호 | |
| 422 | + String Signdate = request.getParameter("Signdate"); //[ 14byte 이하] 결제일자 | |
| 423 | + String Tradeid = request.getParameter("Tradeid"); //[ 40byte 이하] 상점거래번호 | |
| 424 | + String Mrchid = request.getParameter("Mrchid"); // 상점ID | |
| 425 | + String Prdtnm = request.getParameter("Prdtnm"); //[ 50byte 이하] 상품명 | |
| 426 | + String Prdtprice = request.getParameter("Prdtprice"); //[ 10byte 이하] 상품가격 | |
| 427 | + String Userid = request.getParameter("Userid"); //[ 20byte 이하] 사용자ID | |
| 428 | + String Resultcd = request.getParameter("Resultcd"); //[ 4byte 고정] 결과코드 | |
| 429 | + String Resultmsg = request.getParameter("Resultmsg"); //[ 100byte 이하] 결과메세지 | |
| 430 | + String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */ | |
| 431 | + | |
| 432 | + String Banknm = request.getParameter("Banknm"); /* 은행명 */ | |
| 433 | + | |
| 434 | + System.out.println("#############################################################"); | |
| 435 | + System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); | |
| 436 | + System.out.println("KG MOBILIANS NotiUrl - BANK Banknm : " + Banknm); | |
| 437 | + System.out.println("KG MOBILIANS NotiUrl - BANK getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check | |
| 438 | + | |
| 439 | + try { | |
| 440 | + // Step 1. Tid로 존재여부 체크 | |
| 441 | + int tidCnt = mjonPayService.selectPayCountByTid(Tradeid); | |
| 442 | + if (tidCnt > 0) { | |
| 443 | + // 저장된 데이터 있을경우 | |
| 444 | + rtnMsg = "SUCCESS"; | |
| 445 | + | |
| 446 | + System.out.println("#############################################################"); | |
| 447 | + System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); | |
| 448 | + System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg2 : " + rtnMsg); | |
| 449 | + } else if (tidCnt == 0) { | |
| 450 | + // Check1. KG모빌리언스 호출아이피 체크 | |
| 451 | + if (!getIsKgmServerIp(request)) { | |
| 452 | + System.out.println("#############################################################"); | |
| 453 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리"); | |
| 454 | + | |
| 455 | + Resultcd = "9998"; | |
| 456 | + Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요."; | |
| 457 | + | |
| 458 | + try { | |
| 459 | + // 법인폰 알람여부 체크 | |
| 460 | + JoinSettingVO joinSettingVO = new JoinSettingVO(); | |
| 461 | + joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); | |
| 462 | + // SMS 체크 | |
| 463 | + if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { | |
| 464 | + // 스미싱의심 SMS 알림전송 | |
| 465 | + mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, ""); | |
| 466 | + } | |
| 467 | + | |
| 468 | + // SLACK 체크 | |
| 469 | + if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { | |
| 470 | + // Slack 메시지 발송(단순본문) | |
| 471 | + String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요."; | |
| 472 | + mjonCommon.sendSimpleSlackMsg(msg); | |
| 473 | + } | |
| 474 | + } catch (Exception e) { | |
| 475 | + System.out.println("#############################################################"); | |
| 476 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류"); | |
| 477 | + } | |
| 478 | + } | |
| 479 | + // 저장 Start | |
| 480 | + // 사용자 정보 | |
| 481 | + String mberNm = ""; | |
| 482 | + String moblphonNo = ""; | |
| 483 | + String mberEmailAdres = ""; | |
| 484 | + MberManageVO mberManageVO = new MberManageVO(); | |
| 485 | + mberManageVO.setMberId(Userid); | |
| 486 | + MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); | |
| 487 | + if (userInfo != null) { | |
| 488 | + mberNm = userInfo.getMberNm(); | |
| 489 | + moblphonNo = userInfo.getMoblphonNo(); | |
| 490 | + mberEmailAdres = userInfo.getMberEmailAdres(); | |
| 491 | + } | |
| 492 | + | |
| 493 | + mjonPayVO.setResultCd(Resultcd); | |
| 494 | + mjonPayVO.setResultMsg(Resultmsg); | |
| 495 | + mjonPayVO.setAutoBillKey(""); | |
| 496 | + mjonPayVO.setCashGb(CASH_GB); | |
| 497 | + mjonPayVO.setAutoYn(""); | |
| 498 | + mjonPayVO.setCommId(""); | |
| 499 | + mjonPayVO.setMobileId(Mobilid); | |
| 500 | + mjonPayVO.setMrchId(Mrchid); | |
| 501 | + mjonPayVO.setPno(""); | |
| 502 | + mjonPayVO.setPrdtNm(Prdtnm); | |
| 503 | + mjonPayVO.setPrdtPrice(Prdtprice); | |
| 504 | + mjonPayVO.setSignDate(Signdate); | |
| 505 | + mjonPayVO.setSvcId(Svcid); | |
| 506 | + mjonPayVO.setTradeId(Tradeid); | |
| 507 | + mjonPayVO.setUserId(Userid); | |
| 508 | + mjonPayVO.setUserKey(""); | |
| 509 | + mjonPayVO.setMcEzKey(""); | |
| 510 | + | |
| 511 | + // 추가정보(mj_pg) | |
| 512 | + String pgStatus = ""; | |
| 513 | + if("0000".equals(Resultcd)) { | |
| 514 | + pgStatus = "1"; // 1:결제완료 | |
| 515 | + }else { | |
| 516 | + pgStatus = "4"; // 4.결제오류 | |
| 517 | + } | |
| 518 | + mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 | |
| 519 | + mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] | |
| 520 | + mjonPayVO.setResultCode(Resultcd); | |
| 521 | + mjonPayVO.setResultMsg(Resultmsg); | |
| 522 | + mjonPayVO.setAmt(Prdtprice); // 결제금액 | |
| 523 | + mjonPayVO.setPayMethod("BANK"); // 결제방법 | |
| 524 | + mjonPayVO.setSpayMethod(""); // 간편결제 결제방법 | |
| 525 | + mjonPayVO.setSpayDiv(""); // 간편결제분류 | |
| 526 | + | |
| 527 | + mjonPayVO.setPgCode("KGM"); // | |
| 528 | + mjonPayVO.setGoodsName(Prdtnm); // | |
| 529 | + mjonPayVO.setPhone(""); // 모바일 | |
| 530 | + mjonPayVO.setMobile(""); // 모바일 | |
| 531 | + mjonPayVO.setPayerEmail(Payeremail); | |
| 532 | + mjonPayVO.setTid(Tradeid); // Tid | |
| 533 | + mjonPayVO.setMid(Svcid); // Mid = Svcid | |
| 534 | + | |
| 535 | + // 회원정보 | |
| 536 | + mjonPayVO.setBuyerName(mberNm); | |
| 537 | + mjonPayVO.setBuyerTel(moblphonNo); | |
| 538 | + mjonPayVO.setBuyerEmail(mberEmailAdres); | |
| 539 | + mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) | |
| 540 | + | |
| 541 | + // 추가 | |
| 542 | + mjonPayVO.setBankName(Banknm); // 은행명 | |
| 543 | + | |
| 544 | + | |
| 545 | + // 상점 주문번호 결제 완료 후 생성 | |
| 546 | + mjonPayVO.setMoid(idgenPgMoid.getNextStringId()); | |
| 547 | + | |
| 548 | + //세금 값 넣기 | |
| 549 | + mjonPayVO = this.setKgmTexV2VO(mjonPayVO); | |
| 550 | + | |
| 551 | + //cash 값 넣기 | |
| 552 | + mjonPayVO = this.setKgmCashVO(mjonPayVO); | |
| 553 | + | |
| 554 | + //point 값 넣기 | |
| 555 | + mjonPayVO = this.setKgmPointVO(mjonPayVO); | |
| 556 | + | |
| 557 | + rtnMsg = "SUCCESS"; | |
| 558 | + } | |
| 559 | + }catch(Exception e) { | |
| 560 | + rtnMsg = "FAIL"; | |
| 561 | + | |
| 562 | + System.out.println("#############################################################"); | |
| 563 | + System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); | |
| 564 | + System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg); | |
| 565 | + System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage()); | |
| 566 | + } | |
| 567 | + | |
| 568 | + mjonPayVO.setRtnMsg(rtnMsg); | |
| 569 | + | |
| 570 | + return mjonPayVO; | |
| 571 | + } | |
| 572 | + | |
| 573 | + | |
| 574 | + public MjonKgmVO kgmMobileEncode(HttpServletRequest request | |
| 575 | + , String okUrl | |
| 576 | + , String notiurl) { | |
| 577 | + | |
| 578 | + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); | |
| 579 | + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); | |
| 580 | + | |
| 581 | + // Get Server Info | |
| 582 | + String kgmServerName = request.getServerName(); | |
| 583 | + String kgmPath = ""; | |
| 584 | + kgmPath = getKgServerPath(request); | |
| 585 | + | |
| 586 | + // Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회) | |
| 587 | + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS"); | |
| 588 | + String appr_dtm = dateFormat.format(new Date()); | |
| 589 | + | |
| 590 | + /*****************************************************************************************/ | |
| 591 | + String CASH_GB = "MC"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가! | |
| 592 | + | |
| 593 | + /***************************************************************************************** | |
| 594 | + - 필수 입력 항목 | |
| 595 | + *****************************************************************************************/ | |
| 596 | + String MC_SVCID = globalMcSvcid.trim(); //[ 12byte 고정] 모빌리언스에서 부여한 서비스ID (12byte 숫자 형식) | |
| 597 | + String PAY_MODE = globalMcPayMode.trim(); //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금) | |
| 598 | + String Prdtprice = request.getParameter("Prdtprice"); //결제요청금액. | |
| 599 | + String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 ) | |
| 600 | + String Siteurl = kgmServerName; //가맹점도메인 | |
| 601 | + String Tradeid = MC_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //[4byte 이상, 40byte 이하] 가맹점거래번호. 결제 요청 시 마다 unique한 값을 세팅해야 함. //해당 샘플에는 테스트를 위해 {가맹점 서비스ID + 요청일시} 형식으로 세팅하였음. | |
| 602 | + String Okurl = kgmPath + okUrl; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp ) | |
| 603 | + String Notiurl = kgmPath + notiurl; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL | |
| 604 | + | |
| 605 | + /***************************************************************************************** | |
| 606 | + - 선택 입력 항목 | |
| 607 | + *****************************************************************************************/ | |
| 608 | + String Userid = userId; //가맹점결제자ID | |
| 609 | + String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용. | |
| 610 | + | |
| 611 | + | |
| 612 | + /***************************************************************************************** | |
| 613 | + - 암호화 처리 (암호화 사용 시) | |
| 614 | + Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다. | |
| 615 | + | |
| 616 | + 주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로 | |
| 617 | + 암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다. | |
| 618 | + *****************************************************************************************/ | |
| 619 | + String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용 | |
| 620 | + String Cryptstring = ""; //암호화 사용 시 암호화된 스트링 | |
| 621 | + | |
| 622 | + if ("Y".equals(Cryptyn)) { | |
| 623 | + Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl) | |
| 624 | + Okurl = McashCipher.encodeString(Okurl, Tradeid); | |
| 625 | + Failurl = McashCipher.encodeString(Failurl, Tradeid); | |
| 626 | + Notiurl = McashCipher.encodeString(Notiurl, Tradeid); | |
| 627 | + Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid); | |
| 628 | + Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid); | |
| 629 | + } | |
| 630 | + | |
| 631 | + MjonKgmVO mjonKgmVO = new MjonKgmVO(); | |
| 632 | + // 필수 | |
| 633 | + mjonKgmVO.setCash_gb(CASH_GB); | |
| 634 | + mjonKgmVO.setMc_svcid(MC_SVCID); | |
| 635 | + mjonKgmVO.setPay_mode(PAY_MODE); | |
| 636 | + mjonKgmVO.setPrdtnm(Prdtnm); | |
| 637 | + mjonKgmVO.setSiteurl(Siteurl); | |
| 638 | + mjonKgmVO.setTradeid(Tradeid); | |
| 639 | + | |
| 640 | + mjonKgmVO.setUserid(Userid); | |
| 641 | + mjonKgmVO.setOkurl(Okurl); | |
| 642 | + mjonKgmVO.setNotiurl(Notiurl); | |
| 643 | + mjonKgmVO.setPrdtprice(Prdtprice); | |
| 644 | + mjonKgmVO.setCryptstring(Cryptstring); | |
| 645 | + | |
| 646 | + return mjonKgmVO; | |
| 647 | + } | |
| 648 | + | |
| 649 | + public MjonPayVO kgmMobileNotiUrl(HttpServletResponse response | |
| 650 | + , HttpServletRequest request | |
| 651 | + ) throws Exception { | |
| 652 | + //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 | |
| 653 | + response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); | |
| 654 | + | |
| 655 | + /*****************************************************************************************/ | |
| 656 | + MjonPayVO mjonPayVO = new MjonPayVO(); | |
| 657 | + String rtnMsg = ""; | |
| 658 | + String CASH_GB = "MC"; //[ 2byte 고정] 결제수단구분. "MC" 고정값. 수정불가! | |
| 659 | + String Svcid = request.getParameter("Svcid"); /* 서비스아이디 */ | |
| 660 | + String Mobilid = request.getParameter("Mobilid"); /* 모빌리언스 거래번호 */ | |
| 661 | + String Signdate = request.getParameter("Signdate"); /* 결제일자 */ | |
| 662 | + String Tradeid = request.getParameter("Tradeid"); /* 상점거래번호 */ | |
| 663 | + String Mrchid = request.getParameter("Mrchid"); //[ 8byte 고정] 상점ID | |
| 664 | + String Prdtnm = request.getParameter("Prdtnm"); /* 상품명 */ | |
| 665 | + String Prdtprice = request.getParameter("Prdtprice"); /* 상품가격 */ | |
| 666 | + String Userid = request.getParameter("Userid"); /* 사용자아이디*/ | |
| 667 | + String Resultcd = request.getParameter("Resultcd"); /* 결과코드 */ | |
| 668 | + String Resultmsg = request.getParameter("Resultmsg"); //[ 100byte 이하] 결과메세지 | |
| 669 | + String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */ | |
| 670 | + | |
| 671 | + String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수 | |
| 672 | + String Commid = request.getParameter("Commid"); //[ 3byte 고정] 이통사 | |
| 673 | + String chkValue = request.getParameter("chkValue"); /* 결과값 검증 hash데이터 */ | |
| 674 | + String AutoBillKey = request.getParameter("AutoBillKey"); //[ 15byte 이하] 자동결제 최초등록키 | |
| 675 | + String No = request.getParameter("No"); //[ 11byte 이하] 폰번호 | |
| 676 | + String USERKEY = request.getParameter("USERKEY"); //[ 15byte 이하] 휴대폰정보(이통사, 휴대폰번호, 주민번호) 대체용 USERKEY | |
| 677 | + String MC_EZ_KEY = request.getParameter("Ezkey"); //[ 20byte 고정] 간소화결제 사용자키 | |
| 678 | + | |
| 679 | + System.out.println("#############################################################"); | |
| 680 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); | |
| 681 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check | |
| 682 | + try { | |
| 683 | + // Step 1. Tid로 존재여부 체크 | |
| 684 | + int tidCnt = mjonPayService.selectPayCountByTid(Tradeid); | |
| 685 | + if (tidCnt > 0) { | |
| 686 | + // 저장된 데이터 있을경우 | |
| 687 | + rtnMsg = "SUCCESS"; | |
| 688 | + | |
| 689 | + System.out.println("#############################################################"); | |
| 690 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); | |
| 691 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg2 : " + rtnMsg); | |
| 692 | + }else if (tidCnt == 0) { | |
| 693 | + // Check1. KG모빌리언스 호출아이피 체크 | |
| 694 | + if (!getIsKgmServerIp(request)) { | |
| 695 | + System.out.println("#############################################################"); | |
| 696 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리"); | |
| 697 | + | |
| 698 | + Resultcd = "9998"; | |
| 699 | + Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요."; | |
| 700 | + | |
| 701 | + try { | |
| 702 | + // 법인폰 알람여부 체크 | |
| 703 | + JoinSettingVO joinSettingVO = new JoinSettingVO(); | |
| 704 | + joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); | |
| 705 | + // SMS 체크 | |
| 706 | + if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { | |
| 707 | + // 스미싱의심 SMS 알림전송 | |
| 708 | + mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, ""); | |
| 709 | + } | |
| 710 | + | |
| 711 | + // SLACK 체크 | |
| 712 | + if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { | |
| 713 | + // Slack 메시지 발송(단순본문) | |
| 714 | + String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요."; | |
| 715 | + mjonCommon.sendSimpleSlackMsg(msg); | |
| 716 | + } | |
| 717 | + } catch (Exception e) { | |
| 718 | + System.out.println("#############################################################"); | |
| 719 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류"); | |
| 720 | + } | |
| 721 | + } | |
| 722 | + | |
| 723 | + // 저장 Start | |
| 724 | + // 사용자 정보 | |
| 725 | + String mberNm = ""; | |
| 726 | + String moblphonNo = ""; | |
| 727 | + String mberEmailAdres = ""; | |
| 728 | + MberManageVO mberManageVO = new MberManageVO(); | |
| 729 | + mberManageVO.setMberId(Userid); | |
| 730 | + MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); | |
| 731 | + if (userInfo != null) { | |
| 732 | + mberNm = userInfo.getMberNm(); | |
| 733 | + moblphonNo = userInfo.getMoblphonNo(); | |
| 734 | + mberEmailAdres = userInfo.getMberEmailAdres(); | |
| 735 | + } | |
| 736 | + | |
| 737 | + mjonPayVO.setResultCd(Resultcd); | |
| 738 | + mjonPayVO.setResultMsg(Resultmsg); | |
| 739 | + mjonPayVO.setAutoBillKey(AutoBillKey); | |
| 740 | + mjonPayVO.setCashGb(CASH_GB); | |
| 741 | + mjonPayVO.setAutoYn(""); | |
| 742 | + mjonPayVO.setCommId(Commid); | |
| 743 | + mjonPayVO.setMobileId(Mobilid); | |
| 744 | + mjonPayVO.setMrchId(Mrchid); | |
| 745 | + mjonPayVO.setPno(No); | |
| 746 | + mjonPayVO.setPrdtNm(Prdtnm); | |
| 747 | + mjonPayVO.setPrdtPrice(Prdtprice); | |
| 748 | + mjonPayVO.setSignDate(Signdate); | |
| 749 | + mjonPayVO.setSvcId(Svcid); | |
| 750 | + mjonPayVO.setTradeId(Tradeid); | |
| 751 | + mjonPayVO.setUserId(Userid); | |
| 752 | + mjonPayVO.setUserKey(USERKEY); | |
| 753 | + mjonPayVO.setMcEzKey(MC_EZ_KEY); | |
| 754 | + | |
| 755 | + // 추가정보(mj_pg) | |
| 756 | + String pgStatus = ""; | |
| 757 | + if("0000".equals(Resultcd)) { | |
| 758 | + pgStatus = "1"; // 1:결제완료 | |
| 759 | + }else { | |
| 760 | + pgStatus = "4"; // 4.결제오류 | |
| 761 | + } | |
| 762 | + mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 | |
| 763 | + mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] | |
| 764 | + mjonPayVO.setResultCode(Resultcd); | |
| 765 | + mjonPayVO.setResultMsg(Resultmsg); | |
| 766 | + mjonPayVO.setAmt(Prdtprice); // 결제금액 | |
| 767 | + mjonPayVO.setPayMethod("CELLPHONE"); // 결제방법 | |
| 768 | + mjonPayVO.setSpayMethod(""); // 간편결제 결제방법 | |
| 769 | + mjonPayVO.setSpayDiv(""); // 간편결제분류 | |
| 770 | + | |
| 771 | + mjonPayVO.setPgCode("KGM"); // | |
| 772 | + mjonPayVO.setGoodsName(Prdtnm); // | |
| 773 | + mjonPayVO.setPhone(""); // 모바일 | |
| 774 | + mjonPayVO.setMobile(""); // 모바일 | |
| 775 | + mjonPayVO.setPayerEmail(Payeremail); | |
| 776 | + mjonPayVO.setTid(Tradeid); // Tid | |
| 777 | + mjonPayVO.setMid(Svcid); // Mid = Svcid | |
| 778 | + | |
| 779 | + // 회원정보 | |
| 780 | + mjonPayVO.setBuyerName(mberNm); | |
| 781 | + mjonPayVO.setBuyerTel(moblphonNo); | |
| 782 | + mjonPayVO.setBuyerEmail(mberEmailAdres); | |
| 783 | + mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) | |
| 784 | + | |
| 785 | + // 상점 주문번호 결제 완료 후 생성 | |
| 786 | + mjonPayVO.setMoid(idgenPgMoid.getNextStringId()); | |
| 787 | + | |
| 788 | + //세금 값 넣기 | |
| 789 | + mjonPayVO = this.setKgmTexV2VO(mjonPayVO); | |
| 790 | + | |
| 791 | + //cash 값 넣기 | |
| 792 | + mjonPayVO = this.setKgmCashVO(mjonPayVO); | |
| 793 | + | |
| 794 | + //point 값 넣기 | |
| 795 | + mjonPayVO = this.setKgmPointVO(mjonPayVO); | |
| 796 | + | |
| 797 | + rtnMsg = "SUCCESS"; | |
| 798 | + } | |
| 799 | + }catch(Exception e) { | |
| 800 | + rtnMsg = "FAIL"; | |
| 801 | + | |
| 802 | + System.out.println("#############################################################"); | |
| 803 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); | |
| 804 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg); | |
| 805 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage()); | |
| 806 | + } | |
| 807 | + | |
| 808 | + mjonPayVO.setRtnMsg(rtnMsg); | |
| 809 | + | |
| 810 | + return mjonPayVO; | |
| 811 | + } | |
| 812 | + | |
| 813 | + public String slackKgPay(MjonPayVO mjonPayVO) { | |
| 814 | + | |
| 815 | + String userId = mjonPayVO.getUserId(); | |
| 816 | + String mberNm = mjonPayVO.getMberNm(); | |
| 817 | + String tradeId = mjonPayVO.getTradeId(); | |
| 818 | + String rtnMsg = ""; | |
| 819 | + try { | |
| 820 | + // 휴대폰 15만원결제 => 법인폰 알림 | |
| 821 | + if (mjonPayVO.getAmt().equals("165000")) { | |
| 822 | + // 법인폰 알람여부 체크 | |
| 823 | + JoinSettingVO joinSettingVO = new JoinSettingVO(); | |
| 824 | + joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); | |
| 825 | + // SMS 체크 | |
| 826 | + if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { | |
| 827 | + // 스미싱의심 SMS 알림전송 | |
| 828 | + mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", userId, mberNm); | |
| 829 | + } | |
| 830 | + | |
| 831 | + // SLACK 체크 | |
| 832 | + if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { | |
| 833 | + // Slack 메시지 발송(단순본문) | |
| 834 | + String msg = "[문자온] 스미싱의심/휴대폰 15만원 결제 - " + mberNm +"("+ userId + ")"; | |
| 835 | + mjonCommon.sendSimpleSlackMsg(msg); | |
| 836 | + } | |
| 837 | + | |
| 838 | + // 스미싱 의심회원으로 변경 | |
| 839 | + UserManageVO userManageVO = new UserManageVO(); | |
| 840 | + userManageVO.setSmishingYn("Y"); | |
| 841 | + userManageVO.setMberId(userId); | |
| 842 | + userManageService.updateOneUserSmishingYnNotAlert(userManageVO); | |
| 843 | + } else { | |
| 844 | + | |
| 845 | + String sandTxt = ""; | |
| 846 | + if(mjonPayVO.getPayMethod().equals("CELLPHONE")) { | |
| 847 | + sandTxt = "스미싱의심/휴대폰 첫결제"; | |
| 848 | + }else if(mjonPayVO.getPayMethod().equals("BANK")) { | |
| 849 | + sandTxt = "스미싱의심/즉시이체 첫결제"; | |
| 850 | + }else if(mjonPayVO.getPayMethod().equals("SPAY")) { | |
| 851 | + sandTxt = "스미싱의심/간편결제 첫결제"; | |
| 852 | + } | |
| 853 | + | |
| 854 | + // 대상 : 휴대폰결제, 즉시이체, 전용계좌 | |
| 855 | + // Step 1. 스미싱의심 지정 여부 | |
| 856 | + JoinSettingVO joinSettingVO = new JoinSettingVO(); | |
| 857 | + joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); | |
| 858 | + if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { | |
| 859 | + // Step 1. 개인회원 여부 체크 | |
| 860 | + int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(userId); | |
| 861 | + if (isPersnalMemberCnt == 1) { | |
| 862 | + // Step 2. 첫결제 여부 체크 | |
| 863 | + int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(userId); | |
| 864 | + if (isFirstPayCnt == 1) { | |
| 865 | + // SMS 체크 | |
| 866 | + if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { | |
| 867 | + // 스미싱의심 SMS 알림전송 | |
| 868 | + mjonNoticeSendUtil.smishingSmsNoticeSend(sandTxt, userId, mberNm); | |
| 869 | + } | |
| 870 | + | |
| 871 | + // SLACK 체크 | |
| 872 | + if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { | |
| 873 | + // Slack 메시지 발송(단순본문) | |
| 874 | + String msg = "[문자온] "+sandTxt+" - " + mberNm +"("+ userId + ")"; | |
| 875 | + mjonCommon.sendSimpleSlackMsg(msg); | |
| 876 | + } | |
| 877 | + | |
| 878 | + // 스미싱 의심회원으로 변경 | |
| 879 | + UserManageVO userManageVO = new UserManageVO(); | |
| 880 | + userManageVO.setSmishingYn("Y"); | |
| 881 | + userManageVO.setMberId(userId); | |
| 882 | + userManageService.updateOneUserSmishingYnNotAlert(userManageVO); | |
| 883 | + } | |
| 884 | + } | |
| 885 | + } | |
| 886 | + } | |
| 887 | + }catch (Exception e) { | |
| 888 | + System.out.println("#############################################################"); | |
| 889 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE 슬랙알림 & 스미싱의심 처리 Error"); | |
| 890 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + tradeId); | |
| 891 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage()); | |
| 892 | + } | |
| 893 | + | |
| 894 | + System.out.println("#############################################################"); | |
| 895 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + tradeId); | |
| 896 | + System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg); | |
| 897 | + return rtnMsg; | |
| 898 | + } | |
| 899 | + | |
| 900 | + | |
| 901 | + // Get Server Path | |
| 902 | + public static String getKgServerPath(HttpServletRequest request) { | |
| 903 | + String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort(); | |
| 904 | + if (request.getServerPort() == 80) { | |
| 905 | + kgmPath = request.getScheme() + "://" + request.getServerName(); | |
| 906 | + } | |
| 907 | + | |
| 908 | + // 테스트서버 정보 변환 | |
| 909 | + if(kgmPath.indexOf("192.168.0.125") > -1){ | |
| 910 | + kgmPath = "https://test.munjaon.co.kr:9998"; | |
| 911 | + } | |
| 912 | + | |
| 913 | + System.out.println("#############################################################"); | |
| 914 | + System.out.println("KG MOBILIANS kgServerPath : " + kgmPath); | |
| 915 | + | |
| 916 | + return kgmPath; | |
| 917 | + } | |
| 918 | + | |
| 919 | + /** | |
| 920 | + * 전달된 파라미터에 맞게 난수를 생성한다 | |
| 921 | + * @param len : 생성할 난수의 길이 | |
| 922 | + * @param dupCd : 중복 허용 여부 (1: 중복허용, 2:중복제거) | |
| 923 | + */ | |
| 924 | + public static String numberGen(int len, int dupCd ) { | |
| 925 | + Random rand = new Random(); | |
| 926 | + String numStr = ""; //난수가 저장될 변수 | |
| 927 | + | |
| 928 | + for(int i=0;i<len;i++) { | |
| 929 | + | |
| 930 | + //0~9 까지 난수 생성 | |
| 931 | + String ran = Integer.toString(rand.nextInt(10)); | |
| 932 | + | |
| 933 | + if(dupCd==1) { | |
| 934 | + //중복 허용시 numStr에 append | |
| 935 | + numStr += ran; | |
| 936 | + }else if(dupCd==2) { | |
| 937 | + //중복을 허용하지 않을시 중복된 값이 있는지 검사한다 | |
| 938 | + if(!numStr.contains(ran)) { | |
| 939 | + //중복된 값이 없으면 numStr에 append | |
| 940 | + numStr += ran; | |
| 941 | + }else { | |
| 942 | + //생성된 난수가 중복되면 루틴을 다시 실행한다 | |
| 943 | + i-=1; | |
| 944 | + } | |
| 945 | + } | |
| 946 | + } | |
| 947 | + return numStr; | |
| 948 | + } | |
| 949 | + | |
| 950 | + // Kgm Ip Check | |
| 951 | + public static boolean getIsKgmServerIp(HttpServletRequest request) { | |
| 952 | + boolean rtnVal = false; | |
| 953 | + | |
| 954 | + String[] kgmServerIpArray = { | |
| 955 | + "175.158.12.133" | |
| 956 | + , "175.158.12.140" | |
| 957 | + , "175.158.12.1" | |
| 958 | + , "116.127.121.151" | |
| 959 | + , "218.50.55.107" | |
| 960 | + , "116.127.121.132"}; | |
| 961 | + | |
| 962 | + // List 로 변환 | |
| 963 | + List<String> strList = new ArrayList<>(Arrays.asList(kgmServerIpArray)); | |
| 964 | + | |
| 965 | + // List Contains | |
| 966 | + if(strList.contains(getClientIP(request))) { | |
| 967 | + rtnVal = true; // 해당아이피 strArray에 존재 | |
| 968 | + } | |
| 969 | + | |
| 970 | + return rtnVal; | |
| 971 | + } | |
| 972 | + | |
| 973 | + // Get Ip | |
| 974 | + public static String getClientIP(HttpServletRequest request) { | |
| 975 | + 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(); | |
| 976 | + String ipMethod = "X-Forwarded-For"; | |
| 977 | + | |
| 978 | + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { | |
| 979 | + ip = request.getHeader("Proxy-Client-IP"); | |
| 980 | + ipMethod = "Proxy-Client-IP"; | |
| 981 | + } | |
| 982 | + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { | |
| 983 | + ip = request.getHeader("WL-Proxy-Client-IP"); | |
| 984 | + ipMethod = "WL-Proxy-Client-IP"; | |
| 985 | + } | |
| 986 | + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { | |
| 987 | + ip = request.getHeader("HTTP_CLIENT_IP"); | |
| 988 | + ipMethod = "HTTP_CLIENT_IP"; | |
| 989 | + } | |
| 990 | + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { | |
| 991 | + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); | |
| 992 | + ipMethod = "HTTP_X_FORWARDED_FOR"; | |
| 993 | + } | |
| 994 | + if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { | |
| 995 | + ip = request.getRemoteAddr(); | |
| 996 | + ipMethod = "getRemoteAddr"; | |
| 997 | + } | |
| 998 | + | |
| 999 | + System.out.println("#############################################################"); | |
| 1000 | + System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ipMethod); | |
| 1001 | + System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ip); | |
| 1002 | + | |
| 1003 | + return ip; | |
| 1004 | + } | |
| 1005 | + | |
| 1006 | + /** | |
| 1007 | + * @param mjonPayVO | |
| 1008 | + * @return | |
| 1009 | + * @throws Exception | |
| 1010 | + * tex 값 넣기 | |
| 1011 | + */ | |
| 1012 | + private MjonPayVO setKgmTexV2VO(MjonPayVO mjonPayVO) throws Exception{ | |
| 1013 | + | |
| 1014 | + //PG Tax테이블 변수 생성 | |
| 1015 | + mjonPayVO.setRcptType("9"); //PG결제는 세금계산서 '발행유형-[PG결제-현금영수증 유형과 동일] 1:소득공제, 2:지출증빙, 9:세금계산서', (확인필요) | |
| 1016 | + | |
| 1017 | + mjonPayVO.setRegNo(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호', | |
| 1018 | + mjonPayVO.setMobile(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호', | |
| 1019 | + mjonPayVO.setPhone(mjonPayVO.getBuyerTel()); //연락처 | |
| 1020 | + mjonPayVO.setEmail(mjonPayVO.getBuyerEmail()); //이메일 | |
| 1021 | + mjonPayVO.setRepName(mjonPayVO.getBuyerName()); //'대표자명', | |
| 1022 | + mjonPayVO.setConfirmYn("Y"); //'완료여부', | |
| 1023 | + | |
| 1024 | + return mjonPayVO; | |
| 1025 | + } | |
| 1026 | + | |
| 1027 | + /** | |
| 1028 | + * @param mjonPayVO | |
| 1029 | + * @return | |
| 1030 | + * @throws Exception | |
| 1031 | + * cash table 값 넣기 | |
| 1032 | + * 2022.04.12 JSP => mjonPayVO.getMoid() => userId 사용 제거 (휴대폰결제에서만 사용) | |
| 1033 | + */ | |
| 1034 | + private MjonPayVO setKgmCashVO(MjonPayVO mjonPayVO) throws Exception{ | |
| 1035 | + String amt = mjonPayVO.getAmt(); | |
| 1036 | + // 부가세별도 충전금액 | |
| 1037 | + amt = setCashVatNotIncluded(amt); | |
| 1038 | + | |
| 1039 | + //캐쉬 테이블 변수 생성 | |
| 1040 | + mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()) ; | |
| 1041 | + mjonPayVO.setPointId(idgenMjonPointId.getNextStringId()) ; | |
| 1042 | + mjonPayVO.setCash(Float.parseFloat(amt)); //'사용 캐쉬-양수:지급, 음수:소모', | |
| 1043 | + mjonPayVO.setOrderId(mjonPayVO.getMoid()); //'주문번호-주문번호가 없으면 관리자 임의 지급', | |
| 1044 | + mjonPayVO.setUserId(mjonPayVO.getUserId()); | |
| 1045 | + mjonPayVO.setFrstRegisterId(mjonPayVO.getUserId()); | |
| 1046 | + String s_paymethod = mjonPayVO.getPayMethod(); | |
| 1047 | + String spaydiv = mjonPayVO.getSpayDiv(); | |
| 1048 | + | |
| 1049 | + if(s_paymethod.equals("CARD")){ | |
| 1050 | + s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001) | |
| 1051 | + }else if(s_paymethod.equals("SPAY")){ | |
| 1052 | + s_paymethod = "간편결제" ; // 간편결제 | |
| 1053 | + if(spaydiv.equals("NAV")){ | |
| 1054 | + s_paymethod = "간편결제(네이버페이)" ; | |
| 1055 | + } | |
| 1056 | + else if(spaydiv.equals("KKO")){ | |
| 1057 | + s_paymethod = "간편결제(카카오페이)" ; | |
| 1058 | + } | |
| 1059 | + else if(spaydiv.equals("TOS")){ | |
| 1060 | + s_paymethod = "간편결제(토스페이)" ; | |
| 1061 | + } | |
| 1062 | + else if(spaydiv.equals("PYC")){ | |
| 1063 | + s_paymethod = "간편결제(페이코)" ; | |
| 1064 | + } | |
| 1065 | + }else if(s_paymethod.equals("BANK")){ | |
| 1066 | + s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000) | |
| 1067 | + }else if(s_paymethod.equals("CELLPHONE")){ | |
| 1068 | + s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000) | |
| 1069 | + }else if(s_paymethod.equals("VBANK")){ | |
| 1070 | + s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100) | |
| 1071 | + }else if(s_paymethod.equals("SSG_BANK")){ | |
| 1072 | + s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000) | |
| 1073 | + }else if(s_paymethod.equals("CMS_BANK")){ | |
| 1074 | + s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000) | |
| 1075 | + }else { | |
| 1076 | + s_paymethod = ""; | |
| 1077 | + } | |
| 1078 | + | |
| 1079 | + String memo = s_paymethod + " " + amt + "원 충전" ; | |
| 1080 | + mjonPayVO.setMemo(memo); //캐쉬메모 | |
| 1081 | + | |
| 1082 | + return mjonPayVO; | |
| 1083 | + } | |
| 1084 | + | |
| 1085 | + /** | |
| 1086 | + * @param mjonPayVO | |
| 1087 | + * @return | |
| 1088 | + * @throws Exception | |
| 1089 | + * point table 값 넣기 | |
| 1090 | + */ | |
| 1091 | + private MjonPayVO setKgmPointVO(MjonPayVO mjonPayVO) throws Exception{ | |
| 1092 | + | |
| 1093 | + String s_paymethod = mjonPayVO.getPayMethod(); | |
| 1094 | + String spaydiv = mjonPayVO.getSpayDiv(); | |
| 1095 | + | |
| 1096 | + if(s_paymethod.equals("CARD")){ | |
| 1097 | + s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001) | |
| 1098 | + }else if(s_paymethod.equals("SPAY")){ | |
| 1099 | + s_paymethod = "간편결제" ; // 간편결제 | |
| 1100 | + if(spaydiv.equals("NAV")){ | |
| 1101 | + s_paymethod = "간편결제(네이버페이)" ; | |
| 1102 | + } | |
| 1103 | + else if(spaydiv.equals("KKO")){ | |
| 1104 | + s_paymethod = "간편결제(카카오페이)" ; | |
| 1105 | + } | |
| 1106 | + else if(spaydiv.equals("TOS")){ | |
| 1107 | + s_paymethod = "간편결제(토스페이)" ; | |
| 1108 | + } | |
| 1109 | + else if(spaydiv.equals("PYC")){ | |
| 1110 | + s_paymethod = "간편결제(페이코)" ; | |
| 1111 | + } | |
| 1112 | + }else if(s_paymethod.equals("BANK")){ | |
| 1113 | + s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000) | |
| 1114 | + }else if(s_paymethod.equals("CELLPHONE")){ | |
| 1115 | + s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000) | |
| 1116 | + }else if(s_paymethod.equals("VBANK")){ | |
| 1117 | + s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100) | |
| 1118 | + }else if(s_paymethod.equals("SSG_BANK")){ | |
| 1119 | + s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000) | |
| 1120 | + }else if(s_paymethod.equals("CMS_BANK")){ | |
| 1121 | + s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000) | |
| 1122 | + }else { | |
| 1123 | + s_paymethod = ""; | |
| 1124 | + } | |
| 1125 | + | |
| 1126 | + String s_amt = mjonPayVO.getAmt(); | |
| 1127 | + // 부가세별도 충전금액 | |
| 1128 | + s_amt = setCashVatNotIncluded(s_amt); | |
| 1129 | + | |
| 1130 | + //포인트 테이블 변수설정 | |
| 1131 | + JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); | |
| 1132 | + //int point = Math.round( (Float.parseFloat(s_amt)*2/100) ) ; | |
| 1133 | + float p_i_re_point = 0; | |
| 1134 | + if (sysJoinSetVO != null) { | |
| 1135 | + p_i_re_point = sysJoinSetVO.getPointPer(); | |
| 1136 | + } | |
| 1137 | + int point = Math.round((Float.parseFloat(s_amt)*p_i_re_point/100)) ; | |
| 1138 | + | |
| 1139 | + mjonPayVO.setPoint(point); | |
| 1140 | + | |
| 1141 | + String pointMemo = s_paymethod; //포인트 메모 | |
| 1142 | + pointMemo = pointMemo + " " + point + " 충전" ; | |
| 1143 | + | |
| 1144 | + mjonPayVO.setPointMemo(pointMemo); | |
| 1145 | + | |
| 1146 | + return mjonPayVO; | |
| 1147 | + } | |
| 1148 | + | |
| 1149 | + // 부가세별도 충전금액 | |
| 1150 | + private String setCashVatNotIncluded(String val) { | |
| 1151 | + String rtnVal = ""; | |
| 1152 | + | |
| 1153 | + // 공급대가 = 공급가액(공급대가/11*10) + 부가세(공급대가/11) | |
| 1154 | + // 11000 = (11000/11*10 ) + 11000/11 | |
| 1155 | + // 공급가액 계산로직 | |
| 1156 | + rtnVal = Math.round(Float.parseFloat(val) / 11 * 10) + ""; | |
| 1157 | + | |
| 1158 | + return rtnVal; | |
| 1159 | + } | |
| 1160 | +} |
+++ src/main/java/itn/com/cmm/util/MjonPayUtil.java
... | ... | @@ -0,0 +1,231 @@ |
| 1 | +package itn.com.cmm.util; | |
| 2 | + | |
| 3 | +import javax.annotation.Resource; | |
| 4 | + | |
| 5 | +import org.springframework.stereotype.Component; | |
| 6 | + | |
| 7 | +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; | |
| 8 | +import itn.com.cmm.LoginVO; | |
| 9 | +import itn.com.utl.fcc.service.EgovStringUtil; | |
| 10 | +import itn.let.mjo.event.service.MjonEventVO; | |
| 11 | +import itn.let.mjo.event.service.impl.MjonEventDAO; | |
| 12 | +import itn.let.mjo.pay.service.MjonPayVO; | |
| 13 | +import itn.let.mjo.pay.service.impl.MjonPayDAO; | |
| 14 | +import itn.let.mjo.tax.service.TaxVO; | |
| 15 | +import itn.let.mjo.tax.service.impl.TaxDAO; | |
| 16 | +import itn.let.sym.grd.service.MberGrdService; | |
| 17 | +import itn.let.sym.grd.service.MberGrdVO; | |
| 18 | +import itn.let.uat.uia.service.impl.MberManageDAO; | |
| 19 | +import itn.let.uss.umt.service.MberManageVO; | |
| 20 | + | |
| 21 | +@Component("mjonPayUtil") | |
| 22 | +public class MjonPayUtil { | |
| 23 | + | |
| 24 | + @Resource(name="MjonEventDAO") | |
| 25 | + private MjonEventDAO mjonEventDAO; | |
| 26 | + | |
| 27 | + @Resource(name="mberManageDAO") | |
| 28 | + private MberManageDAO mberManageDAO; | |
| 29 | + | |
| 30 | + @Resource(name="mjonPayDAO") | |
| 31 | + private MjonPayDAO mjonPayDAO; | |
| 32 | + | |
| 33 | + @Resource(name="taxDAO") | |
| 34 | + private TaxDAO taxDAO; | |
| 35 | + | |
| 36 | + /* 등급제 */ | |
| 37 | + @Resource(name = "mberGrdService") | |
| 38 | + MberGrdService mberGrdService; | |
| 39 | + | |
| 40 | + /** | |
| 41 | + * @param mjonPayVO | |
| 42 | + * @throws Exception | |
| 43 | + */ | |
| 44 | + public void insertPayUtil(MjonPayVO mjonPayVO) throws Exception { | |
| 45 | + | |
| 46 | + | |
| 47 | + if("anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) { | |
| 48 | + | |
| 49 | + }else { | |
| 50 | + // 기존 mjonPayVO의 userId 값에 moid 값이 들어가게 되어서 세션에서 아이디를 받아와서 다시 입력하도록 수정함 20220330 우영두 | |
| 51 | + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); | |
| 52 | + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); | |
| 53 | + String buyerName = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); | |
| 54 | + String email = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getEmail()); | |
| 55 | + String mobile = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getMoblphonNo()); | |
| 56 | + mjonPayVO.setUserId(userId); | |
| 57 | + mjonPayVO.setFrstRegisterId(userId); | |
| 58 | + mjonPayVO.setBuyerName(buyerName); | |
| 59 | + mjonPayVO.setEmail(email); | |
| 60 | + mjonPayVO.setPhone(mobile); | |
| 61 | + mjonPayVO.setMobile(mobile); | |
| 62 | + } | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + //PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update | |
| 67 | + mjonPayDAO.insertMjPg(mjonPayVO); | |
| 68 | + | |
| 69 | + //세금계산서,현금영수증 자동발행 체크 / 자동발행 'N'이며 10만원 이상 결제시 현금영수증 의무발행 | |
| 70 | + MberManageVO mberManageVO = mberManageDAO.selectMber(mjonPayVO.getUserId()); //멤버ID에서 유니크ID로 수정 필요 | |
| 71 | + | |
| 72 | + // 세금계산서 자동발행이고,카드결제가 아닐경우에만 자동발행 | |
| 73 | + if(("B".equals(mberManageVO.getTaxbillAuto()) || "C".equals(mberManageVO.getTaxbillAuto())) && !"CARD".equals(mjonPayVO.getPayMethod())) { | |
| 74 | + TaxVO taxVO = new TaxVO(); | |
| 75 | + | |
| 76 | + /*발행타입 1:소득공제 현금영수증 2:지출증빙 현금영수증 9:세금계산서*/ | |
| 77 | + String rcptType; | |
| 78 | + String regNo=""; | |
| 79 | + | |
| 80 | + if("B".equals(mberManageVO.getTaxbillAuto())) { //세금계산서 기업 자동발행 | |
| 81 | + rcptType = "9"; | |
| 82 | + taxVO.setTaxTrgt("B"); | |
| 83 | + | |
| 84 | + regNo = mberManageVO.getTaxBizNo(); //사업자등록번호 | |
| 85 | + | |
| 86 | + taxVO.setCompanyName(mberManageVO.getTaxBzNm());//회사명 | |
| 87 | + taxVO.setRepName(mberManageVO.getTaxChrmNm());//대표자명 | |
| 88 | + taxVO.setAddr(mberManageVO.getTaxAddr());//세금계산서 주소 | |
| 89 | + | |
| 90 | + }else if("C".equals(mberManageVO.getTaxbillAuto())) { //세금계산서 개인 자동발행 | |
| 91 | + rcptType = "9"; | |
| 92 | + taxVO.setTaxTrgt("C"); | |
| 93 | + regNo = mberManageVO.getTaxCIhidNum(); // 세금계산서 개인 주민등록번호 | |
| 94 | + taxVO.setRepName(mberManageVO.getTaxCNm()); //세금계산서 개인 성명 | |
| 95 | + taxVO.setAddr(mberManageVO.getTaxCAddr()); //세금계산서 개인 주소 | |
| 96 | + | |
| 97 | + } else { //현금영수증 자동발행 | |
| 98 | + rcptType = mberManageVO.getCashbillType(); | |
| 99 | + } | |
| 100 | + taxVO.setMoid(mjonPayVO.getMoid()); //주문ID | |
| 101 | + taxVO.setRcptType(rcptType);//발행타입 | |
| 102 | + /*발행번호 개인세금계산서:주민등록번호 / 기업세금계산서:사업자번호 / 소득공제현금영수증:휴대폰번호 / 지출증빙현금영수증:사업자번호*/ | |
| 103 | + taxVO.setRegNo(regNo); | |
| 104 | + taxVO.setEmail(mberManageVO.getTaxMngEmail());//담당자이메일 | |
| 105 | + taxVO.setPhone(mberManageVO.getTaxMngPhoneNum());//담당자 휴대폰번호 | |
| 106 | + taxVO.setConfirmYn("N"); //완료여부 | |
| 107 | + taxVO.setFrstRegisterId(mberManageVO.getMberId()); | |
| 108 | + | |
| 109 | + // JSPark 2022.07.01 => 휴대폰결제는 MJ_TAX 테이블에 인서트 안함 | |
| 110 | + if(!"CELLPHONE".equals(mjonPayVO.getPayMethod())) { | |
| 111 | + taxDAO.insertCashBill(taxVO); | |
| 112 | + } | |
| 113 | + } | |
| 114 | + //세금계산서 자동발행 설정이 아니면서, 결제금액이 10만원 이상인 경우 현금영수증 의무발행 데이터 등록 필요 | |
| 115 | + if("N".equals(mberManageVO.getTaxbillAuto()) && Integer.parseInt(mjonPayVO.getAmt()) >= 100000 && !"CARD".equals(mjonPayVO.getPayMethod())) { | |
| 116 | + //결제금액이 10만원 넘는 경우 : 현금영수증 의무발행 요청 등록 | |
| 117 | + TaxVO taxVO = new TaxVO(); | |
| 118 | + | |
| 119 | + taxVO.setRcptType("3");//발행타입 : 3, 의무발행 | |
| 120 | + taxVO.setMoid(mjonPayVO.getMoid()); | |
| 121 | + taxVO.setRegNo("0100001234"); //의무발행번호 | |
| 122 | + taxVO.setEmail(mberManageVO.getTaxMngEmail());//담당자이메일 | |
| 123 | + taxVO.setPhone(mberManageVO.getTaxMngPhoneNum());//담당자 휴대폰번호 | |
| 124 | + taxVO.setConfirmYn("N"); //완료여부 | |
| 125 | + taxVO.setFrstRegisterId(mberManageVO.getMberId()); | |
| 126 | + | |
| 127 | + // JSPark 2022.07.01 => 휴대폰결제는 MJ_TAX 테이블에 인서트 안함 | |
| 128 | + if(!"CELLPHONE".equals(mjonPayVO.getPayMethod())) { | |
| 129 | + taxDAO.insertCashBill(taxVO); | |
| 130 | + } | |
| 131 | + } | |
| 132 | + | |
| 133 | + //CASH 테이블 | |
| 134 | + mjonPayDAO.insertCash(mjonPayVO); | |
| 135 | + | |
| 136 | + //회원정보 CASH 업데이트 | |
| 137 | + mjonPayDAO.updateMemberCash(mjonPayVO); | |
| 138 | + | |
| 139 | + // 회원별 등급 적용 | |
| 140 | + MberGrdVO mberGrdVO = new MberGrdVO(); | |
| 141 | + mberGrdVO.setMberId(mjonPayVO.getUserId()); | |
| 142 | + mberGrdVO.setAmt(mjonPayVO.getAmt()); | |
| 143 | + mberGrdVO.setMoid(mjonPayVO.getMoid()); | |
| 144 | + mberGrdService.mberGrdSaveByUser(mberGrdVO); | |
| 145 | + } | |
| 146 | + | |
| 147 | + /** | |
| 148 | + * 일반 포인트 등록 Utile | |
| 149 | + * @param mjonPayVO | |
| 150 | + * @throws Exception | |
| 151 | + */ | |
| 152 | + public void updatePointUtile(MjonPayVO mjonPayVO) throws Exception { | |
| 153 | + mjonPayDAO.insertPoint(mjonPayVO); //POINT 테이블 | |
| 154 | + mjonPayDAO.updateMemberPoint(mjonPayVO); //회원정보 업데이트 | |
| 155 | + } | |
| 156 | + | |
| 157 | + | |
| 158 | + /** | |
| 159 | + * 첫 결제 이벤트 포인트 등록 Utile | |
| 160 | + * @param mjonPayVO | |
| 161 | + * @throws Exception | |
| 162 | + */ | |
| 163 | + public void updateFirstEventPointUtile(MjonPayVO mjonPayVO) throws Exception { | |
| 164 | + | |
| 165 | + /** | |
| 166 | + * 이벤트 페이지에서 넘어온 경우에만 이벤트 결제로 취급 | |
| 167 | + * 이벤트 대상자인 경우 이벤트 회원 정보에 결제 금액 및 이벤트 시작일/종료일, 상태값 변경 | |
| 168 | + * | |
| 169 | + * */ | |
| 170 | + | |
| 171 | + int payCash = (int) mjonPayVO.getCash(); | |
| 172 | + int limitCash = 500000; //이벤트 참여 최대 금액 50만원으로 설정 | |
| 173 | + | |
| 174 | + //이벤트 대상자인 경우에는 포인트를 무조건 지급하지 않는다. | |
| 175 | + //차후에 민원이 제가되면 해당 민원인만 관리자가 포인트를 별도 지급하도록 하기로 함. | |
| 176 | + mjonPayVO.setPoint(0); | |
| 177 | + mjonPayVO.setPointMemo("첫 결제 이벤트로 인한 포인트 미지급 0원으로 지급처리함."); | |
| 178 | + mjonPayDAO.insertPoint(mjonPayVO); //POINT 테이블 | |
| 179 | + mjonPayDAO.updateMemberPoint(mjonPayVO); //회원정보 업데이트 | |
| 180 | + | |
| 181 | + if(payCash >= limitCash) { | |
| 182 | + //결제금액이 50만원을 넘었기 때문에 50만원만 이벤트 캐시로 충전한다. | |
| 183 | + //포인트는 미지급 한다. | |
| 184 | + payCash = 500000; | |
| 185 | + } | |
| 186 | + | |
| 187 | + //이벤트 회원 테이블 정보 업데이트 | |
| 188 | + int resultCnt = updateEventMberInfo(mjonPayVO, payCash); | |
| 189 | + System.out.println(resultCnt); | |
| 190 | + | |
| 191 | + } | |
| 192 | + | |
| 193 | + /** | |
| 194 | + * 첫 결제 이벤트 회원 테이블 정보 업데이트 | |
| 195 | + * 이벤트 시작일, 종료일, 상태정보, 결제 금액, 잔여금액 등 정보 업데이트 | |
| 196 | + * | |
| 197 | + * */ | |
| 198 | + public int updateEventMberInfo(MjonPayVO mjonPayVO, int payCash) throws Exception { | |
| 199 | + | |
| 200 | + int resultCnt = 0; | |
| 201 | + try { | |
| 202 | + | |
| 203 | + //이벤트 회원 정보 업데이트 | |
| 204 | + MjonEventVO updtEventVO = new MjonEventVO(); | |
| 205 | + updtEventVO.setMberId(mjonPayVO.getUserId()); | |
| 206 | + updtEventVO.setEventFrstCash(payCash); //결제 Cash(부가세 뺀 금액) | |
| 207 | + updtEventVO.setEventRemainCash(payCash); //초기 금액을 결제 Cash(부가세 뺀 금액)로 설정 | |
| 208 | + updtEventVO.setEventPgMoid(mjonPayVO.getMoid()); //결제 Moid 번호 | |
| 209 | + | |
| 210 | + /** | |
| 211 | + * 이벤트 시작일 및 종료일 셋팅 | |
| 212 | + * 현재일로 부터 2개월 설정 | |
| 213 | + * DB -> datetime | |
| 214 | + * | |
| 215 | + * */ | |
| 216 | + | |
| 217 | + String nowDate = MJUtil.getRealTime(); | |
| 218 | + String eventEndDate = MJUtil.getAfterTimerMonth(2); | |
| 219 | + | |
| 220 | + updtEventVO.setEventStartDate(nowDate);//이벤트 시작일자 설정 | |
| 221 | + updtEventVO.setEventEndDate(eventEndDate);//이벤트 종료일자 설정 | |
| 222 | + updtEventVO.setEventStatus("Y");//이벤트 상태를 진행 중으로 변경 | |
| 223 | + | |
| 224 | + resultCnt = mjonEventDAO.updateEventMberStatusInfo(updtEventVO); | |
| 225 | + | |
| 226 | + } catch (Exception e) { | |
| 227 | + System.out.println("+++++++++++++ updateEventMberInfo ServiceImple Error !!! "+e); | |
| 228 | + } | |
| 229 | + return resultCnt; | |
| 230 | + } | |
| 231 | +} |
+++ src/main/java/itn/com/cmm/util/NicePayUtil.java
... | ... | @@ -0,0 +1,515 @@ |
| 1 | +package itn.com.cmm.util; | |
| 2 | + | |
| 3 | +import java.io.BufferedReader; | |
| 4 | +import java.io.InputStreamReader; | |
| 5 | +import java.io.PrintWriter; | |
| 6 | +import java.net.HttpURLConnection; | |
| 7 | +import java.net.URL; | |
| 8 | +import java.security.MessageDigest; | |
| 9 | +import java.text.SimpleDateFormat; | |
| 10 | +import java.util.Date; | |
| 11 | +import java.util.HashMap; | |
| 12 | +import java.util.Iterator; | |
| 13 | + | |
| 14 | +import javax.annotation.Resource; | |
| 15 | +import javax.servlet.http.HttpServletRequest; | |
| 16 | + | |
| 17 | +import org.apache.commons.codec.binary.Hex; | |
| 18 | +import org.json.simple.JSONObject; | |
| 19 | +import org.json.simple.parser.JSONParser; | |
| 20 | +import org.springframework.stereotype.Component; | |
| 21 | + | |
| 22 | +import egovframework.rte.fdl.idgnr.EgovIdGnrService; | |
| 23 | +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; | |
| 24 | +import itn.com.cmm.LoginVO; | |
| 25 | +import itn.com.cmm.util.MJUtil; | |
| 26 | +import itn.com.utl.fcc.service.EgovStringUtil; | |
| 27 | +import itn.let.mjo.event.service.MjonEventVO; | |
| 28 | +import itn.let.mjo.event.service.impl.MjonEventDAO; | |
| 29 | +import itn.let.mjo.msgdata.service.MjonMsgDataService; | |
| 30 | +import itn.let.mjo.pay.service.MjonPayVO; | |
| 31 | +import itn.let.mjo.pay.service.impl.MjonPayDAO; | |
| 32 | +import itn.let.mjo.tax.service.TaxVO; | |
| 33 | +import itn.let.mjo.tax.service.impl.TaxDAO; | |
| 34 | +import itn.let.sym.site.service.JoinSettingVO; | |
| 35 | +import itn.let.uat.uia.service.impl.MberManageDAO; | |
| 36 | +import itn.let.uss.umt.service.MberManageVO; | |
| 37 | + | |
| 38 | +@Component("nicePayUtil") | |
| 39 | +public class NicePayUtil { | |
| 40 | + | |
| 41 | + @Resource(name = "egovMjonCashIdGnrService") | |
| 42 | + private EgovIdGnrService idgenMjonCashId; | |
| 43 | + | |
| 44 | + @Resource(name = "egovMjonPointIdGnrService") | |
| 45 | + private EgovIdGnrService idgenMjonPointId; | |
| 46 | + | |
| 47 | + @Resource(name = "MjonMsgDataService") | |
| 48 | + private MjonMsgDataService mjonMsgDataService; | |
| 49 | + | |
| 50 | + /** | |
| 51 | + * @param mjonPayVO | |
| 52 | + * @param request | |
| 53 | + * @return | |
| 54 | + * @throws Exception | |
| 55 | + * //nicepay 정상 결제 여부 확인 | |
| 56 | + */ | |
| 57 | + public boolean pgAuth(MjonPayVO mjonPayVO , HttpServletRequest request) throws Exception { | |
| 58 | + | |
| 59 | + //Pg 결제 정상여부 체크 | |
| 60 | + boolean paySuccess = false; | |
| 61 | + | |
| 62 | + /* | |
| 63 | + **************************************************************************************** | |
| 64 | + * <인증 결과 파라미터> | |
| 65 | + **************************************************************************************** | |
| 66 | + */ | |
| 67 | + String authResultCode = (String)request.getParameter("AuthResultCode"); // 인증결과 : 0000(성공) | |
| 68 | + String authResultMsg = (String)request.getParameter("AuthResultMsg"); // 인증결과 메시지 | |
| 69 | + String nextAppURL = (String)request.getParameter("NextAppURL"); // 승인 요청 URL | |
| 70 | + String txTid = (String)request.getParameter("TxTid"); // 거래 ID | |
| 71 | + String authToken = (String)request.getParameter("AuthToken"); // 인증 TOKEN | |
| 72 | + String payMethod = (String)request.getParameter("PayMethod"); // 결제수단 | |
| 73 | + String mid = (String)request.getParameter("MID"); // 상점 아이디 | |
| 74 | + String moid = (String)request.getParameter("Moid"); // 상점 주문번호 | |
| 75 | + String amt = (String)request.getParameter("Amt"); // 결제 금액 | |
| 76 | + String reqReserved = (String)request.getParameter("ReqReserved"); // 상점 예약필드 | |
| 77 | + String netCancelURL = (String)request.getParameter("NetCancelURL"); // 망취소 요청 URL | |
| 78 | + /* | |
| 79 | + **************************************************************************************** | |
| 80 | + * <승인 결과 파라미터 정의> | |
| 81 | + * 샘플페이지에서는 승인 결과 파라미터 중 일부만 예시되어 있으며, | |
| 82 | + * 추가적으로 사용하실 파라미터는 연동메뉴얼을 참고하세요. | |
| 83 | + **************************************************************************************** | |
| 84 | + */ | |
| 85 | + String ResultCode = ""; String ResultMsg = ""; String PayMethod = ""; | |
| 86 | + String GoodsName = ""; String Amt = ""; String TID = ""; | |
| 87 | + String cardCode = ""; // 결제카드사코드 | |
| 88 | + String cardName = ""; // 결제카드사명 | |
| 89 | + String bankCode = ""; // 결제은행코드 | |
| 90 | + String bankName = ""; // 결제은행명 | |
| 91 | + | |
| 92 | + /* | |
| 93 | + **************************************************************************************** | |
| 94 | + * <인증 결과 성공시 승인 진행> | |
| 95 | + **************************************************************************************** | |
| 96 | + */ | |
| 97 | + | |
| 98 | + String resultJsonStr = ""; | |
| 99 | + if(authResultCode.equals("0000")){ | |
| 100 | + /* | |
| 101 | + **************************************************************************************** | |
| 102 | + * <해쉬암호화> (수정하지 마세요) | |
| 103 | + * SHA-256 해쉬암호화는 거래 위변조를 막기위한 방법입니다. | |
| 104 | + **************************************************************************************** | |
| 105 | + */ | |
| 106 | + DataEncrypt sha256Enc = new DataEncrypt(); | |
| 107 | + String merchantKey = "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 운영상점키 | |
| 108 | + //String merchantKey = "EYzu8jGGMfqaDEp76gSckuvnaHHu+bC4opsSN6lHv3b2lurNYkVXrZ7Z1AoqQnXI3eLuaUFyoRNC6FkrzVjceg=="; // 테스트 상점키 | |
| 109 | + String ediDate = getyyyyMMddHHmmss(); | |
| 110 | + String signData = sha256Enc.encrypt(authToken + mid + amt + ediDate + merchantKey); | |
| 111 | + | |
| 112 | + /* | |
| 113 | + **************************************************************************************** | |
| 114 | + * <승인 요청> | |
| 115 | + * 승인에 필요한 데이터 생성 후 server to server 통신을 통해 승인 처리 합니다. | |
| 116 | + **************************************************************************************** | |
| 117 | + */ | |
| 118 | + StringBuffer requestData = new StringBuffer(); | |
| 119 | + requestData.append("TID=").append(txTid).append("&"); | |
| 120 | + requestData.append("AuthToken=").append(authToken).append("&"); | |
| 121 | + requestData.append("MID=").append(mid).append("&"); | |
| 122 | + requestData.append("Amt=").append(amt).append("&"); | |
| 123 | + requestData.append("EdiDate=").append(ediDate).append("&"); | |
| 124 | + requestData.append("SignData=").append(signData); | |
| 125 | + | |
| 126 | + try { | |
| 127 | + resultJsonStr = connectToServer(requestData.toString(), nextAppURL); | |
| 128 | + } catch (Exception e) { | |
| 129 | + // TODO Auto-generated catch block | |
| 130 | + e.printStackTrace(); | |
| 131 | + } | |
| 132 | + | |
| 133 | + HashMap resultData = new HashMap(); | |
| 134 | + | |
| 135 | + if("9999".equals(resultJsonStr)){ | |
| 136 | + /* | |
| 137 | + ************************************************************************************* | |
| 138 | + * <망취소 요청> | |
| 139 | + * 승인 통신중에 Exception 발생시 망취소 처리를 권고합니다. | |
| 140 | + ************************************************************************************* | |
| 141 | + */ | |
| 142 | + StringBuffer netCancelData = new StringBuffer(); | |
| 143 | + requestData.append("&").append("NetCancel=").append("1"); | |
| 144 | + String cancelResultJsonStr = connectToServer(requestData.toString(), netCancelURL); | |
| 145 | + | |
| 146 | + HashMap cancelResultData = jsonStringToHashMap(cancelResultJsonStr); | |
| 147 | + ResultCode = (String)cancelResultData.get("ResultCode"); | |
| 148 | + ResultMsg = (String)cancelResultData.get("ResultMsg"); | |
| 149 | + }else{ | |
| 150 | + resultData = jsonStringToHashMap(resultJsonStr); | |
| 151 | + ResultCode = (String)resultData.get("ResultCode"); // 결과코드 (정상 결과코드:3001) | |
| 152 | + ResultMsg = (String)resultData.get("ResultMsg"); // 결과메시지 | |
| 153 | + PayMethod = (String)resultData.get("PayMethod"); // 결제수단 | |
| 154 | + GoodsName = (String)resultData.get("GoodsName"); // 상품명 | |
| 155 | + Amt = (String)resultData.get("Amt"); // 결제 금액 | |
| 156 | + TID = (String)resultData.get("TID"); // 거래번호 | |
| 157 | + cardCode = (String)resultData.get("CardCode"); // 결제카드사코드 | |
| 158 | + cardName = (String)resultData.get("CardName"); // 결제카드사명 | |
| 159 | + bankCode = (String)resultData.get("BankCode"); // 결제은행코드 | |
| 160 | + bankName = (String)resultData.get("BankName"); // 결제은행명 | |
| 161 | + /* | |
| 162 | + ************************************************************************************* | |
| 163 | + * <결제 성공 여부 확인> | |
| 164 | + ************************************************************************************* | |
| 165 | + */ | |
| 166 | + if(PayMethod != null){ | |
| 167 | + if(PayMethod.equals("CARD")){ | |
| 168 | + if(ResultCode.equals("3001")) paySuccess = true; // 신용카드(정상 결과코드:3001) | |
| 169 | + }else if(PayMethod.equals("BANK")){ | |
| 170 | + if(ResultCode.equals("4000")) paySuccess = true; // 계좌이체(정상 결과코드:4000) | |
| 171 | + }else if(PayMethod.equals("CELLPHONE")){ | |
| 172 | + if(ResultCode.equals("A000")) paySuccess = true; // 휴대폰(정상 결과코드:A000) | |
| 173 | + }else if(PayMethod.equals("VBANK")){ | |
| 174 | + if(ResultCode.equals("4100")) paySuccess = true; // 가상계좌(정상 결과코드:4100) | |
| 175 | + }else if(PayMethod.equals("SSG_BANK")){ | |
| 176 | + if(ResultCode.equals("0000")) paySuccess = true; // SSG은행계좌(정상 결과코드:0000) | |
| 177 | + }else if(PayMethod.equals("CMS_BANK")){ | |
| 178 | + if(ResultCode.equals("0000")) paySuccess = true; // 계좌간편결제(정상 결과코드:0000) | |
| 179 | + } | |
| 180 | + } | |
| 181 | + } | |
| 182 | + }else{ | |
| 183 | + ResultCode = authResultCode; | |
| 184 | + ResultMsg = authResultMsg; | |
| 185 | + } | |
| 186 | + | |
| 187 | + //PG테이블 변수설정 오류시에도 PG테이블에 값 insert | |
| 188 | + mjonPayVO.setPgStatus("4"); //결제오류 | |
| 189 | + mjonPayVO.setResultCode(authResultCode); | |
| 190 | + mjonPayVO.setResultMsg(ResultMsg); //'결과메시지', | |
| 191 | + mjonPayVO.setTid(txTid); // 거래 ID | |
| 192 | + mjonPayVO.setPayMethod(payMethod); // 결제수단 | |
| 193 | + mjonPayVO.setMid(mid); // 상점 아이디 | |
| 194 | + mjonPayVO.setAmt(amt); // 결제 금액 | |
| 195 | + mjonPayVO.setPgCode("INNOPAY"); //이노페이(강제세팅) | |
| 196 | + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); | |
| 197 | + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); | |
| 198 | +// userId = mjonPayVO.getMoid() ; //테스트시 화면에서 전송한 고객사 ID | |
| 199 | +// mjonPayVO.setMoid(idgenPgMoid.getNextStringId()); // 상점 주문번호 결제 완료 후 생성 | |
| 200 | + mjonPayVO.setRegNo(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호', | |
| 201 | + mjonPayVO.setMobile(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호', | |
| 202 | + mjonPayVO.setPhone(mjonPayVO.getBuyerTel()); //연락처 | |
| 203 | + mjonPayVO.setEmail(mjonPayVO.getBuyerEmail()); //이메일 | |
| 204 | + mjonPayVO.setRepName(mjonPayVO.getBuyerName()); //'대표자명', | |
| 205 | + mjonPayVO.setConfirmYn("N"); //'완료여부', | |
| 206 | + mjonPayVO.setUserId(userId); | |
| 207 | + mjonPayVO.setFrstRegisterId(userId); | |
| 208 | + mjonPayVO.setCardCode(cardCode); //결제카드사코드 | |
| 209 | + mjonPayVO.setCardName(cardName); //결제카드사명 | |
| 210 | + mjonPayVO.setBankCode(bankCode); //결제은행코드 | |
| 211 | + mjonPayVO.setBankName(bankName); //결제은행사명 | |
| 212 | + | |
| 213 | + if(!paySuccess) { | |
| 214 | + return false; | |
| 215 | + } | |
| 216 | + | |
| 217 | + //PG테이블 변수 설정-------------------------------------------------------------------------------- | |
| 218 | + if("0000".equals(authResultCode)) { // 인증결과 : 0000(성공) | |
| 219 | + mjonPayVO.setPgStatus("1"); //'결제 상태 - 0:입금대기, 1:결제완료, 4:결제오류, 9:취소완료' | |
| 220 | + mjonPayVO.setResultCode(authResultCode); //결과코드 | |
| 221 | + } | |
| 222 | + | |
| 223 | + return paySuccess ; | |
| 224 | + } | |
| 225 | + | |
| 226 | + //server to server 통신 | |
| 227 | + public String connectToServer(String data, String reqUrl) throws Exception{ | |
| 228 | + HttpURLConnection conn = null; | |
| 229 | + BufferedReader resultReader = null; | |
| 230 | + PrintWriter pw = null; | |
| 231 | + URL url = null; | |
| 232 | + | |
| 233 | + int statusCode = 0; | |
| 234 | + StringBuffer recvBuffer = new StringBuffer(); | |
| 235 | + try{ | |
| 236 | + url = new URL(reqUrl); | |
| 237 | + conn = (HttpURLConnection) url.openConnection(); | |
| 238 | + conn.setRequestMethod("POST"); | |
| 239 | + conn.setConnectTimeout(3000); | |
| 240 | + conn.setReadTimeout(5000); | |
| 241 | + conn.setDoOutput(true); | |
| 242 | + | |
| 243 | + pw = new PrintWriter(conn.getOutputStream()); | |
| 244 | + pw.write(data); | |
| 245 | + pw.flush(); | |
| 246 | + | |
| 247 | + statusCode = conn.getResponseCode(); | |
| 248 | + resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "euc-kr")); | |
| 249 | + for(String temp; (temp = resultReader.readLine()) != null;){ | |
| 250 | + recvBuffer.append(temp).append("\n"); | |
| 251 | + } | |
| 252 | + | |
| 253 | + if(!(statusCode == HttpURLConnection.HTTP_OK)){ | |
| 254 | + throw new Exception(); | |
| 255 | + } | |
| 256 | + | |
| 257 | + return recvBuffer.toString().trim(); | |
| 258 | + }catch (Exception e){ | |
| 259 | + return "9999"; | |
| 260 | + }finally{ | |
| 261 | + recvBuffer.setLength(0); | |
| 262 | + | |
| 263 | + try{ | |
| 264 | + if(resultReader != null){ | |
| 265 | + resultReader.close(); | |
| 266 | + } | |
| 267 | + }catch(Exception ex){ | |
| 268 | + resultReader = null; | |
| 269 | + } | |
| 270 | + | |
| 271 | + try{ | |
| 272 | + if(pw != null) { | |
| 273 | + pw.close(); | |
| 274 | + } | |
| 275 | + }catch(Exception ex){ | |
| 276 | + pw = null; | |
| 277 | + } | |
| 278 | + | |
| 279 | + try{ | |
| 280 | + if(conn != null) { | |
| 281 | + conn.disconnect(); | |
| 282 | + } | |
| 283 | + }catch(Exception ex){ | |
| 284 | + conn = null; | |
| 285 | + } | |
| 286 | + } | |
| 287 | + } | |
| 288 | + | |
| 289 | + //JSON String -> HashMap 변환 | |
| 290 | + public static HashMap jsonStringToHashMap(String str) throws Exception{ | |
| 291 | + HashMap dataMap = new HashMap(); | |
| 292 | + JSONParser parser = new JSONParser(); | |
| 293 | + try{ | |
| 294 | + Object obj = parser.parse(str); | |
| 295 | + JSONObject jsonObject = (JSONObject)obj; | |
| 296 | + | |
| 297 | + Iterator<String> keyStr = jsonObject.keySet().iterator(); | |
| 298 | + while(keyStr.hasNext()){ | |
| 299 | + String key = keyStr.next(); | |
| 300 | + Object value = jsonObject.get(key); | |
| 301 | + | |
| 302 | + dataMap.put(key, value); | |
| 303 | + } | |
| 304 | + }catch(Exception e){ | |
| 305 | + | |
| 306 | + } | |
| 307 | + return dataMap; | |
| 308 | + } | |
| 309 | + | |
| 310 | + public final synchronized String getyyyyMMddHHmmss(){ | |
| 311 | + SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyyMMddHHmmss"); | |
| 312 | + return yyyyMMddHHmmss.format(new Date()); | |
| 313 | + } | |
| 314 | + | |
| 315 | + // SHA-256 형식으로 암호화 | |
| 316 | + public class DataEncrypt{ | |
| 317 | + MessageDigest md; | |
| 318 | + String strSRCData = ""; | |
| 319 | + String strENCData = ""; | |
| 320 | + String strOUTData = ""; | |
| 321 | + | |
| 322 | + public DataEncrypt(){ } | |
| 323 | + public String encrypt(String strData){ | |
| 324 | + String passACL = null; | |
| 325 | + MessageDigest md = null; | |
| 326 | + try{ | |
| 327 | + md = MessageDigest.getInstance("SHA-256"); | |
| 328 | + md.reset(); | |
| 329 | + md.update(strData.getBytes()); | |
| 330 | + byte[] raw = md.digest(); | |
| 331 | + passACL = encodeHex(raw); | |
| 332 | + }catch(Exception e){ | |
| 333 | + System.out.print("암호화 에러" + e.toString()); | |
| 334 | + } | |
| 335 | + return passACL; | |
| 336 | + } | |
| 337 | + | |
| 338 | + public String encodeHex(byte [] b){ | |
| 339 | + char [] c = Hex.encodeHex(b); | |
| 340 | + return new String(c); | |
| 341 | + } | |
| 342 | + } | |
| 343 | + | |
| 344 | + // 세금 값 넣기 | |
| 345 | + public MjonPayVO setTexVO(MjonPayVO mjonPayVO) throws Exception{ | |
| 346 | + /* | |
| 347 | + * amt = mjonPayVO.setAmt(amt); // 결제 금액 | |
| 348 | + * userId = mjonPayVO.getMoid() ; //테스트시 화면에서 전송한 고객사 ID | |
| 349 | + * mjonPayVO.setPayMethod(payMethod); // 결제수단 | |
| 350 | + */ | |
| 351 | + | |
| 352 | + String s_amt = mjonPayVO.getAmt(); | |
| 353 | + // 부가세별도 충전금액 | |
| 354 | + s_amt = setCashVatNotIncluded(s_amt); | |
| 355 | + | |
| 356 | + String s_user_id = mjonPayVO.getMoid(); | |
| 357 | + | |
| 358 | + //PG Tax테이블 변수 생성 | |
| 359 | + mjonPayVO.setRcptType("9"); //PG결제는 세금계산서 '발행유형-[PG결제-현금영수증 유형과 동일] 1:소득공제, 2:지출증빙, 9:세금계산서', (확인필요) | |
| 360 | + | |
| 361 | + mjonPayVO.setRegNo(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호', | |
| 362 | + mjonPayVO.setMobile(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호', | |
| 363 | + mjonPayVO.setPhone(mjonPayVO.getBuyerTel()); //연락처 | |
| 364 | + mjonPayVO.setEmail(mjonPayVO.getBuyerEmail()); //이메일 | |
| 365 | + mjonPayVO.setRepName(mjonPayVO.getBuyerName()); //'대표자명', | |
| 366 | + mjonPayVO.setConfirmYn("Y"); //'완료여부', | |
| 367 | + | |
| 368 | + //캐쉬 테이블 변수 생성 | |
| 369 | + mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()) ; | |
| 370 | + mjonPayVO.setPointId(idgenMjonPointId.getNextStringId()) ; | |
| 371 | + mjonPayVO.setCash(Float.parseFloat(s_amt)); //'사용 캐쉬-양수:지급, 음수:소모', | |
| 372 | + | |
| 373 | + mjonPayVO.setOrderId(mjonPayVO.getMoid()); //'주문번호-주문번호가 없으면 관리자 임의 지급', | |
| 374 | + | |
| 375 | + mjonPayVO.setUserId(s_user_id); | |
| 376 | + mjonPayVO.setFrstRegisterId(s_user_id); | |
| 377 | + | |
| 378 | + return mjonPayVO; | |
| 379 | + } | |
| 380 | + | |
| 381 | + // 부가세별도 충전금액 | |
| 382 | + private String setCashVatNotIncluded(String val) { | |
| 383 | + String rtnVal = ""; | |
| 384 | + | |
| 385 | + // 공급대가 = 공급가액(공급대가/11*10) + 부가세(공급대가/11) | |
| 386 | + // 11000 = (11000/11*10 ) + 11000/11 | |
| 387 | + // 공급가액 계산로직 | |
| 388 | + rtnVal = Math.round(Float.parseFloat(val) / 11 * 10) + ""; | |
| 389 | + | |
| 390 | + return rtnVal; | |
| 391 | + } | |
| 392 | + | |
| 393 | + //cash 값 넣기 | |
| 394 | + /** | |
| 395 | + * @param mjonPayVO | |
| 396 | + * @return | |
| 397 | + * @throws Exception | |
| 398 | + * cash table 값 넣기 | |
| 399 | + */ | |
| 400 | + public MjonPayVO setCashVO(MjonPayVO mjonPayVO) throws Exception{ | |
| 401 | + /* | |
| 402 | + * amt = mjonPayVO.setAmt(amt); // 결제 금액 | |
| 403 | + * userId = mjonPayVO.getMoid() ; //테스트시 화면에서 전송한 고객사 ID | |
| 404 | + * mjonPayVO.setPayMethod(payMethod); // 결제수단 | |
| 405 | + */ | |
| 406 | + | |
| 407 | + String s_amt = mjonPayVO.getAmt(); | |
| 408 | + // 부가세별도 충전금액 | |
| 409 | + s_amt = setCashVatNotIncluded(s_amt); | |
| 410 | + | |
| 411 | + String s_user_id = mjonPayVO.getMoid(); | |
| 412 | + | |
| 413 | + //캐쉬 테이블 변수 생성 | |
| 414 | + mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()) ; | |
| 415 | + mjonPayVO.setPointId(idgenMjonPointId.getNextStringId()) ; | |
| 416 | + mjonPayVO.setCash(Float.parseFloat(s_amt)); //'사용 캐쉬-양수:지급, 음수:소모', | |
| 417 | + | |
| 418 | + mjonPayVO.setOrderId(mjonPayVO.getMoid()); //'주문번호-주문번호가 없으면 관리자 임의 지급', | |
| 419 | + | |
| 420 | + mjonPayVO.setUserId(s_user_id); | |
| 421 | + mjonPayVO.setFrstRegisterId(s_user_id); | |
| 422 | + | |
| 423 | + | |
| 424 | + String s_paymethod = mjonPayVO.getPayMethod(); | |
| 425 | + | |
| 426 | + if(s_paymethod.equals("CARD")){ | |
| 427 | + s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001) | |
| 428 | + }else if(s_paymethod.equals("BANK")){ | |
| 429 | + s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000) | |
| 430 | + }else if(s_paymethod.equals("CELLPHONE")){ | |
| 431 | + s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000) | |
| 432 | + }else if(s_paymethod.equals("VBANK")){ | |
| 433 | + s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100) | |
| 434 | + }else if(s_paymethod.equals("SSG_BANK")){ | |
| 435 | + s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000) | |
| 436 | + }else if(s_paymethod.equals("CMS_BANK")){ | |
| 437 | + s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000) | |
| 438 | + }else { | |
| 439 | + s_paymethod = ""; | |
| 440 | + } | |
| 441 | + | |
| 442 | + String memo = s_paymethod + " " + s_amt + " 충전" ; | |
| 443 | + mjonPayVO.setMemo(memo); //캐쉬메모 | |
| 444 | + | |
| 445 | + return mjonPayVO; | |
| 446 | + } | |
| 447 | + | |
| 448 | + //point 값 넣기 | |
| 449 | + /** | |
| 450 | + * @param mjonPayVO | |
| 451 | + * @return | |
| 452 | + * @throws Exception | |
| 453 | + * point table 값 넣기 | |
| 454 | + */ | |
| 455 | + public MjonPayVO setPointVO(MjonPayVO mjonPayVO) throws Exception{ | |
| 456 | + | |
| 457 | + String s_paymethod = mjonPayVO.getPayMethod(); | |
| 458 | + if(s_paymethod.equals("CARD")){ | |
| 459 | + s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001) | |
| 460 | + }else if(s_paymethod.equals("SPAY")){ | |
| 461 | + s_paymethod = "간편결제" ; // 간편결제 | |
| 462 | + }else if(s_paymethod.equals("BANK")){ | |
| 463 | + s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000) | |
| 464 | + }else if(s_paymethod.equals("CELLPHONE")){ | |
| 465 | + s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000) | |
| 466 | + }else if(s_paymethod.equals("VBANK")){ | |
| 467 | + s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100) | |
| 468 | + }else if(s_paymethod.equals("SSG_BANK")){ | |
| 469 | + s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000) | |
| 470 | + }else if(s_paymethod.equals("CMS_BANK")){ | |
| 471 | + s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000) | |
| 472 | + }else { | |
| 473 | + s_paymethod = ""; | |
| 474 | + } | |
| 475 | + | |
| 476 | + String s_amt = mjonPayVO.getAmt(); | |
| 477 | + // 부가세별도 충전금액 | |
| 478 | + s_amt = setCashVatNotIncluded(s_amt); | |
| 479 | + | |
| 480 | + //포인트 테이블 변수설정 | |
| 481 | + JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); | |
| 482 | + //int point = Math.round( (Float.parseFloat(s_amt)*2/100) ) ; | |
| 483 | + float p_i_re_point = 0; | |
| 484 | + if (sysJoinSetVO != null) { | |
| 485 | + p_i_re_point = sysJoinSetVO.getPointPer(); | |
| 486 | + } | |
| 487 | + int point = Math.round((Float.parseFloat(s_amt)*p_i_re_point/100)) ; | |
| 488 | + | |
| 489 | + mjonPayVO.setPoint(point); | |
| 490 | + | |
| 491 | + String pointMemo = s_paymethod; //포인트 메모 | |
| 492 | + pointMemo = pointMemo + " " + point + " 충전" ; | |
| 493 | + | |
| 494 | + mjonPayVO.setPointMemo(pointMemo); | |
| 495 | + | |
| 496 | + return mjonPayVO; | |
| 497 | + } | |
| 498 | + | |
| 499 | + public MjonPayVO setPayInfo(HttpServletRequest request, MjonPayVO mjonPayVO) throws Exception{ | |
| 500 | + | |
| 501 | + if(!this.pgAuth(mjonPayVO , request)) { | |
| 502 | + mjonPayVO.setPaySuccess(false); | |
| 503 | + return mjonPayVO; | |
| 504 | + } | |
| 505 | + | |
| 506 | + //세금 값 넣기 | |
| 507 | + mjonPayVO = this.setTexVO(mjonPayVO); | |
| 508 | + //cash 값 넣기 | |
| 509 | + mjonPayVO = this.setCashVO(mjonPayVO); | |
| 510 | + //point 값 넣기 | |
| 511 | + mjonPayVO = this.setPointVO(mjonPayVO); | |
| 512 | + | |
| 513 | + return mjonPayVO; | |
| 514 | + } | |
| 515 | +} |
--- src/main/java/itn/let/mjo/event/service/MjonEventService.java
+++ src/main/java/itn/let/mjo/event/service/MjonEventService.java
... | ... | @@ -1,6 +1,10 @@ |
| 1 | 1 |
package itn.let.mjo.event.service; |
| 2 | 2 |
|
| 3 |
+import javax.servlet.http.HttpServletRequest; |
|
| 4 |
+import javax.servlet.http.HttpServletResponse; |
|
| 5 |
+ |
|
| 3 | 6 |
import itn.let.cop.bbs.service.BoardVO; |
| 7 |
+import itn.let.mjo.pay.service.MjonPayVO; |
|
| 4 | 8 |
import itn.let.uss.umt.service.MberManageVO; |
| 5 | 9 |
|
| 6 | 10 |
public interface MjonEventService {
|
... | ... | @@ -35,9 +39,20 @@ |
| 35 | 39 |
//이벤트 정보 신규 추가(관리자가 강제로 입력) |
| 36 | 40 |
int insertEventFrstInfoByAdm(MjonEventVO mjonEventVO) throws Exception; |
| 37 | 41 |
|
| 38 |
- |
|
| 39 | 42 |
//현재 진행중 이벤트 상태 정보 불러오기 |
| 40 | 43 |
MjonEventCheckVO selectEventStatus(MjonEventCheckVO p_MjonEventCheckVO) throws Exception; |
| 41 | 44 |
|
| 42 | 45 |
MjonEventVO selectEventMsgMberDefaultInfo_advc(String userId) throws Exception; |
| 46 |
+ |
|
| 47 |
+ //이벤트 나이스페이 결제 |
|
| 48 |
+ MjonPayVO insertFirstEventNicePay_advc(MjonPayVO mjonPayVO, HttpServletRequest request, String p_payment_comp) throws Exception; |
|
| 49 |
+ |
|
| 50 |
+ //이벤트 kg모빌런스 모바일 결제 |
|
| 51 |
+ String insertFirstEventKgPayMobile_advc(MjonPayVO mjonPayVO, HttpServletResponse response, HttpServletRequest request) throws Exception; |
|
| 52 |
+ |
|
| 53 |
+ //이벤트 kg모빌런스 즉시이체 결제 |
|
| 54 |
+ String insertFirstEventKgPayBank_advc(MjonPayVO mjonPayVO, HttpServletResponse response, HttpServletRequest request) throws Exception; |
|
| 55 |
+ |
|
| 56 |
+ //이벤트 kg모빌런스 즉시이체 결제 |
|
| 57 |
+ String insertFirstEventKgPayCard_advc(MjonPayVO mjonPayVO, HttpServletResponse response, HttpServletRequest request) throws Exception; |
|
| 43 | 58 |
} |
--- src/main/java/itn/let/mjo/event/service/impl/MjonEventServiceImpl.java
+++ src/main/java/itn/let/mjo/event/service/impl/MjonEventServiceImpl.java
... | ... | @@ -1,11 +1,16 @@ |
| 1 | 1 |
package itn.let.mjo.event.service.impl; |
| 2 | 2 |
|
| 3 | 3 |
import javax.annotation.Resource; |
| 4 |
+import javax.servlet.http.HttpServletRequest; |
|
| 5 |
+import javax.servlet.http.HttpServletResponse; |
|
| 4 | 6 |
|
| 5 | 7 |
import org.springframework.stereotype.Service; |
| 6 | 8 |
|
| 7 | 9 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 8 | 10 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 11 |
+import itn.com.cmm.util.KgmPayUtil; |
|
| 12 |
+import itn.com.cmm.util.MjonPayUtil; |
|
| 13 |
+import itn.com.cmm.util.NicePayUtil; |
|
| 9 | 14 |
import itn.let.cop.bbs.service.BoardVO; |
| 10 | 15 |
import itn.let.mjo.event.service.MjonEventCheckVO; |
| 11 | 16 |
import itn.let.mjo.event.service.MjonEventService; |
... | ... | @@ -34,6 +39,18 @@ |
| 34 | 39 |
|
| 35 | 40 |
@Resource(name = "egovMjonPointIdGnrService") |
| 36 | 41 |
private EgovIdGnrService idgenMjonPointId; |
| 42 |
+ |
|
| 43 |
+ /* 결제 */ |
|
| 44 |
+ @Resource(name = "mjonPayUtil") |
|
| 45 |
+ MjonPayUtil mjonPayUtil; |
|
| 46 |
+ |
|
| 47 |
+ /* nicePay */ |
|
| 48 |
+ @Resource(name = "nicePayUtil") |
|
| 49 |
+ NicePayUtil nicePayUtil; |
|
| 50 |
+ |
|
| 51 |
+ /* kg */ |
|
| 52 |
+ @Resource(name = "kgmPayUtil") |
|
| 53 |
+ KgmPayUtil kgmPayUtil; |
|
| 37 | 54 |
|
| 38 | 55 |
@Override |
| 39 | 56 |
public BoardVO selectEventInfoByNttSj(BoardVO boardVO) throws Exception{
|
... | ... | @@ -160,4 +177,112 @@ |
| 160 | 177 |
public MjonEventCheckVO selectEventStatus(MjonEventCheckVO p_MjonEventCheckVO) throws Exception{
|
| 161 | 178 |
return mjonEventDAO.selectEventStatus(p_MjonEventCheckVO); |
| 162 | 179 |
} |
| 180 |
+ |
|
| 181 |
+ @Override |
|
| 182 |
+ public MjonPayVO insertFirstEventNicePay_advc( |
|
| 183 |
+ MjonPayVO mjonPayVO |
|
| 184 |
+ , HttpServletRequest request |
|
| 185 |
+ , String p_payment_comp) throws Exception {
|
|
| 186 |
+ |
|
| 187 |
+ System.out.println("START 이벤트 나이스페이결제");
|
|
| 188 |
+ //PG인증이 완료되야 테이블 insert |
|
| 189 |
+ //업체에 따라서 인증 방식이 다르다. |
|
| 190 |
+ if ("nice".equals(p_payment_comp)) {//신용카드, 즉시이제 결제 처리
|
|
| 191 |
+ if(!nicePayUtil.pgAuth(mjonPayVO , request)){
|
|
| 192 |
+ mjonPayVO.setPaySuccess(false); |
|
| 193 |
+ mjonPayDAO.insertMjPg(mjonPayVO); //오류시에도 db insert |
|
| 194 |
+ return mjonPayVO; |
|
| 195 |
+ } |
|
| 196 |
+ }else {
|
|
| 197 |
+ mjonPayVO.setPaySuccess(false); |
|
| 198 |
+ return mjonPayVO; |
|
| 199 |
+ } |
|
| 200 |
+ |
|
| 201 |
+ //세금 값 넣기 |
|
| 202 |
+ mjonPayVO = nicePayUtil.setTexVO(mjonPayVO); |
|
| 203 |
+ |
|
| 204 |
+ //cash 값 넣기 |
|
| 205 |
+ mjonPayVO = nicePayUtil.setCashVO(mjonPayVO); |
|
| 206 |
+ |
|
| 207 |
+ //point 값 넣기 |
|
| 208 |
+ mjonPayVO = nicePayUtil.setPointVO(mjonPayVO); |
|
| 209 |
+ |
|
| 210 |
+ // 결제 및 세금계산서 발행, 등급제 적용 |
|
| 211 |
+ mjonPayUtil.insertPayUtil(mjonPayVO); |
|
| 212 |
+ |
|
| 213 |
+ // 포인트 발행 |
|
| 214 |
+ mjonPayUtil.updateFirstEventPointUtile(mjonPayVO); |
|
| 215 |
+ |
|
| 216 |
+ System.out.println("END 카드결제");
|
|
| 217 |
+ |
|
| 218 |
+ mjonPayVO.setPaySuccess(true); |
|
| 219 |
+ return mjonPayVO; |
|
| 220 |
+ } |
|
| 221 |
+ |
|
| 222 |
+ @Override |
|
| 223 |
+ public String insertFirstEventKgPayMobile_advc( |
|
| 224 |
+ MjonPayVO mjonPayVO |
|
| 225 |
+ , HttpServletResponse response |
|
| 226 |
+ , HttpServletRequest request) |
|
| 227 |
+ throws Exception {
|
|
| 228 |
+ |
|
| 229 |
+ mjonPayVO = kgmPayUtil.kgmMobileNotiUrl(response, request); |
|
| 230 |
+ |
|
| 231 |
+ String rtnMsg = mjonPayVO.getRtnMsg(); |
|
| 232 |
+ String pgStatus = mjonPayVO.getPgStatus(); |
|
| 233 |
+ if(rtnMsg.equals("SUCCESS") && pgStatus.equals("1")) {
|
|
| 234 |
+ // 결제 및 세금계산서 발행, 등급제 적용 |
|
| 235 |
+ mjonPayUtil.insertPayUtil(mjonPayVO); |
|
| 236 |
+ // 포인트 발행 |
|
| 237 |
+ mjonPayUtil.updateFirstEventPointUtile(mjonPayVO); |
|
| 238 |
+ // 슬랙 전송 |
|
| 239 |
+ kgmPayUtil.slackKgPay(mjonPayVO); |
|
| 240 |
+ } |
|
| 241 |
+ return rtnMsg; |
|
| 242 |
+ } |
|
| 243 |
+ |
|
| 244 |
+ @Override |
|
| 245 |
+ public String insertFirstEventKgPayBank_advc( |
|
| 246 |
+ MjonPayVO mjonPayVO |
|
| 247 |
+ , HttpServletResponse response |
|
| 248 |
+ , HttpServletRequest request) throws Exception {
|
|
| 249 |
+ |
|
| 250 |
+ mjonPayVO = kgmPayUtil.kgmBankNotiUrl(response, request); |
|
| 251 |
+ |
|
| 252 |
+ String rtnMsg = mjonPayVO.getRtnMsg(); |
|
| 253 |
+ String pgStatus = mjonPayVO.getPgStatus(); |
|
| 254 |
+ if(rtnMsg.equals("SUCCESS") && pgStatus.equals("1")) {
|
|
| 255 |
+ // 결제 및 세금계산서 발행, 등급제 적용 |
|
| 256 |
+ mjonPayUtil.insertPayUtil(mjonPayVO); |
|
| 257 |
+ // 포인트 발행 |
|
| 258 |
+ mjonPayUtil.updateFirstEventPointUtile(mjonPayVO); |
|
| 259 |
+ // 슬랙 전송 |
|
| 260 |
+ kgmPayUtil.slackKgPay(mjonPayVO); |
|
| 261 |
+ } |
|
| 262 |
+ |
|
| 263 |
+ return rtnMsg; |
|
| 264 |
+ } |
|
| 265 |
+ |
|
| 266 |
+ @Override |
|
| 267 |
+ public String insertFirstEventKgPayCard_advc( |
|
| 268 |
+ MjonPayVO mjonPayVO |
|
| 269 |
+ , HttpServletResponse response |
|
| 270 |
+ , HttpServletRequest request) throws Exception {
|
|
| 271 |
+ |
|
| 272 |
+ |
|
| 273 |
+ mjonPayVO = kgmPayUtil.kgmCardNotiUrl(response, request); |
|
| 274 |
+ |
|
| 275 |
+ String rtnMsg = mjonPayVO.getRtnMsg(); |
|
| 276 |
+ String pgStatus = mjonPayVO.getPgStatus(); |
|
| 277 |
+ if(rtnMsg.equals("SUCCESS") && pgStatus.equals("1")) {
|
|
| 278 |
+ // 결제 및 세금계산서 발행, 등급제 적용 |
|
| 279 |
+ mjonPayUtil.insertPayUtil(mjonPayVO); |
|
| 280 |
+ // 포인트 발행 |
|
| 281 |
+ mjonPayUtil.updateFirstEventPointUtile(mjonPayVO); |
|
| 282 |
+ // 슬랙 전송 |
|
| 283 |
+ kgmPayUtil.slackKgPay(mjonPayVO); |
|
| 284 |
+ } |
|
| 285 |
+ |
|
| 286 |
+ return rtnMsg; |
|
| 287 |
+ } |
|
| 163 | 288 |
} |
--- src/main/java/itn/let/mjo/event/web/MjonEventPayV2Controller.java
+++ src/main/java/itn/let/mjo/event/web/MjonEventPayV2Controller.java
... | ... | @@ -3,34 +3,49 @@ |
| 3 | 3 |
import java.text.SimpleDateFormat; |
| 4 | 4 |
import java.util.Date; |
| 5 | 5 |
import java.util.List; |
| 6 |
+import java.util.Map; |
|
| 6 | 7 |
|
| 7 | 8 |
import javax.annotation.Resource; |
| 8 | 9 |
import javax.servlet.http.HttpServletRequest; |
| 10 |
+import javax.servlet.http.HttpServletResponse; |
|
| 11 |
+import javax.servlet.http.HttpSession; |
|
| 9 | 12 |
|
| 13 |
+import org.apache.commons.lang3.StringUtils; |
|
| 14 |
+import org.springframework.beans.factory.annotation.Value; |
|
| 15 |
+import org.springframework.http.HttpStatus; |
|
| 16 |
+import org.springframework.http.ResponseEntity; |
|
| 10 | 17 |
import org.springframework.stereotype.Controller; |
| 11 | 18 |
import org.springframework.ui.ModelMap; |
| 12 | 19 |
import org.springframework.web.bind.annotation.ModelAttribute; |
| 13 | 20 |
import org.springframework.web.bind.annotation.RequestMapping; |
| 21 |
+import org.springframework.web.bind.annotation.RequestParam; |
|
| 14 | 22 |
import org.springframework.web.servlet.HandlerMapping; |
| 23 |
+import org.springframework.web.servlet.ModelAndView; |
|
| 15 | 24 |
import org.springframework.web.servlet.mvc.support.RedirectAttributes; |
| 16 | 25 |
|
| 26 |
+import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
|
| 17 | 27 |
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; |
| 18 | 28 |
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; |
| 19 | 29 |
import itn.com.cmm.LoginVO; |
| 30 |
+import itn.com.cmm.util.KgmPayUtil; |
|
| 20 | 31 |
import itn.com.cmm.util.StringUtil; |
| 21 | 32 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 22 | 33 |
import itn.let.cop.bbs.service.BoardVO; |
| 34 |
+import itn.let.mail.service.StatusResponse; |
|
| 23 | 35 |
import itn.let.mjo.event.service.MjonEventService; |
| 24 | 36 |
import itn.let.mjo.event.service.MjonEventVO; |
| 25 | 37 |
import itn.let.mjo.msgcampain.service.MjonCandidateService; |
| 26 | 38 |
import itn.let.mjo.msgcampain.service.MjonCandidateVO; |
| 39 |
+import itn.let.mjo.pay.service.MjonKgmVO; |
|
| 27 | 40 |
import itn.let.mjo.pay.service.MjonPayService; |
| 28 | 41 |
import itn.let.mjo.pay.service.MjonPayVO; |
| 29 | 42 |
import itn.let.mjo.pay.service.MjonVaMsgLogVO; |
| 30 | 43 |
import itn.let.mjo.payva.service.VacsVactService; |
| 31 | 44 |
import itn.let.mjo.payva.service.VacsVactVO; |
| 45 |
+import itn.let.sym.site.service.JoinSettingVO; |
|
| 32 | 46 |
import itn.let.uss.umt.service.EgovMberManageService; |
| 33 | 47 |
import itn.let.uss.umt.service.MberManageVO; |
| 48 |
+import itn.let.uss.umt.service.UserManageVO; |
|
| 34 | 49 |
|
| 35 | 50 |
@Controller |
| 36 | 51 |
public class MjonEventPayV2Controller {
|
... | ... | @@ -49,6 +64,12 @@ |
| 49 | 64 |
|
| 50 | 65 |
@Resource(name = "mjonPayService") |
| 51 | 66 |
private MjonPayService mjonPayService; |
| 67 |
+ |
|
| 68 |
+ @Resource(name = "egovPgMoidGnrService") |
|
| 69 |
+ private EgovIdGnrService idgenPgMoid; |
|
| 70 |
+ |
|
| 71 |
+ @Resource(name = "kgmPayUtil") |
|
| 72 |
+ KgmPayUtil kgmPayUtil; |
|
| 52 | 73 |
|
| 53 | 74 |
|
| 54 | 75 |
/** |
... | ... | @@ -75,15 +96,6 @@ |
| 75 | 96 |
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
|
| 76 | 97 |
return "redirect:/web/user/login/login.do"; |
| 77 | 98 |
} |
| 78 |
- |
|
| 79 |
- // 하드코딩 |
|
| 80 |
- //if(!userId.equals("nobledeco")) {
|
|
| 81 |
- // if(!userId.equals("nobledeco2")) {
|
|
| 82 |
- // if(!userId.equals("nopay")) {
|
|
| 83 |
- // return "redirect:/web/main/mainPage.do"; |
|
| 84 |
- // } |
|
| 85 |
- // } |
|
| 86 |
- //} |
|
| 87 | 99 |
|
| 88 | 100 |
//기존 결제 내역이 있는 회원인지 확인 |
| 89 | 101 |
int payCnt = 0; |
... | ... | @@ -250,4 +262,285 @@ |
| 250 | 262 |
return eventMberInfo; |
| 251 | 263 |
} |
| 252 | 264 |
|
| 265 |
+ // 나이스페이 |
|
| 266 |
+ @RequestMapping(value= {"/web/event/member/pay/firstEventPayActionAjax.do"})
|
|
| 267 |
+ public String firstEventPayAction( |
|
| 268 |
+ @ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO
|
|
| 269 |
+ , HttpServletRequest request |
|
| 270 |
+ , ModelMap model) throws Exception{
|
|
| 271 |
+ |
|
| 272 |
+ String pattern = (String) request.getAttribute( |
|
| 273 |
+ HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; |
|
| 274 |
+ |
|
| 275 |
+ mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "pay/firstPayResultAjax.do") ;
|
|
| 276 |
+ LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); |
|
| 277 |
+ //테스트 |
|
| 278 |
+ mjonPayVO.setBuyerName(loginVO.getName()); //구매자 이름 |
|
| 279 |
+ mjonPayVO.setBuyerEmail(loginVO.getEmail()); //구매자 이메일 |
|
| 280 |
+ mjonPayVO.setBuyerTel(loginVO.getMoblphonNo()); //구매자 휴대폰 번호 |
|
| 281 |
+ //moid 생성 위치 변경 |
|
| 282 |
+ mjonPayVO.setMoid(idgenPgMoid.getNextStringId()); |
|
| 283 |
+ |
|
| 284 |
+ //결제 페이지 |
|
| 285 |
+ mjonPayVO.setReturnURL("/web/event/member/pay/firstEventPayResultAjax.do");
|
|
| 286 |
+ |
|
| 287 |
+ model.addAttribute("mjonPayVO", mjonPayVO);
|
|
| 288 |
+ return "web/cop/nicepay/payRequestMber"; |
|
| 289 |
+ } |
|
| 290 |
+ |
|
| 291 |
+ @RequestMapping( value = {"/web/event/member/pay/firstEventPayResultAjax.do"})
|
|
| 292 |
+ public String firstEventPayResult(HttpServletRequest request, |
|
| 293 |
+ ModelMap model , @RequestParam Map<String, Object> commandMap, |
|
| 294 |
+ @ModelAttribute("searchVO") MjonPayVO mjonPayVO) throws Exception {
|
|
| 295 |
+ |
|
| 296 |
+ String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; |
|
| 297 |
+ |
|
| 298 |
+ //mjonPayVO.setReturnURL(request.getRequestURL().toString().split("nice")[0] + "payResult.do") ;
|
|
| 299 |
+ MjonPayVO returnMjonPayVO = new MjonPayVO(); |
|
| 300 |
+ mjonPayVO.setPageType("event");
|
|
| 301 |
+ |
|
| 302 |
+ // returnMjonPayVO = mjonPayService.insertPay(mjonPayVO , request, "nice" ); //PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update |
|
| 303 |
+ returnMjonPayVO = mjonEventService.insertFirstEventNicePay_advc(mjonPayVO , request, "nice" ); //PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update |
|
| 304 |
+ |
|
| 305 |
+ model.addAttribute("mjonPayVO", returnMjonPayVO);
|
|
| 306 |
+ if(pattern.equals("/web/member/pay/payResultAjax.do")){
|
|
| 307 |
+ model.addAttribute("userPage", true);
|
|
| 308 |
+ } |
|
| 309 |
+ |
|
| 310 |
+ return "web/cop/nicepay/payResultAjax"; |
|
| 311 |
+ } |
|
| 312 |
+ |
|
| 313 |
+ |
|
| 314 |
+ // KG모빌런스 |
|
| 315 |
+ ///////////////////////////////////////////////////////////////////////////////////////// |
|
| 316 |
+ // |
|
| 317 |
+ // Mobile Start |
|
| 318 |
+ // |
|
| 319 |
+ /** |
|
| 320 |
+ * KGM 정보 Encode |
|
| 321 |
+ * @param MjonPayVO |
|
| 322 |
+ * @param modelAndView |
|
| 323 |
+ * @return /web/event/member/pay/firstEventKgmMobileEncodeAjax.do |
|
| 324 |
+ * @throws Exception |
|
| 325 |
+ */ |
|
| 326 |
+ @RequestMapping(value = "/web/event/member/pay/firstEventKgmMobileEncodeAjax.do") |
|
| 327 |
+ public ResponseEntity<StatusResponse> firstEventKgmMobileEncodeAjax( |
|
| 328 |
+ MjonPayVO mjonPayVO |
|
| 329 |
+ , HttpServletRequest request ) throws Exception {
|
|
| 330 |
+ |
|
| 331 |
+ LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); |
|
| 332 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 333 |
+ |
|
| 334 |
+ if(StringUtils.isEmpty(userId)) {
|
|
| 335 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", "")); |
|
| 336 |
+ } |
|
| 337 |
+ |
|
| 338 |
+ MjonKgmVO mjonKgmVO = kgmPayUtil.kgmMobileEncode(request |
|
| 339 |
+ , "/web/event/member/pay/firstEventOkUrlMobileAjax.do" |
|
| 340 |
+ , "/web/event/member/pay/firstEventNotiUrlMobileAjax.do"); |
|
| 341 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", mjonKgmVO)); |
|
| 342 |
+ } |
|
| 343 |
+ |
|
| 344 |
+ @RequestMapping(value= {"/web/event/member/pay/firstEventOkUrlMobileAjax.do"})
|
|
| 345 |
+ public String firstEventOkUrlMobileAjax( |
|
| 346 |
+ HttpServletRequest request |
|
| 347 |
+ , HttpSession session |
|
| 348 |
+ , HttpServletResponse response |
|
| 349 |
+ , ModelMap model |
|
| 350 |
+ ) throws Exception{
|
|
| 351 |
+ |
|
| 352 |
+ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 |
|
| 353 |
+ response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
|
| 354 |
+ |
|
| 355 |
+ String rstMsg = ""; |
|
| 356 |
+ if("0000".equals(request.getParameter("Resultcd"))) {
|
|
| 357 |
+ rstMsg = "휴대폰결제가 정상적으로 완료되었습니다."; |
|
| 358 |
+ } |
|
| 359 |
+ else {
|
|
| 360 |
+ rstMsg = "휴대폰결제가 실패했습니다."; |
|
| 361 |
+ } |
|
| 362 |
+ |
|
| 363 |
+ model.addAttribute("Resultcd", request.getParameter("Resultcd"));
|
|
| 364 |
+ model.addAttribute("Resultmsg", rstMsg);
|
|
| 365 |
+ |
|
| 366 |
+ System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
|
| 367 |
+ System.out.println("KG MOBILIANS OkUrl - MOBILE ResultCd : " + request.getParameter("Resultcd"));
|
|
| 368 |
+ System.out.println("KG MOBILIANS OkUrl - MOBILE ResultMsg : " + rstMsg);
|
|
| 369 |
+ |
|
| 370 |
+ return "web/cop/kgmV2/mobileOkUrl"; |
|
| 371 |
+ } |
|
| 372 |
+ |
|
| 373 |
+ @RequestMapping(value= {"/web/event/member/pay/firstEventNotiUrlMobileAjax.do"})
|
|
| 374 |
+ public String firstEventNotiUrlMobileAjax(HttpServletRequest request, HttpServletResponse response |
|
| 375 |
+ , @ModelAttribute("searchVO") MjonPayVO mjonPayVO
|
|
| 376 |
+ , ModelMap model) throws Exception{
|
|
| 377 |
+ |
|
| 378 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 379 |
+ modelAndView.setViewName("jsonView");
|
|
| 380 |
+ |
|
| 381 |
+ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 |
|
| 382 |
+ response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
|
| 383 |
+ |
|
| 384 |
+ String rtnMsg = mjonEventService.insertFirstEventKgPayMobile_advc(mjonPayVO, response, request); |
|
| 385 |
+ |
|
| 386 |
+ model.addAttribute("returnMsg", rtnMsg);
|
|
| 387 |
+ |
|
| 388 |
+ return "web/cop/kgmV2/mobileNotiUrl"; |
|
| 389 |
+ } |
|
| 390 |
+ |
|
| 391 |
+ ///////////////////////////////////////////////////////////////////////////////////////// |
|
| 392 |
+ // |
|
| 393 |
+ // BANK Start |
|
| 394 |
+ // |
|
| 395 |
+ /** |
|
| 396 |
+ * KGM 정보 Encode |
|
| 397 |
+ * @param MjonPayVO |
|
| 398 |
+ * @param modelAndView |
|
| 399 |
+ * @return /web/event/member/pay/kgmEncodeAjax.do |
|
| 400 |
+ * @throws Exception |
|
| 401 |
+ */ |
|
| 402 |
+ @RequestMapping(value = "/web/event/member/pay/firstEventKgmBankEncodeAjax.do") |
|
| 403 |
+ public ResponseEntity<StatusResponse> firstEventKgmBankEncodeAjax( |
|
| 404 |
+ MjonPayVO mjonPayVO |
|
| 405 |
+ , HttpServletRequest request ) throws Exception {
|
|
| 406 |
+ |
|
| 407 |
+ LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); |
|
| 408 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 409 |
+ |
|
| 410 |
+ if(StringUtils.isEmpty(userId)) {
|
|
| 411 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", "")); |
|
| 412 |
+ } |
|
| 413 |
+ |
|
| 414 |
+ MjonKgmVO mjonKgmVO = kgmPayUtil.kgmBankEncode(request |
|
| 415 |
+ , "/web/event/member/pay/firstEventOkUrlBankAjax.do" |
|
| 416 |
+ , "/web/event/member/pay/firstEventNotiUrlBankAjax.do"); |
|
| 417 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", mjonKgmVO)); |
|
| 418 |
+ } |
|
| 419 |
+ |
|
| 420 |
+ @RequestMapping(value= {"/web/event/member/pay/firstEventOkUrlBankAjax.do"})
|
|
| 421 |
+ public String okUrlBankAjax( |
|
| 422 |
+ HttpServletRequest request |
|
| 423 |
+ , HttpSession session |
|
| 424 |
+ , HttpServletResponse response |
|
| 425 |
+ , ModelMap model |
|
| 426 |
+ ) throws Exception{
|
|
| 427 |
+ |
|
| 428 |
+ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 |
|
| 429 |
+ response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
|
| 430 |
+ |
|
| 431 |
+ String rstMsg = ""; |
|
| 432 |
+ if("0000".equals(request.getParameter("Resultcd"))) {
|
|
| 433 |
+ rstMsg = "즉시이체가 정상적으로 완료되었습니다."; |
|
| 434 |
+ } |
|
| 435 |
+ else {
|
|
| 436 |
+ rstMsg = "즉시이체가 실패했습니다."; |
|
| 437 |
+ } |
|
| 438 |
+ |
|
| 439 |
+ model.addAttribute("Resultcd", request.getParameter("Resultcd"));
|
|
| 440 |
+ model.addAttribute("Resultmsg", rstMsg);
|
|
| 441 |
+ |
|
| 442 |
+ System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
|
| 443 |
+ System.out.println("KG MOBILIANS OkUrl - BANK ResultCd : " + request.getParameter("Resultcd"));
|
|
| 444 |
+ System.out.println("KG MOBILIANS OkUrl - BANK ResultMsg : " + rstMsg);
|
|
| 445 |
+ |
|
| 446 |
+ return "web/cop/kgmV2/bankOkUrl"; |
|
| 447 |
+ } |
|
| 448 |
+ /** |
|
| 449 |
+ * KGM Bank 결제notiUrl 페이지 |
|
| 450 |
+ * @param searchVO |
|
| 451 |
+ * @param model |
|
| 452 |
+ * @throws Exception |
|
| 453 |
+ */ |
|
| 454 |
+ @RequestMapping(value= {"/web/event/member/pay/firstEventNotiUrlBankAjax.do"})
|
|
| 455 |
+ public String notiUrlBankAjax(HttpServletRequest request, HttpServletResponse response |
|
| 456 |
+ , @ModelAttribute("searchVO") MjonPayVO mjonPayVO
|
|
| 457 |
+ , ModelMap model) throws Exception{
|
|
| 458 |
+ |
|
| 459 |
+ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 |
|
| 460 |
+ response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
|
| 461 |
+ |
|
| 462 |
+ String rtnMsg = mjonEventService.insertFirstEventKgPayBank_advc(mjonPayVO, response, request); |
|
| 463 |
+ |
|
| 464 |
+ model.addAttribute("returnMsg", rtnMsg);
|
|
| 465 |
+ |
|
| 466 |
+ return "web/cop/kgmV2/bankNotiUrl"; |
|
| 467 |
+ } |
|
| 468 |
+ |
|
| 469 |
+ ///////////////////////////////////////////////////////////////////////////////////////// |
|
| 470 |
+ // |
|
| 471 |
+ // card Start |
|
| 472 |
+ // |
|
| 473 |
+ /** |
|
| 474 |
+ * KGM 정보 Encode |
|
| 475 |
+ * @param MjonPayVO |
|
| 476 |
+ * @param modelAndView |
|
| 477 |
+ * @return /web/event/member/pay/firstEventKgmCardEncodeAjax.do |
|
| 478 |
+ * @throws Exception |
|
| 479 |
+ */ |
|
| 480 |
+ @RequestMapping(value = "/web/event/member/pay/firstEventKgmCardEncodeAjax.do") |
|
| 481 |
+ public ResponseEntity<StatusResponse> firstEventKgmCardEncodeAjax( |
|
| 482 |
+ MjonPayVO mjonPayVO |
|
| 483 |
+ , HttpServletRequest request ) throws Exception {
|
|
| 484 |
+ |
|
| 485 |
+ LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); |
|
| 486 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 487 |
+ |
|
| 488 |
+ if(StringUtils.isEmpty(userId)) {
|
|
| 489 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", "")); |
|
| 490 |
+ } |
|
| 491 |
+ |
|
| 492 |
+ MjonKgmVO mjonKgmVO = kgmPayUtil.kgmCardEncode(request |
|
| 493 |
+ , "/web/event/member/pay/firstEventOkUrlCardAjax.do" |
|
| 494 |
+ , "/web/event/member/pay/firstEventNotiUrlCardAjax.do"); |
|
| 495 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", mjonKgmVO)); |
|
| 496 |
+ } |
|
| 497 |
+ |
|
| 498 |
+ @RequestMapping(value= {"/web/event/member/pay/firstEventOkUrlCardAjax.do"})
|
|
| 499 |
+ public String firstEventOkUrlCardAjax( |
|
| 500 |
+ HttpServletRequest request |
|
| 501 |
+ , HttpSession session |
|
| 502 |
+ , HttpServletResponse response |
|
| 503 |
+ , ModelMap model |
|
| 504 |
+ ) throws Exception{
|
|
| 505 |
+ |
|
| 506 |
+ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 |
|
| 507 |
+ response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
|
| 508 |
+ |
|
| 509 |
+ String rstMsg = ""; |
|
| 510 |
+ if("0000".equals(request.getParameter("Resultcd"))) {
|
|
| 511 |
+ rstMsg = "즉시이체가 정상적으로 완료되었습니다."; |
|
| 512 |
+ } |
|
| 513 |
+ else {
|
|
| 514 |
+ rstMsg = "즉시이체가 실패했습니다."; |
|
| 515 |
+ } |
|
| 516 |
+ |
|
| 517 |
+ model.addAttribute("Resultcd", request.getParameter("Resultcd"));
|
|
| 518 |
+ model.addAttribute("Resultmsg", rstMsg);
|
|
| 519 |
+ |
|
| 520 |
+ System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
|
| 521 |
+ System.out.println("KG MOBILIANS OkUrl - CARD ResultCd : " + request.getParameter("Resultcd"));
|
|
| 522 |
+ System.out.println("KG MOBILIANS OkUrl - CARD ResultMsg : " + rstMsg);
|
|
| 523 |
+ |
|
| 524 |
+ return "web/cop/kgmV2/cardOkUrl"; |
|
| 525 |
+ } |
|
| 526 |
+ /** |
|
| 527 |
+ * KGM card 결제notiUrl 페이지 |
|
| 528 |
+ * @param searchVO |
|
| 529 |
+ * @param model |
|
| 530 |
+ * @throws Exception |
|
| 531 |
+ */ |
|
| 532 |
+ @RequestMapping(value= {"/web/event/member/pay/firstEventNotiUrlCardAjax.do"})
|
|
| 533 |
+ public String firstEventNotiUrlCardAjax(HttpServletRequest request, HttpServletResponse response |
|
| 534 |
+ , @ModelAttribute("searchVO") MjonPayVO mjonPayVO
|
|
| 535 |
+ , ModelMap model) throws Exception{
|
|
| 536 |
+ |
|
| 537 |
+ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 |
|
| 538 |
+ response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
|
|
| 539 |
+ |
|
| 540 |
+ String rtnMsg = mjonEventService.insertFirstEventKgPayBank_advc(mjonPayVO, response, request); |
|
| 541 |
+ |
|
| 542 |
+ model.addAttribute("returnMsg", rtnMsg);
|
|
| 543 |
+ |
|
| 544 |
+ return "web/cop/kgmV2/cardNotiUrl"; |
|
| 545 |
+ } |
|
| 253 | 546 |
} |
+++ src/main/java/itn/let/mjo/pay/service/MjonKgmVO.java
... | ... | @@ -0,0 +1,103 @@ |
| 1 | +package itn.let.mjo.pay.service; | |
| 2 | + | |
| 3 | +import lombok.Getter; | |
| 4 | +import lombok.Setter; | |
| 5 | + | |
| 6 | +@Getter | |
| 7 | +@Setter | |
| 8 | +public class MjonKgmVO{ | |
| 9 | + | |
| 10 | + /*****************************************************************************************/ | |
| 11 | + String cash_gb = ""; // 대표결제수단 | |
| 12 | + | |
| 13 | + /***************************************************************************************** | |
| 14 | + - 필수 입력 항목 | |
| 15 | + *****************************************************************************************/ | |
| 16 | + String ver = ""; //ALL_NEW : 버전설정 고정 | |
| 17 | + String cn_svcid = ""; //서비스아이디 : CN | |
| 18 | + String mc_svcid = ""; //서비스아이디 : MC | |
| 19 | + String ra_svcid = ""; //서비스아이디 : RA | |
| 20 | + | |
| 21 | + String pay_mode = ""; //연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금) | |
| 22 | + String prdtprice = ""; //결제요청금액. | |
| 23 | + String prdtnm = "캐시충전"; //상품명 ( 50byte 이내 ) | |
| 24 | + String siteurl = ""; //가맹점도메인 | |
| 25 | + String tradeid = ""; //가맹점거래번호 //결제 요청 시 마다 unique한 값을 세팅해야 함. | |
| 26 | + String okurl = ""; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp ) | |
| 27 | + String notiurl = ""; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL | |
| 28 | + | |
| 29 | + /***************************************************************************************** | |
| 30 | + - 디자인 관련 필수항목 | |
| 31 | + *****************************************************************************************/ | |
| 32 | + String logo_yn = "N"; //가맹점 로고 사용 여부 (N: 모빌리언스 로고-default, Y: 가맹점 로고 (사전에 모빌리언스에 가맹점 로고 이미지를 등록해야함)) | |
| 33 | + String call_type = "P"; //결제창 호출 방식 (P: 팝업-default, SELF: 페이지전환, I: 아이프레임) | |
| 34 | + | |
| 35 | + /***************************************************************************************** | |
| 36 | + - 디자인 관련 선택항목 (향후 변경될 수 있습니다.) | |
| 37 | + *****************************************************************************************/ | |
| 38 | + String iframe_name = ""; //결제창을 iframe으로 호출 할 경우 iframe 명칭 세팅 | |
| 39 | + String infoarea_yn = ""; //결제창 안내문 표시여부 (Y: 표시-default, N: 미표시) | |
| 40 | + String footer_yn = ""; //결제창 하단 안내 표시여부 (Y: 표시-default, N: 미표시) | |
| 41 | + String height = ""; //결제창 높이 (px단위: iframe 등 사용시 결제창 높이 조절, 팝업창 등 호출시 "" 로 세팅) | |
| 42 | + String prdt_hidden = ""; //iframe 사용시 상품명 숨김 여부 (가맹점 디자인 결제창으로 결제 입력 사항만 iframe에서 사용시) | |
| 43 | + String email_hidden = ""; //결제자 e-mail 입력창 숨김 여부 (N: 표시-default, Y: 미표시) | |
| 44 | + String contract_hidden = ""; //이용약관 숨김 여부 (Y: 표시-default, N: 미표시) | |
| 45 | + | |
| 46 | + /***************************************************************************************** | |
| 47 | + - 선택 입력 항목 | |
| 48 | + *****************************************************************************************/ | |
| 49 | + String userid = ""; //가맹점결제자ID | |
| 50 | + String username = ""; //결제자명 | |
| 51 | + String payeremail = ""; //결제자email | |
| 52 | + String notiemail = ""; //알림 e-mail: 결제 완료 후 당사와 가맹점간의 Noti 연동이 실패한 경우 알람 메일을 받을 가맹점 담당자 이메일주소 | |
| 53 | + String item = ""; //아이템코드. 미사용 시 반드시 공백으로 세팅. | |
| 54 | + String prdtcd = ""; //상품코드. 자동결제인 경우 상품코드별 SMS문구를 별도 세팅할 때 사용하며 사전에 모빌리언스에 등록이 필요함. | |
| 55 | + String closeurl = ""; //닫기버튼 클릭 시 호출되는 가맹점 측 페이지. CALL_TYPE = ‘I’ 또는 ‘SELF’ 셋팅 시 필수 | |
| 56 | + String failurl = ""; //결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지 | |
| 57 | + String mstr = ""; //가맹점콜백변수 //가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &,%,?,^ 는 사용불가 ( 예 : MSTR="a=1|b=2|c=3" ) | |
| 58 | + String deposit = ""; //일회용컵보증금 | |
| 59 | + | |
| 60 | + | |
| 61 | + /***************************************************************************************** | |
| 62 | + - 간편결제 : CN | |
| 63 | + *****************************************************************************************/ | |
| 64 | + String termregno = ""; //하위가맹점사업자번호 | |
| 65 | + String app_scheme = ""; //APP SCHEME | |
| 66 | + String cn_billtype = ""; //매출전표 출력 시 과세/비과세 구분 | |
| 67 | + String cn_taxfree = ""; //비과세 | |
| 68 | + String cn_tax = ""; //부과세 - 전체금액의 10%이하로 설정 | |
| 69 | + String cn_freeinterest = ""; //무이자할부정보 | |
| 70 | + String cn_point = ""; //카드사포인트사용여부 | |
| 71 | + String cn_install = ""; //할부개월 | |
| 72 | + String cn_fixcardcd = ""; //카드사 선택노출 '결제창에 노출할 카드사 코드 셋팅 | |
| 73 | + String cn_direct = ""; //카드사 직접호출 ( 예 : KBC:00:N ) | |
| 74 | + | |
| 75 | + /***************************************************************************************** | |
| 76 | + - 휴대폰결제 : MC | |
| 77 | + *****************************************************************************************/ | |
| 78 | + String mc_authpay = ""; //하이브리드 방식 사용시 "Y" 로 설정 (휴대폰 SMS인증 후 일반 소켓모듈 결제 연동시 사용) (N: 미사용-default, Y: 사용) | |
| 79 | + String mc_autopay = ""; //자동결제를 위한 최초 일반결제 시 "Y" 세팅. 결제 완료 후 휴대폰정보 대체용 USERKEY 발급 및 자동결제용 AutoBillKey 발급 (N: 미사용-default, Y: 사용) | |
| 80 | + String mc_partpay = ""; //부분취소를 위한 일반결제 시 "Y" 세팅. 결제 완료 후 자동결제 USERKEY 발급 (N: 미사용-default, Y: 사용) | |
| 81 | + String mc_no = ""; //사용자 폰번호 (결제창 호출시 세팅할 폰번호) | |
| 82 | + String mc_fixno = ""; //사용자 폰번호 수정불가 여부(N: 수정가능-default, Y: 수정불가) | |
| 83 | + String mc_defaultcommid = ""; //통신사 기본 선택 값. SKT, KTF, LGT 3개의 값 중 원하는 통신사 세팅 시 해당 통신사가 미리 선택되어짐. | |
| 84 | + String mc_fixcommid = ""; //통신사 고정 선택 값. SKT, KTF, LGT 3개의 값 중 원하는 통신사 세팅 시 해당 통신사만 결제창에 보여짐. | |
| 85 | + String mc_cpcode = ""; //리셀러하위상점key. 리셀러 업체인 경우에만 세팅. | |
| 86 | + String mc_ez_yn = "Y"; //간소화결제여부. 간소화결제 사용시 "Y" 로 설정 (N: 미사용-default, Y: 사용) | |
| 87 | + String mc_ez_key = ""; //간소화결제 사용자키 | |
| 88 | + | |
| 89 | + /***************************************************************************************** | |
| 90 | + - 즉시이체 : RA | |
| 91 | + *****************************************************************************************/ | |
| 92 | + | |
| 93 | + | |
| 94 | + /***************************************************************************************** | |
| 95 | + - 암호화 처리 (암호화 사용 시) | |
| 96 | + Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다. | |
| 97 | + | |
| 98 | + 주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로 | |
| 99 | + 암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다. | |
| 100 | + *****************************************************************************************/ | |
| 101 | + String cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용 | |
| 102 | + String cryptstring = ""; //암호화 사용 시 암호화된 스트링 | |
| 103 | +} |
--- src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
+++ src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
... | ... | @@ -236,8 +236,8 @@ |
| 236 | 236 |
|
| 237 | 237 |
private int remainPoint; |
| 238 | 238 |
|
| 239 |
- |
|
| 239 |
+ private String payType; // 결제분류 |
|
| 240 | 240 |
private String totChgPay; // 간편결제분류 |
| 241 | 241 |
|
| 242 |
- |
|
| 242 |
+ private String rtnMsg; |
|
| 243 | 243 |
} |
--- src/main/webapp/WEB-INF/jsp/web/cop/nicepay/payRequestMber.jsp
+++ src/main/webapp/WEB-INF/jsp/web/cop/nicepay/payRequestMber.jsp
... | ... | @@ -119,7 +119,9 @@ |
| 119 | 119 |
</head> |
| 120 | 120 |
<body> |
| 121 | 121 |
<!-- <form name="payForm" method="post" action="payResult.jsp"> --> |
| 122 |
-<form name="payForm" method="post" action="payResultAjax.do"> |
|
| 122 |
+<!-- <form name="payForm" method="post" action="payResultAjax.do"> --> |
|
| 123 |
+<form name="payForm" method="post" action="${mjonPayVO.returnURL}">
|
|
| 124 |
+<input type="hidden" id="pageType" value="${mjonPayVO.pageType}">
|
|
| 123 | 125 |
<input type="hidden" name="PayMethod" value="${mjonPayVO.payMethod}">
|
| 124 | 126 |
<table class="payTable"> |
| 125 | 127 |
<!-- <tr> |
--- src/main/webapp/WEB-INF/jsp/web/event/pay/EventPayView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/event/pay/EventPayView.jsp
... | ... | @@ -314,14 +314,14 @@ |
| 314 | 314 |
setNextPayMethod(); |
| 315 | 315 |
|
| 316 | 316 |
var payMethod = ""; |
| 317 |
- document.pgForm.action = "/web/member/pay/PayActionAjax.do"; |
|
| 317 |
+ document.pgForm.action = "/web/event/member/pay/firstEventPayActionAjax.do"; |
|
| 318 | 318 |
|
| 319 | 319 |
if ($currentTab==0) {
|
| 320 | 320 |
payMethod = "CARD"; |
| 321 | 321 |
} else if($currentTab==1) {
|
| 322 | 322 |
payMethod = "VBANK"; |
| 323 | 323 |
} else if($currentTab==2) {
|
| 324 |
- payMethod = "BANK"; |
|
| 324 |
+ payMethod = "BANK"; |
|
| 325 | 325 |
} else {
|
| 326 | 326 |
payMethod = "SPAY"; |
| 327 | 327 |
} |
... | ... | @@ -361,7 +361,8 @@ |
| 361 | 361 |
// 전용계좌 |
| 362 | 362 |
} else if ($currentTab==2) {
|
| 363 | 363 |
// KG 모빌리언스 => BANK(즉시이체) |
| 364 |
- kgmPayBankRequest(); |
|
| 364 |
+ firstEventKgmPayBankRequest(); |
|
| 365 |
+ // kgmPayMobileRequest() |
|
| 365 | 366 |
} else {
|
| 366 | 367 |
var cnDirect = ""; |
| 367 | 368 |
var mstr = ""; |
... | ... | @@ -380,16 +381,140 @@ |
| 380 | 381 |
} |
| 381 | 382 |
|
| 382 | 383 |
// KG 모빌리언스 => SPAY(간편결제) |
| 383 |
- kgmPayCardRequest(cnDirect, mstr); |
|
| 384 |
+ kgmPaySpayRequest(cnDirect, mstr); |
|
| 384 | 385 |
} |
| 385 | 386 |
|
| 386 | 387 |
} |
| 387 | 388 |
|
| 388 |
-//KG 모빌리언스 => CARD |
|
| 389 |
-function kgmPayCardRequest(cnDirect, mstr) {
|
|
| 389 |
+//KG 모빌리언스 => MOBILE |
|
| 390 |
+function kgmPayMobileRequest() {
|
|
| 390 | 391 |
$.ajax({
|
| 391 | 392 |
type: "POST", |
| 392 |
- url: "/web/member/pay/kgmCardEncodeAjax.do", |
|
| 393 |
+ url: "/web/event/member/pay/firstEventKgmMobileEncodeAjax.do", |
|
| 394 |
+ data: {"Prdtprice": $("#price").val()},
|
|
| 395 |
+ dataType:'json', |
|
| 396 |
+ async: false, |
|
| 397 |
+ success: function (data) {
|
|
| 398 |
+ if (data.status == "OK") {
|
|
| 399 |
+ var vo = data.object |
|
| 400 |
+ var form = document.payMobileForm; |
|
| 401 |
+ |
|
| 402 |
+ form.CASH_GB.value = vo.cash_gb; |
|
| 403 |
+ form.Okurl.value = vo.okurl; |
|
| 404 |
+ form.MC_SVCID.value = vo.mc_svcid; |
|
| 405 |
+ form.Prdtnm.value = vo.prdtnm; |
|
| 406 |
+ form.Prdtprice.value = vo.prdtprice; |
|
| 407 |
+ form.Siteurl.value = vo.siteurl; |
|
| 408 |
+ form.PAY_MODE.value = vo.pay_mode; |
|
| 409 |
+ form.Tradeid.value = vo.tradeid; |
|
| 410 |
+ form.LOGO_YN.value = vo.logo_yn; |
|
| 411 |
+ form.CALL_TYPE.value = vo.call_type; |
|
| 412 |
+ form.MC_AUTHPAY.value = vo.mc_authpay; |
|
| 413 |
+ form.Notiurl.value = vo.notiurl; |
|
| 414 |
+ form.MC_AUTOPAY.value = vo.mc_autopay; |
|
| 415 |
+ form.Closeurl.value = vo.closeurl; |
|
| 416 |
+ form.MC_PARTPAY.value = vo.mc_partpay; |
|
| 417 |
+ form.Failurl.value = vo.failurl; |
|
| 418 |
+ form.MC_No.value = vo.mc_no; |
|
| 419 |
+ form.MC_FIXNO.value = vo.mc_fixno; |
|
| 420 |
+ form.MC_Cpcode.value = vo.mc_cpcode; |
|
| 421 |
+ form.Userid.value = vo.userid; |
|
| 422 |
+ form.Item.value = vo.item; |
|
| 423 |
+ form.Prdtcd.value = vo.prdtcd; |
|
| 424 |
+ form.Payeremail.value = vo.payeremail; |
|
| 425 |
+ form.MC_DEFAULTCOMMID.value = vo.mc_defaultcommid; |
|
| 426 |
+ form.MC_FIXCOMMID.value = vo.mc_fixcommid; |
|
| 427 |
+ form.MSTR.value = vo.mstr; |
|
| 428 |
+ form.Sellernm.value = vo.sellernm; |
|
| 429 |
+ form.Sellertel.value = vo.sellertel; |
|
| 430 |
+ form.Notiemail.value = vo.notiemail; |
|
| 431 |
+ form.IFRAME_NAME.value = vo.iframe_name; |
|
| 432 |
+ form.INFOAREA_YN.value = vo.infoarea_yn; |
|
| 433 |
+ form.FOOTER_YN.value = vo.footer_yn; |
|
| 434 |
+ form.HEIGHT.value = vo.height; |
|
| 435 |
+ form.PRDT_HIDDEN.value = vo.prdt_hidden; |
|
| 436 |
+ form.EMAIL_HIDDEN.value = vo.email_hidden; |
|
| 437 |
+ form.CONTRACT_HIDDEN.value = vo.contract_hidden; |
|
| 438 |
+ form.Cryptyn.value = vo.cryptyn; |
|
| 439 |
+ form.Cryptstring.value = vo.cryptstring; |
|
| 440 |
+ form.MC_EZ_YN.value = vo.mc_ez_yn; |
|
| 441 |
+ form.MC_EZ_KEY.value = vo.mc_ez_key; |
|
| 442 |
+ form.MC_PUSH_KEY.value = vo.mc_push_key; |
|
| 443 |
+ |
|
| 444 |
+ //아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출 |
|
| 445 |
+ MCASH_PAYMENT(form); |
|
| 446 |
+ } |
|
| 447 |
+ else {
|
|
| 448 |
+ alert("Msg : " + data.msg);
|
|
| 449 |
+ } |
|
| 450 |
+ }, |
|
| 451 |
+ error: function (e) {
|
|
| 452 |
+ alert("ERROR : " + JSON.stringify(e));
|
|
| 453 |
+ } |
|
| 454 |
+ }); |
|
| 455 |
+} |
|
| 456 |
+ |
|
| 457 |
+//KG 모빌리언스 => BANK(즉시이체) |
|
| 458 |
+function firstEventKgmPayBankRequest() {
|
|
| 459 |
+ $.ajax({
|
|
| 460 |
+ type: "POST" |
|
| 461 |
+ , url: "/web/event/member/pay/firstEventKgmBankEncodeAjax.do" |
|
| 462 |
+ , data: {"Prdtprice": $("#price").val()}
|
|
| 463 |
+ , dataType:'json' |
|
| 464 |
+ , success: function (data) {
|
|
| 465 |
+ if (data.status == "OK") {
|
|
| 466 |
+ var vo = data.object |
|
| 467 |
+ var form = document.payBankForm; |
|
| 468 |
+ |
|
| 469 |
+ form.CASH_GB.value = vo.cash_gb; |
|
| 470 |
+ form.Okurl.value = vo.okurl; |
|
| 471 |
+ form.RA_SVCID.value = vo.ra_svcid; |
|
| 472 |
+ form.Prdtnm.value = vo.prdtnm; |
|
| 473 |
+ form.Prdtprice.value = vo.prdtprice; |
|
| 474 |
+ form.Siteurl.value = vo.siteurl; |
|
| 475 |
+ form.PAY_MODE.value = vo.pay_mode; |
|
| 476 |
+ form.Tradeid.value = vo.tradeid; |
|
| 477 |
+ form.LOGO_YN.value = vo.logo_yn; |
|
| 478 |
+ form.CALL_TYPE.value = vo.call_type; |
|
| 479 |
+ form.Notiurl.value = vo.notiurl; |
|
| 480 |
+ form.Closeurl.value = vo.closeurl; |
|
| 481 |
+ form.Failurl.value = vo.failurl; |
|
| 482 |
+ form.Userid.value = vo.userid; |
|
| 483 |
+ form.Item.value = vo.item; |
|
| 484 |
+ form.Prdtcd.value = vo.prdtcd; |
|
| 485 |
+ form.Payeremail.value = vo.payeremail; |
|
| 486 |
+ form.MSTR.value = vo.mstr; |
|
| 487 |
+ form.Notiemail.value = vo.notiemail; |
|
| 488 |
+ form.IFRAME_NAME.value = vo.iframe_name; |
|
| 489 |
+ form.INFOAREA_YN.value = vo.infoarea_yn; |
|
| 490 |
+ form.FOOTER_YN.value = vo.footer_yn; |
|
| 491 |
+ form.HEIGHT.value = vo.height; |
|
| 492 |
+ form.PRDT_HIDDEN.value = vo.prdt_hidden; |
|
| 493 |
+ form.EMAIL_HIDDEN.value = vo.email_hidden; |
|
| 494 |
+ form.CONTRACT_HIDDEN.value = vo.contract_hidden; |
|
| 495 |
+ form.Cryptyn.value = vo.cryptyn; |
|
| 496 |
+ form.Cryptstring.value = vo.cryptstring; |
|
| 497 |
+ form.Deposit.value = vo.deposit; |
|
| 498 |
+ form.Billyn.value = "N"; |
|
| 499 |
+ |
|
| 500 |
+ //아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출 |
|
| 501 |
+ MCASH_PAYMENT(form); |
|
| 502 |
+ } |
|
| 503 |
+ else {
|
|
| 504 |
+ alert("Msg : " + data.msg);
|
|
| 505 |
+ } |
|
| 506 |
+ }, |
|
| 507 |
+ error: function (e) {
|
|
| 508 |
+ alert("ERROR : " + JSON.stringify(e));
|
|
| 509 |
+ } |
|
| 510 |
+ }); |
|
| 511 |
+} |
|
| 512 |
+ |
|
| 513 |
+//KG 모빌리언스 => SPAY(간편결제) |
|
| 514 |
+function kgmPaySpayRequest(cnDirect, mstr) {
|
|
| 515 |
+ $.ajax({
|
|
| 516 |
+ type: "POST", |
|
| 517 |
+ url: "/web/event/member/pay/firstEventKgmCardEncodeAjax.do", |
|
| 393 | 518 |
data: {"Prdtprice": $("#price").val()},
|
| 394 | 519 |
dataType:'json', |
| 395 | 520 |
async: false, |
... | ... | @@ -440,126 +565,6 @@ |
| 440 | 565 |
}); |
| 441 | 566 |
} |
| 442 | 567 |
|
| 443 |
-//KG 모빌리언스 => MOBILE |
|
| 444 |
-function kgmPayMobileRequest() {
|
|
| 445 |
- $.ajax({
|
|
| 446 |
- type: "POST", |
|
| 447 |
- url: "/web/member/pay/kgmMobileEncodeAjax.do", |
|
| 448 |
- data: {"Prdtprice": $("#price").val()},
|
|
| 449 |
- dataType:'json', |
|
| 450 |
- async: false, |
|
| 451 |
- success: function (data) {
|
|
| 452 |
- if (data.isSuccess) {
|
|
| 453 |
- var form = document.payMobileForm; |
|
| 454 |
- form.CASH_GB.value = data.CASH_GB; |
|
| 455 |
- form.Okurl.value = data.Okurl; |
|
| 456 |
- form.MC_SVCID.value = data.MC_SVCID; |
|
| 457 |
- form.Prdtnm.value = data.Prdtnm; |
|
| 458 |
- form.Prdtprice.value = data.Prdtprice; |
|
| 459 |
- form.Siteurl.value = data.Siteurl; |
|
| 460 |
- form.PAY_MODE.value = data.PAY_MODE; |
|
| 461 |
- form.Tradeid.value = data.Tradeid; |
|
| 462 |
- form.LOGO_YN.value = data.LOGO_YN; |
|
| 463 |
- form.CALL_TYPE.value = data.CALL_TYPE; |
|
| 464 |
- form.MC_AUTHPAY.value = data.MC_AUTHPAY; |
|
| 465 |
- form.Notiurl.value = data.Notiurl; |
|
| 466 |
- form.MC_AUTOPAY.value = data.MC_AUTOPAY; |
|
| 467 |
- form.Closeurl.value = data.Closeurl; |
|
| 468 |
- form.MC_PARTPAY.value = data.MC_PARTPAY; |
|
| 469 |
- form.Failurl.value = data.Failurl; |
|
| 470 |
- form.MC_No.value = data.MC_No; |
|
| 471 |
- form.MC_FIXNO.value = data.MC_FIXNO; |
|
| 472 |
- form.MC_Cpcode.value = data.MC_Cpcode; |
|
| 473 |
- form.Userid.value = data.Userid; |
|
| 474 |
- form.Item.value = data.Item; |
|
| 475 |
- form.Prdtcd.value = data.Prdtcd; |
|
| 476 |
- form.Payeremail.value = data.Payeremail; |
|
| 477 |
- form.MC_DEFAULTCOMMID.value = data.MC_DEFAULTCOMMID; |
|
| 478 |
- form.MC_FIXCOMMID.value = data.MC_FIXCOMMID; |
|
| 479 |
- form.MSTR.value = data.MSTR; |
|
| 480 |
- form.Sellernm.value = data.Sellernm; |
|
| 481 |
- form.Sellertel.value = data.Sellertel; |
|
| 482 |
- form.Notiemail.value = data.Notiemail; |
|
| 483 |
- form.IFRAME_NAME.value = data.IFRAME_NAME; |
|
| 484 |
- form.INFOAREA_YN.value = data.INFOAREA_YN; |
|
| 485 |
- form.FOOTER_YN.value = data.FOOTER_YN; |
|
| 486 |
- form.HEIGHT.value = data.HEIGHT; |
|
| 487 |
- form.PRDT_HIDDEN.value = data.PRDT_HIDDEN; |
|
| 488 |
- form.EMAIL_HIDDEN.value = data.EMAIL_HIDDEN; |
|
| 489 |
- form.CONTRACT_HIDDEN.value = data.CONTRACT_HIDDEN; |
|
| 490 |
- form.Cryptyn.value = data.Cryptyn; |
|
| 491 |
- form.Cryptstring.value = data.Cryptstring; |
|
| 492 |
- form.MC_EZ_YN.value = data.MC_EZ_YN; |
|
| 493 |
- form.MC_EZ_KEY.value = data.MC_EZ_KEY; |
|
| 494 |
- form.MC_PUSH_KEY.value = data.MC_PUSH_KEY; |
|
| 495 |
- |
|
| 496 |
- //아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출 |
|
| 497 |
- MCASH_PAYMENT(form); |
|
| 498 |
- } |
|
| 499 |
- else {
|
|
| 500 |
- alert("Msg : " + data.msg);
|
|
| 501 |
- } |
|
| 502 |
- }, |
|
| 503 |
- error: function (e) {
|
|
| 504 |
- alert("ERROR : " + JSON.stringify(e));
|
|
| 505 |
- } |
|
| 506 |
- }); |
|
| 507 |
-} |
|
| 508 |
- |
|
| 509 |
-//KG 모빌리언스 => BANK |
|
| 510 |
-function kgmPayBankRequest() {
|
|
| 511 |
- $.ajax({
|
|
| 512 |
- type: "POST", |
|
| 513 |
- url: "/web/member/pay/kgmBankEncodeAjax.do", |
|
| 514 |
- data: {"Prdtprice": $("#price").val()},
|
|
| 515 |
- dataType:'json', |
|
| 516 |
- async: false, |
|
| 517 |
- success: function (data) {
|
|
| 518 |
- if (data.isSuccess) {
|
|
| 519 |
- var form = document.payBankForm; |
|
| 520 |
- form.CASH_GB.value = data.CASH_GB; |
|
| 521 |
- form.Okurl.value = data.Okurl; |
|
| 522 |
- form.RA_SVCID.value = data.RA_SVCID; |
|
| 523 |
- form.Prdtnm.value = data.Prdtnm; |
|
| 524 |
- form.Prdtprice.value = data.Prdtprice; |
|
| 525 |
- form.Siteurl.value = data.Siteurl; |
|
| 526 |
- form.PAY_MODE.value = data.PAY_MODE; |
|
| 527 |
- form.Tradeid.value = data.Tradeid; |
|
| 528 |
- form.LOGO_YN.value = data.LOGO_YN; |
|
| 529 |
- form.CALL_TYPE.value = data.CALL_TYPE; |
|
| 530 |
- form.Notiurl.value = data.Notiurl; |
|
| 531 |
- form.Closeurl.value = data.Closeurl; |
|
| 532 |
- form.Failurl.value = data.Failurl; |
|
| 533 |
- form.Userid.value = data.Userid; |
|
| 534 |
- form.Item.value = data.Item; |
|
| 535 |
- form.Prdtcd.value = data.Prdtcd; |
|
| 536 |
- form.Payeremail.value = data.Payeremail; |
|
| 537 |
- form.MSTR.value = data.MSTR; |
|
| 538 |
- form.Notiemail.value = data.Notiemail; |
|
| 539 |
- form.IFRAME_NAME.value = data.IFRAME_NAME; |
|
| 540 |
- form.INFOAREA_YN.value = data.INFOAREA_YN; |
|
| 541 |
- form.FOOTER_YN.value = data.FOOTER_YN; |
|
| 542 |
- form.HEIGHT.value = data.HEIGHT; |
|
| 543 |
- form.PRDT_HIDDEN.value = data.PRDT_HIDDEN; |
|
| 544 |
- form.EMAIL_HIDDEN.value = data.EMAIL_HIDDEN; |
|
| 545 |
- form.CONTRACT_HIDDEN.value = data.CONTRACT_HIDDEN; |
|
| 546 |
- form.Cryptyn.value = data.Cryptyn; |
|
| 547 |
- form.Cryptstring.value = data.Cryptstring; |
|
| 548 |
- form.Deposit.value = data.Deposit; |
|
| 549 |
- form.Billyn.value = "N"; |
|
| 550 |
- |
|
| 551 |
- //아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출 |
|
| 552 |
- MCASH_PAYMENT(form); |
|
| 553 |
- } |
|
| 554 |
- else {
|
|
| 555 |
- alert("Msg : " + data.msg);
|
|
| 556 |
- } |
|
| 557 |
- }, |
|
| 558 |
- error: function (e) {
|
|
| 559 |
- alert("ERROR : " + JSON.stringify(e));
|
|
| 560 |
- } |
|
| 561 |
- }); |
|
| 562 |
-} |
|
| 563 | 568 |
|
| 564 | 569 |
// 사용안함 |
| 565 | 570 |
function setPrice(obj, price){
|
... | ... | @@ -913,17 +918,6 @@ |
| 913 | 918 |
<div class="inner"> |
| 914 | 919 |
<!-- send top --> |
| 915 | 920 |
<div class="send_top"> |
| 916 |
- <!-- tab button --> |
|
| 917 |
- <!-- <ul class="tabType4"> |
|
| 918 |
- <li class="tab"><button type="button" onclick="location.href='/web/pay/PayGuide.do'">요금안내/견적내기</button></li> |
|
| 919 |
- <li class="tab active"><button type="button">결제하기</button></li> |
|
| 920 |
- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li> |
|
| 921 |
- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayUserList.do'">요금 사용내역</button></li> |
|
| 922 |
- 현금영수증 자동발행 주석 |
|
| 923 |
- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">계산서/현금영수증 발행 등록</button></li> |
|
| 924 |
- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li> |
|
| 925 |
- </ul> --><!--// tab button --> |
|
| 926 |
- <!-- 결제관리 - 결제하기 --> |
|
| 927 | 921 |
<div class="serv_content charg_cont current" id="tab5_2"> |
| 928 | 922 |
<div class="heading"> |
| 929 | 923 |
<h2>이벤트 결제하기</h2> |
... | ... | @@ -953,7 +947,8 @@ |
| 953 | 947 |
<ul class="area_tab type03"> |
| 954 | 948 |
<li class="btn_charge1 btn_tab active"><button type="button" onclick="TabTypePay(this,'1');"><i></i>신용카드</button></li> |
| 955 | 949 |
<li class="btn_charge2 btn_tab"><button type="button" onclick="TabTypePay(this,'2');" id="btnDdedicatedAccount"><i></i>전용계좌</button></li> |
| 956 |
- <li class="btn_charge3 btn_tab"><button type="button" onclick="TabTypePay(this,'3');"><i></i>즉시이체</button></li> |
|
| 950 |
+ <!-- <li class="btn_charge3 btn_tab"><button type="button" onclick="TabTypePay(this,'3');" id="btnDdedicatedAccount"><i></i>모바일 테스트</button></li> --> |
|
| 951 |
+ <li class="btn_charge4 btn_tab"><button type="button" onclick="TabTypePay(this,'3');"><i></i>즉시이체</button></li> |
|
| 957 | 952 |
|
| 958 | 953 |
<li class="btn_charge5 btn_tab simple_pay event_simple"><button type="button" onclick="TabTypePay(this,'5');"><i></i></button></li> |
| 959 | 954 |
<li class="btn_charge6 btn_tab simple_pay event_simple"><button type="button" onclick="TabTypePay(this,'6');"><i></i></button></li> |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?