package itn.let.mjo.pay.web; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URLDecoder; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; //import com.mobilians.mcCancel_v0001.MC_Cancel; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.service.EgovCmmUseService; import itn.com.cmm.service.EgovFileMngService; import itn.com.cmm.service.EgovFileMngUtil; import itn.com.cmm.service.FileVO; import itn.let.cop.bbs.service.BoardMasterVO; import itn.let.mjo.addragency.service.AddrAgencyService; import itn.let.mjo.addragency.service.AddrAgencyVO; import itn.let.mjo.mjocommon.MjonCommon; import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPayVO; import itn.let.mjo.pay.service.RefundService; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.JoinSettingVO; import itn.let.uss.umt.service.EgovMberManageService; import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.MberManageVO; import itn.let.uss.umt.service.UserManageVO; import itn.let.utl.fcc.service.EgovCryptoUtil; import itn.let.utl.sim.service.EgovClntInfo; import itn.let.utl.user.service.CheckBoardUtil; import itn.let.utl.user.service.CheckFileUtil; import itn.let.utl.user.service.CheckLoginUtil; import itn.let.utl.user.service.MjonNoticeSendUtil; @Controller public class MjonKGMPayController { @Resource(name = "mjonPayService") private MjonPayService mjonPayService; /** EgovMessageSource */ @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; /** userManageService */ @Resource(name = "userManageService") private EgovUserManageService userManageService; /** refundService */ @Resource(name = "refundService") private RefundService refundService; @Resource(name = "mjonMsgService") private MjonMsgService mjonMsgService; @Resource(name = "MjonMsgDataService") private MjonMsgDataService mjonMsgDataService; @Resource(name = "mberManageService") private EgovMberManageService mberManageService; @Resource(name = "EgovCmmUseService") private EgovCmmUseService cmmUseService; //암호화 @Resource(name = "egovCryptoUtil") EgovCryptoUtil egovCryptoUtil; //로그인 처리 @Resource(name = "checkLoginUtil") private CheckLoginUtil checkLoginUtil; //무료 대행 관련 쿼리 @Resource(name="addrAgencyService") private AddrAgencyService addrAgencyService; //게시판 체크 @Resource(name = "checkBoardUtil") private CheckBoardUtil checkBoardUtil; //첨부 파일 체크 @Resource(name = "checkFileUtil") private CheckFileUtil checkFileUtil; //파일 체크 & 관리 @Resource(name="EgovFileMngUtil") private EgovFileMngUtil egovFileMngUtil; //파일 정보 관리 @Resource(name="EgovFileMngService") private EgovFileMngService fileMngService; /** 알림전송 Util */ @Resource(name = "mjonNoticeSendUtil") private MjonNoticeSendUtil mjonNoticeSendUtil; @Resource(name="MjonCommon") private MjonCommon mjonCommon; /** 사이트 설정 */ @Resource(name = "egovSiteManagerService") EgovSiteManagerService egovSiteManagerService; private static final Logger logger = LoggerFactory.getLogger(MjonKGMPayController.class); ///////////////////////////////////////////////////////////////////////////////////////// // // // USER // // /** * KGM mobile 결제 Action 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/KGMPayActionAjax.do"}) public String KGMPayActionAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, HttpServletRequest request, ModelMap model) throws Exception{ String userId = ""; LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { userId = loginVO.getId(); } mjonPayVO.setMoid(userId); model.addAttribute("mjonPayVO", mjonPayVO); return "web/cop/kgm/mc_web"; } /** * KGM mobile 결제 okurl 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/NotiUrlAjax.do"}) public String NotiUrlAjax( HttpServletRequest request , ModelMap model ) throws Exception{ System.out.println("request.toString()"); System.out.println(request.toString()); return "web/cop/kgm/notiurl"; } /** * KGM mobile 결제 okurl 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/OkUrlAjax.do"}) public String OkUrlAjax( HttpServletRequest request , HttpSession session , HttpServletResponse response , ModelMap model , RedirectAttributes redirect ) throws Exception{ //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); String Resultcd = request.getParameter("Resultcd"); //[ 4byte 고정] 결과코드 String Resultmsg = URLDecoder.decode(request.getParameter("Resultmsg"), "euc-kr"); //[ 100byte 이하] 결과메세지 String AutoBillKey = request.getParameter("AutoBillKey"); //[ 15byte 이하] 자동결제 최초등록키 String CASH_GB = request.getParameter("CASH_GB"); //[ 2byte 고정] 결제수단(MC) String Commid = request.getParameter("Commid"); //[ 3byte 고정] 이통사 String Mobilid = request.getParameter("Mobilid"); //[ 15byte 이하] 모빌리언스 거래번호 String Mrchid = request.getParameter("Mrchid"); //[ 8byte 고정] 상점ID String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수 String No = request.getParameter("No"); //[ 11byte 이하] 폰번호 String Payeremail = request.getParameter("Payeremail"); //[ 30byte 이하] 결제자 이메일 String Prdtnm = URLDecoder.decode(request.getParameter("Prdtnm"), "euc-kr"); //[ 50byte 이하] 상품명 String Prdtprice = request.getParameter("Prdtprice"); //[ 10byte 이하] 상품가격 String Signdate = request.getParameter("Signdate"); //[ 14byte 이하] 결제일자 String Svcid = request.getParameter("Svcid"); //[ 12byte 고정] 서비스ID String Tradeid = request.getParameter("Tradeid"); //[ 40byte 이하] 상점거래번호 String Userid = request.getParameter("Userid"); //[ 20byte 이하] 사용자ID String USERKEY = request.getParameter("USERKEY"); //[ 15byte 이하] 휴대폰정보(이통사, 휴대폰번호, 주민번호) 대체용 USERKEY String MC_EZ_KEY = request.getParameter("Ezkey"); //[ 20byte 고정] 간소화결제 사용자키 // 사용자 정보 String mberNm = ""; String moblphonNo = ""; String mberEmailAdres = ""; MberManageVO mberManageVO = new MberManageVO(); mberManageVO.setMberId(Userid); MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); if (userInfo != null) { mberNm = userInfo.getMberNm(); moblphonNo = userInfo.getMoblphonNo(); mberEmailAdres = userInfo.getMberEmailAdres(); } // MjonPayVO MjonPayVO mjonPayVO = new MjonPayVO(); mjonPayVO.setResultCd(Resultcd); mjonPayVO.setResultMsg(Resultmsg); mjonPayVO.setAutoBillKey(AutoBillKey); mjonPayVO.setCashGb(CASH_GB); mjonPayVO.setAutoYn(""); mjonPayVO.setCommId(Commid); mjonPayVO.setMobileId(Mobilid); mjonPayVO.setMrchId(Mrchid); mjonPayVO.setPno(No); mjonPayVO.setPayerEmail(Payeremail); mjonPayVO.setPrdtNm(Prdtnm); mjonPayVO.setPrdtPrice(Prdtprice); mjonPayVO.setSignDate(Signdate); mjonPayVO.setSvcId(Svcid); mjonPayVO.setTradeId(Tradeid); mjonPayVO.setUserId(Userid); mjonPayVO.setUserKey(USERKEY); mjonPayVO.setMcEzKey(MC_EZ_KEY); // 추가정보(mj_pg) String pgStatus = ""; if("0000".equals(Resultcd)) { pgStatus = "1"; // 1:결제완료 } else { pgStatus = "4"; // 4.결제오류 } mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] mjonPayVO.setResultCode(Resultcd); mjonPayVO.setResultMsg(Resultmsg); mjonPayVO.setAmt(Prdtprice); // 결제금액 mjonPayVO.setPayMethod("CELLPHONE"); // 결제방법 mjonPayVO.setPgCode("KGM"); // mjonPayVO.setGoodsName("KG 모빌리언스"); // mjonPayVO.setPhone(No); // 모바일 mjonPayVO.setMobile(No); // 모바일 mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) mjonPayVO.setTid(Tradeid); // Tid mjonPayVO.setMid(Mrchid); // Mid // 회원정보 mjonPayVO.setBuyerName(mberNm); mjonPayVO.setBuyerEmail(moblphonNo); mjonPayVO.setBuyerTel(mberEmailAdres); // 로그인정보 /* LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { mjonPayVO.setBuyerName(loginVO.getName()); mjonPayVO.setBuyerEmail(loginVO.getEmail()); mjonPayVO.setBuyerTel(loginVO.getTel()); } else { // 재로그인 처리 //Userid } */ // 인서트 mjonPayService.insertKgmAll(mjonPayVO); // 휴대폰 15만원결제 => 법인폰 알림 if (mjonPayVO.getAmt().equals("165000")) { // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { // 스미싱의심 SMS 알림전송 mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", Userid, mberNm); } // SLACK 체크 if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { // Slack 메시지 발송(단순본문) String msg = "[문자온] 스미싱의심/휴대폰 15만원 결제 - " + mberNm +"("+ Userid + ")"; mjonCommon.sendSimpleSlackMsg(msg); } // 스미싱 의심회원으로 변경 UserManageVO userManageVO = new UserManageVO(); userManageVO.setSmishingYn("Y"); userManageVO.setMberId(Userid); userManageService.updateOneUserSmishingYn(userManageVO); } redirect.addAttribute("Resultcd", Resultcd); redirect.addAttribute("Tradeid", Tradeid); redirect.addAttribute("Prdtprice", Prdtprice); //return "web/cop/kgm/okurl"; return "redirect:/web/kgm/pay/kgmResultAjax.do"; } static String convert(String str, String encoding) throws IOException { ByteArrayOutputStream requestOutputStream = new ByteArrayOutputStream(); requestOutputStream.write(str.getBytes(encoding)); return requestOutputStream.toString(encoding); } /** * KGM mobile 결제 Result 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/kgmResultAjax"}, method=RequestMethod.GET) public String kgmResultAjax(HttpServletRequest request , ModelMap model ) throws Exception{ String Resultmsg = ""; String Prdtprice = ""; if("0000".equals(request.getParameter("Resultcd"))) { Prdtprice = request.getParameter("Prdtprice"); /* MjonPayVO mjonPayVO = new MjonPayVO(); mjonPayVO.setTradeId(request.getParameter("Tradeid")); mjonPayVO = mjonPayService.selectKgmVO(mjonPayVO); if (!mjonPayVO.equals(null)) { } */ // 로그인정보 /* String userId = ""; LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { } else { // 재로그인 처리 userId = mjonPayVO.getUserId(); } */ Resultmsg = "휴대폰결제 정상처리 되었습니다."; } else { Resultmsg = "휴대폰결제 실패 했습니다."; } model.addAttribute("Resultcd", request.getParameter("Resultcd")); model.addAttribute("Resultmsg", Resultmsg); model.addAttribute("Prdtprice", Prdtprice); return "web/cop/kgm/result"; } /** * KGM mobile 결제 okurl 페이지 * @param searchVO * @param model * @throws Exception */ @RequestMapping(value= {"/web/kgm/pay/kgmCancelAjax.do"}, method=RequestMethod.GET) public String kgmCancelAjax(HttpServletRequest request , HttpServletResponse response , ModelMap model ) throws Exception { Boolean isSuccess = true; String msg = ""; String resultCd = ""; // 리턴코드 String resultMsg = ""; // 리턴메시지 try { // 아래정보가 맞지 않을 경우 취소정보 불일치 0045 가 리턴됩니다. String Mrchid=""; //모빌리언스가 부여한 상점아이디 8자리 String Svcid=""; //모빌리언스가 부여한 서비스아이디 12자리 String Tradeid = ""; //결제된 상점거래번호 String Prdtprice = ""; //결제된 금액 String Mobilid = ""; //결제된 모빌리언스 거래번호 Mrchid = request.getParameter("Mrchid"); Svcid = request.getParameter("Svcid"); Tradeid = request.getParameter("Tradeid"); Prdtprice = request.getParameter("Prdtprice"); Mobilid = request.getParameter("Mobilid"); // MOID : MOID_000000000000630 Mrchid = "17062204"; Svcid = "170622040674"; Tradeid = "170622040674_202204191748300618"; Prdtprice = "3000"; Mobilid = "5002140398"; String kgmServerIp = ""; // 메인서버아이피 int kgmServerPort = 0; // 서버포트 String kgmSwitchIp = ""; // 백업서버아이피 int kgmRecvTimeOut = 0; // 전문수신타임아웃 String kgmLogDir = ""; // 로그경로 String serverName = request.getServerName().toLowerCase(); int serverPort = request.getServerPort(); System.out.println("serverName : "+ serverName); System.out.println("serverPort : "+ serverPort); if (serverName.lastIndexOf("localhost") > -1 || serverName.lastIndexOf("127.0.0.1") > -1) { System.out.println("KGM 연결서버 : 개발서버1"); // 개발서버 kgmServerIp = "175.158.12.131"; kgmServerPort = 7500; kgmSwitchIp = "175.158.12.131"; kgmRecvTimeOut = 30000; kgmLogDir = "c:\\cancel_log\\"; } else if (serverPort != 80 || serverPort != 443) { System.out.println("KGM 연결서버 : 개발서버2"); // 개발서버 kgmServerIp = "175.158.12.131"; kgmServerPort = 7500; kgmSwitchIp = "175.158.12.131"; kgmRecvTimeOut = 30000; kgmLogDir = "c:\\cancel_log\\"; } else { System.out.println("KGM 연결서버 : 운영서버"); // 운영서버 kgmServerIp = "175.158.12.140"; kgmServerPort = 7500; kgmSwitchIp = "218.50.55.107"; kgmRecvTimeOut = 30000; kgmLogDir = "/cancel_log/"; } // MC Cancel /* MC_Cancel cancel = new MC_Cancel(); cancel.setServerInfo(kgmServerIp, kgmServerPort, kgmSwitchIp, kgmRecvTimeOut, kgmLogDir); resultCd = cancel.cancel_attempt(Mrchid, Svcid, Tradeid, Prdtprice, Mobilid); // 결제취소요청 resultMsg = getMobiliansCancelReturnMsg(resultCd); if (resultCd.equals("0000") ) { // 결제취소 성공 } else { // 결제취소 실패 } // KG 모빌리언스 취소 리턴메시지 System.out.println("