이벤트 결제 로직 수정

This commit is contained in:
wyh 2025-03-31 12:22:16 +09:00
parent 094e8b6f7a
commit 6d5eae5670
10 changed files with 2591 additions and 152 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,231 @@
package itn.com.cmm.util;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.event.service.impl.MjonEventDAO;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.impl.MjonPayDAO;
import itn.let.mjo.tax.service.TaxVO;
import itn.let.mjo.tax.service.impl.TaxDAO;
import itn.let.sym.grd.service.MberGrdService;
import itn.let.sym.grd.service.MberGrdVO;
import itn.let.uat.uia.service.impl.MberManageDAO;
import itn.let.uss.umt.service.MberManageVO;
@Component("mjonPayUtil")
public class MjonPayUtil {
@Resource(name="MjonEventDAO")
private MjonEventDAO mjonEventDAO;
@Resource(name="mberManageDAO")
private MberManageDAO mberManageDAO;
@Resource(name="mjonPayDAO")
private MjonPayDAO mjonPayDAO;
@Resource(name="taxDAO")
private TaxDAO taxDAO;
/* 등급제 */
@Resource(name = "mberGrdService")
MberGrdService mberGrdService;
/**
* @param mjonPayVO
* @throws Exception
*/
public void insertPayUtil(MjonPayVO mjonPayVO) throws Exception {
if("anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) {
}else {
// 기존 mjonPayVO의 userId 값에 moid 값이 들어가게 되어서 세션에서 아이디를 받아와서 다시 입력하도록 수정함 20220330 우영두
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
String buyerName = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName());
String email = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getEmail());
String mobile = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getMoblphonNo());
mjonPayVO.setUserId(userId);
mjonPayVO.setFrstRegisterId(userId);
mjonPayVO.setBuyerName(buyerName);
mjonPayVO.setEmail(email);
mjonPayVO.setPhone(mobile);
mjonPayVO.setMobile(mobile);
}
//PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update
mjonPayDAO.insertMjPg(mjonPayVO);
//세금계산서,현금영수증 자동발행 체크 / 자동발행 'N'이며 10만원 이상 결제시 현금영수증 의무발행
MberManageVO mberManageVO = mberManageDAO.selectMber(mjonPayVO.getUserId()); //멤버ID에서 유니크ID로 수정 필요
// 세금계산서 자동발행이고,카드결제가 아닐경우에만 자동발행
if(("B".equals(mberManageVO.getTaxbillAuto()) || "C".equals(mberManageVO.getTaxbillAuto())) && !"CARD".equals(mjonPayVO.getPayMethod())) {
TaxVO taxVO = new TaxVO();
/*발행타입 1:소득공제 현금영수증 2:지출증빙 현금영수증 9:세금계산서*/
String rcptType;
String regNo="";
if("B".equals(mberManageVO.getTaxbillAuto())) { //세금계산서 기업 자동발행
rcptType = "9";
taxVO.setTaxTrgt("B");
regNo = mberManageVO.getTaxBizNo(); //사업자등록번호
taxVO.setCompanyName(mberManageVO.getTaxBzNm());//회사명
taxVO.setRepName(mberManageVO.getTaxChrmNm());//대표자명
taxVO.setAddr(mberManageVO.getTaxAddr());//세금계산서 주소
}else if("C".equals(mberManageVO.getTaxbillAuto())) { //세금계산서 개인 자동발행
rcptType = "9";
taxVO.setTaxTrgt("C");
regNo = mberManageVO.getTaxCIhidNum(); // 세금계산서 개인 주민등록번호
taxVO.setRepName(mberManageVO.getTaxCNm()); //세금계산서 개인 성명
taxVO.setAddr(mberManageVO.getTaxCAddr()); //세금계산서 개인 주소
} else { //현금영수증 자동발행
rcptType = mberManageVO.getCashbillType();
}
taxVO.setMoid(mjonPayVO.getMoid()); //주문ID
taxVO.setRcptType(rcptType);//발행타입
/*발행번호 개인세금계산서:주민등록번호 / 기업세금계산서:사업자번호 / 소득공제현금영수증:휴대폰번호 / 지출증빙현금영수증:사업자번호*/
taxVO.setRegNo(regNo);
taxVO.setEmail(mberManageVO.getTaxMngEmail());//담당자이메일
taxVO.setPhone(mberManageVO.getTaxMngPhoneNum());//담당자 휴대폰번호
taxVO.setConfirmYn("N"); //완료여부
taxVO.setFrstRegisterId(mberManageVO.getMberId());
// JSPark 2022.07.01 => 휴대폰결제는 MJ_TAX 테이블에 인서트 안함
if(!"CELLPHONE".equals(mjonPayVO.getPayMethod())) {
taxDAO.insertCashBill(taxVO);
}
}
//세금계산서 자동발행 설정이 아니면서, 결제금액이 10만원 이상인 경우 현금영수증 의무발행 데이터 등록 필요
if("N".equals(mberManageVO.getTaxbillAuto()) && Integer.parseInt(mjonPayVO.getAmt()) >= 100000 && !"CARD".equals(mjonPayVO.getPayMethod())) {
//결제금액이 10만원 넘는 경우 : 현금영수증 의무발행 요청 등록
TaxVO taxVO = new TaxVO();
taxVO.setRcptType("3");//발행타입 : 3, 의무발행
taxVO.setMoid(mjonPayVO.getMoid());
taxVO.setRegNo("0100001234"); //의무발행번호
taxVO.setEmail(mberManageVO.getTaxMngEmail());//담당자이메일
taxVO.setPhone(mberManageVO.getTaxMngPhoneNum());//담당자 휴대폰번호
taxVO.setConfirmYn("N"); //완료여부
taxVO.setFrstRegisterId(mberManageVO.getMberId());
// JSPark 2022.07.01 => 휴대폰결제는 MJ_TAX 테이블에 인서트 안함
if(!"CELLPHONE".equals(mjonPayVO.getPayMethod())) {
taxDAO.insertCashBill(taxVO);
}
}
//CASH 테이블
mjonPayDAO.insertCash(mjonPayVO);
//회원정보 CASH 업데이트
mjonPayDAO.updateMemberCash(mjonPayVO);
// 회원별 등급 적용
MberGrdVO mberGrdVO = new MberGrdVO();
mberGrdVO.setMberId(mjonPayVO.getUserId());
mberGrdVO.setAmt(mjonPayVO.getAmt());
mberGrdVO.setMoid(mjonPayVO.getMoid());
mberGrdService.mberGrdSaveByUser(mberGrdVO);
}
/**
* 일반 포인트 등록 Utile
* @param mjonPayVO
* @throws Exception
*/
public void updatePointUtile(MjonPayVO mjonPayVO) throws Exception {
mjonPayDAO.insertPoint(mjonPayVO); //POINT 테이블
mjonPayDAO.updateMemberPoint(mjonPayVO); //회원정보 업데이트
}
/**
* 결제 이벤트 포인트 등록 Utile
* @param mjonPayVO
* @throws Exception
*/
public void updateFirstEventPointUtile(MjonPayVO mjonPayVO) throws Exception {
/**
* 이벤트 페이지에서 넘어온 경우에만 이벤트 결제로 취급
* 이벤트 대상자인 경우 이벤트 회원 정보에 결제 금액 이벤트 시작일/종료일, 상태값 변경
*
* */
int payCash = (int) mjonPayVO.getCash();
int limitCash = 500000; //이벤트 참여 최대 금액 50만원으로 설정
//이벤트 대상자인 경우에는 포인트를 무조건 지급하지 않는다.
//차후에 민원이 제가되면 해당 민원인만 관리자가 포인트를 별도 지급하도록 하기로 .
mjonPayVO.setPoint(0);
mjonPayVO.setPointMemo("첫 결제 이벤트로 인한 포인트 미지급 0원으로 지급처리함.");
mjonPayDAO.insertPoint(mjonPayVO); //POINT 테이블
mjonPayDAO.updateMemberPoint(mjonPayVO); //회원정보 업데이트
if(payCash >= limitCash) {
//결제금액이 50만원을 넘었기 때문에 50만원만 이벤트 캐시로 충전한다.
//포인트는 미지급 한다.
payCash = 500000;
}
//이벤트 회원 테이블 정보 업데이트
int resultCnt = updateEventMberInfo(mjonPayVO, payCash);
System.out.println(resultCnt);
}
/**
* 결제 이벤트 회원 테이블 정보 업데이트
* 이벤트 시작일, 종료일, 상태정보, 결제 금액, 잔여금액 정보 업데이트
*
* */
public int updateEventMberInfo(MjonPayVO mjonPayVO, int payCash) throws Exception {
int resultCnt = 0;
try {
//이벤트 회원 정보 업데이트
MjonEventVO updtEventVO = new MjonEventVO();
updtEventVO.setMberId(mjonPayVO.getUserId());
updtEventVO.setEventFrstCash(payCash); //결제 Cash(부가세 금액)
updtEventVO.setEventRemainCash(payCash); //초기 금액을 결제 Cash(부가세 금액) 설정
updtEventVO.setEventPgMoid(mjonPayVO.getMoid()); //결제 Moid 번호
/**
* 이벤트 시작일 종료일 셋팅
* 현재일로 부터 2개월 설정
* DB -> datetime
*
* */
String nowDate = MJUtil.getRealTime();
String eventEndDate = MJUtil.getAfterTimerMonth(2);
updtEventVO.setEventStartDate(nowDate);//이벤트 시작일자 설정
updtEventVO.setEventEndDate(eventEndDate);//이벤트 종료일자 설정
updtEventVO.setEventStatus("Y");//이벤트 상태를 진행 중으로 변경
resultCnt = mjonEventDAO.updateEventMberStatusInfo(updtEventVO);
} catch (Exception e) {
System.out.println("+++++++++++++ updateEventMberInfo ServiceImple Error !!! "+e);
}
return resultCnt;
}
}

View File

@ -0,0 +1,515 @@
package itn.com.cmm.util;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.codec.binary.Hex;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.stereotype.Component;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.cmm.util.MJUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.event.service.impl.MjonEventDAO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.impl.MjonPayDAO;
import itn.let.mjo.tax.service.TaxVO;
import itn.let.mjo.tax.service.impl.TaxDAO;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uat.uia.service.impl.MberManageDAO;
import itn.let.uss.umt.service.MberManageVO;
@Component("nicePayUtil")
public class NicePayUtil {
@Resource(name = "egovMjonCashIdGnrService")
private EgovIdGnrService idgenMjonCashId;
@Resource(name = "egovMjonPointIdGnrService")
private EgovIdGnrService idgenMjonPointId;
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
/**
* @param mjonPayVO
* @param request
* @return
* @throws Exception
* //nicepay 정상 결제 여부 확인
*/
public boolean pgAuth(MjonPayVO mjonPayVO , HttpServletRequest request) throws Exception {
//Pg 결제 정상여부 체크
boolean paySuccess = false;
/*
****************************************************************************************
* <인증 결과 파라미터>
****************************************************************************************
*/
String authResultCode = (String)request.getParameter("AuthResultCode"); // 인증결과 : 0000(성공)
String authResultMsg = (String)request.getParameter("AuthResultMsg"); // 인증결과 메시지
String nextAppURL = (String)request.getParameter("NextAppURL"); // 승인 요청 URL
String txTid = (String)request.getParameter("TxTid"); // 거래 ID
String authToken = (String)request.getParameter("AuthToken"); // 인증 TOKEN
String payMethod = (String)request.getParameter("PayMethod"); // 결제수단
String mid = (String)request.getParameter("MID"); // 상점 아이디
String moid = (String)request.getParameter("Moid"); // 상점 주문번호
String amt = (String)request.getParameter("Amt"); // 결제 금액
String reqReserved = (String)request.getParameter("ReqReserved"); // 상점 예약필드
String netCancelURL = (String)request.getParameter("NetCancelURL"); // 망취소 요청 URL
/*
****************************************************************************************
* <승인 결과 파라미터 정의>
* 샘플페이지에서는 승인 결과 파라미터 일부만 예시되어 있으며,
* 추가적으로 사용하실 파라미터는 연동메뉴얼을 참고하세요.
****************************************************************************************
*/
String ResultCode = ""; String ResultMsg = ""; String PayMethod = "";
String GoodsName = ""; String Amt = ""; String TID = "";
String cardCode = ""; // 결제카드사코드
String cardName = ""; // 결제카드사명
String bankCode = ""; // 결제은행코드
String bankName = ""; // 결제은행명
/*
****************************************************************************************
* <인증 결과 성공시 승인 진행>
****************************************************************************************
*/
String resultJsonStr = "";
if(authResultCode.equals("0000")){
/*
****************************************************************************************
* <해쉬암호화> (수정하지 마세요)
* SHA-256 해쉬암호화는 거래 위변조를 막기위한 방법입니다.
****************************************************************************************
*/
DataEncrypt sha256Enc = new DataEncrypt();
String merchantKey = "7wnkxZbHvIA7FoCc6jF8IcXU+Wd3sn5BcMHuWJROe53AjRKnC6CistVdVZwrUKCCdaF+dAx230bwHSQ/E29RWA=="; // 운영상점키
//String merchantKey = "EYzu8jGGMfqaDEp76gSckuvnaHHu+bC4opsSN6lHv3b2lurNYkVXrZ7Z1AoqQnXI3eLuaUFyoRNC6FkrzVjceg=="; // 테스트 상점키
String ediDate = getyyyyMMddHHmmss();
String signData = sha256Enc.encrypt(authToken + mid + amt + ediDate + merchantKey);
/*
****************************************************************************************
* <승인 요청>
* 승인에 필요한 데이터 생성 server to server 통신을 통해 승인 처리 합니다.
****************************************************************************************
*/
StringBuffer requestData = new StringBuffer();
requestData.append("TID=").append(txTid).append("&");
requestData.append("AuthToken=").append(authToken).append("&");
requestData.append("MID=").append(mid).append("&");
requestData.append("Amt=").append(amt).append("&");
requestData.append("EdiDate=").append(ediDate).append("&");
requestData.append("SignData=").append(signData);
try {
resultJsonStr = connectToServer(requestData.toString(), nextAppURL);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HashMap resultData = new HashMap();
if("9999".equals(resultJsonStr)){
/*
*************************************************************************************
* <망취소 요청>
* 승인 통신중에 Exception 발생시 망취소 처리를 권고합니다.
*************************************************************************************
*/
StringBuffer netCancelData = new StringBuffer();
requestData.append("&").append("NetCancel=").append("1");
String cancelResultJsonStr = connectToServer(requestData.toString(), netCancelURL);
HashMap cancelResultData = jsonStringToHashMap(cancelResultJsonStr);
ResultCode = (String)cancelResultData.get("ResultCode");
ResultMsg = (String)cancelResultData.get("ResultMsg");
}else{
resultData = jsonStringToHashMap(resultJsonStr);
ResultCode = (String)resultData.get("ResultCode"); // 결과코드 (정상 결과코드:3001)
ResultMsg = (String)resultData.get("ResultMsg"); // 결과메시지
PayMethod = (String)resultData.get("PayMethod"); // 결제수단
GoodsName = (String)resultData.get("GoodsName"); // 상품명
Amt = (String)resultData.get("Amt"); // 결제 금액
TID = (String)resultData.get("TID"); // 거래번호
cardCode = (String)resultData.get("CardCode"); // 결제카드사코드
cardName = (String)resultData.get("CardName"); // 결제카드사명
bankCode = (String)resultData.get("BankCode"); // 결제은행코드
bankName = (String)resultData.get("BankName"); // 결제은행명
/*
*************************************************************************************
* <결제 성공 여부 확인>
*************************************************************************************
*/
if(PayMethod != null){
if(PayMethod.equals("CARD")){
if(ResultCode.equals("3001")) paySuccess = true; // 신용카드(정상 결과코드:3001)
}else if(PayMethod.equals("BANK")){
if(ResultCode.equals("4000")) paySuccess = true; // 계좌이체(정상 결과코드:4000)
}else if(PayMethod.equals("CELLPHONE")){
if(ResultCode.equals("A000")) paySuccess = true; // 휴대폰(정상 결과코드:A000)
}else if(PayMethod.equals("VBANK")){
if(ResultCode.equals("4100")) paySuccess = true; // 가상계좌(정상 결과코드:4100)
}else if(PayMethod.equals("SSG_BANK")){
if(ResultCode.equals("0000")) paySuccess = true; // SSG은행계좌(정상 결과코드:0000)
}else if(PayMethod.equals("CMS_BANK")){
if(ResultCode.equals("0000")) paySuccess = true; // 계좌간편결제(정상 결과코드:0000)
}
}
}
}else{
ResultCode = authResultCode;
ResultMsg = authResultMsg;
}
//PG테이블 변수설정 오류시에도 PG테이블에 insert
mjonPayVO.setPgStatus("4"); //결제오류
mjonPayVO.setResultCode(authResultCode);
mjonPayVO.setResultMsg(ResultMsg); //'결과메시지',
mjonPayVO.setTid(txTid); // 거래 ID
mjonPayVO.setPayMethod(payMethod); // 결제수단
mjonPayVO.setMid(mid); // 상점 아이디
mjonPayVO.setAmt(amt); // 결제 금액
mjonPayVO.setPgCode("INNOPAY"); //이노페이(강제세팅)
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
// userId = mjonPayVO.getMoid() ; //테스트시 화면에서 전송한 고객사 ID
// mjonPayVO.setMoid(idgenPgMoid.getNextStringId()); // 상점 주문번호 결제 완료 생성
mjonPayVO.setRegNo(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호',
mjonPayVO.setMobile(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호',
mjonPayVO.setPhone(mjonPayVO.getBuyerTel()); //연락처
mjonPayVO.setEmail(mjonPayVO.getBuyerEmail()); //이메일
mjonPayVO.setRepName(mjonPayVO.getBuyerName()); //'대표자명',
mjonPayVO.setConfirmYn("N"); //'완료여부',
mjonPayVO.setUserId(userId);
mjonPayVO.setFrstRegisterId(userId);
mjonPayVO.setCardCode(cardCode); //결제카드사코드
mjonPayVO.setCardName(cardName); //결제카드사명
mjonPayVO.setBankCode(bankCode); //결제은행코드
mjonPayVO.setBankName(bankName); //결제은행사명
if(!paySuccess) {
return false;
}
//PG테이블 변수 설정--------------------------------------------------------------------------------
if("0000".equals(authResultCode)) { // 인증결과 : 0000(성공)
mjonPayVO.setPgStatus("1"); //'결제 상태 - 0:입금대기, 1:결제완료, 4:결제오류, 9:취소완료'
mjonPayVO.setResultCode(authResultCode); //결과코드
}
return paySuccess ;
}
//server to server 통신
public String connectToServer(String data, String reqUrl) throws Exception{
HttpURLConnection conn = null;
BufferedReader resultReader = null;
PrintWriter pw = null;
URL url = null;
int statusCode = 0;
StringBuffer recvBuffer = new StringBuffer();
try{
url = new URL(reqUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(3000);
conn.setReadTimeout(5000);
conn.setDoOutput(true);
pw = new PrintWriter(conn.getOutputStream());
pw.write(data);
pw.flush();
statusCode = conn.getResponseCode();
resultReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "euc-kr"));
for(String temp; (temp = resultReader.readLine()) != null;){
recvBuffer.append(temp).append("\n");
}
if(!(statusCode == HttpURLConnection.HTTP_OK)){
throw new Exception();
}
return recvBuffer.toString().trim();
}catch (Exception e){
return "9999";
}finally{
recvBuffer.setLength(0);
try{
if(resultReader != null){
resultReader.close();
}
}catch(Exception ex){
resultReader = null;
}
try{
if(pw != null) {
pw.close();
}
}catch(Exception ex){
pw = null;
}
try{
if(conn != null) {
conn.disconnect();
}
}catch(Exception ex){
conn = null;
}
}
}
//JSON String -> HashMap 변환
public static HashMap jsonStringToHashMap(String str) throws Exception{
HashMap dataMap = new HashMap();
JSONParser parser = new JSONParser();
try{
Object obj = parser.parse(str);
JSONObject jsonObject = (JSONObject)obj;
Iterator<String> keyStr = jsonObject.keySet().iterator();
while(keyStr.hasNext()){
String key = keyStr.next();
Object value = jsonObject.get(key);
dataMap.put(key, value);
}
}catch(Exception e){
}
return dataMap;
}
public final synchronized String getyyyyMMddHHmmss(){
SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat("yyyyMMddHHmmss");
return yyyyMMddHHmmss.format(new Date());
}
// SHA-256 형식으로 암호화
public class DataEncrypt{
MessageDigest md;
String strSRCData = "";
String strENCData = "";
String strOUTData = "";
public DataEncrypt(){ }
public String encrypt(String strData){
String passACL = null;
MessageDigest md = null;
try{
md = MessageDigest.getInstance("SHA-256");
md.reset();
md.update(strData.getBytes());
byte[] raw = md.digest();
passACL = encodeHex(raw);
}catch(Exception e){
System.out.print("암호화 에러" + e.toString());
}
return passACL;
}
public String encodeHex(byte [] b){
char [] c = Hex.encodeHex(b);
return new String(c);
}
}
// 세금 넣기
public MjonPayVO setTexVO(MjonPayVO mjonPayVO) throws Exception{
/*
* amt = mjonPayVO.setAmt(amt); // 결제 금액
* userId = mjonPayVO.getMoid() ; //테스트시 화면에서 전송한 고객사 ID
* mjonPayVO.setPayMethod(payMethod); // 결제수단
*/
String s_amt = mjonPayVO.getAmt();
// 부가세별도 충전금액
s_amt = setCashVatNotIncluded(s_amt);
String s_user_id = mjonPayVO.getMoid();
//PG Tax테이블 변수 생성
mjonPayVO.setRcptType("9"); //PG결제는 세금계산서 '발행유형-[PG결제-현금영수증 유형과 동일] 1:소득공제, 2:지출증빙, 9:세금계산서', (확인필요)
mjonPayVO.setRegNo(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호',
mjonPayVO.setMobile(mjonPayVO.getBuyerTel()); // '사업자번호/전화번호',
mjonPayVO.setPhone(mjonPayVO.getBuyerTel()); //연락처
mjonPayVO.setEmail(mjonPayVO.getBuyerEmail()); //이메일
mjonPayVO.setRepName(mjonPayVO.getBuyerName()); //'대표자명',
mjonPayVO.setConfirmYn("Y"); //'완료여부',
//캐쉬 테이블 변수 생성
mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()) ;
mjonPayVO.setPointId(idgenMjonPointId.getNextStringId()) ;
mjonPayVO.setCash(Float.parseFloat(s_amt)); //'사용 캐쉬-양수:지급, 음수:소모',
mjonPayVO.setOrderId(mjonPayVO.getMoid()); //'주문번호-주문번호가 없으면 관리자 임의 지급',
mjonPayVO.setUserId(s_user_id);
mjonPayVO.setFrstRegisterId(s_user_id);
return mjonPayVO;
}
// 부가세별도 충전금액
private String setCashVatNotIncluded(String val) {
String rtnVal = "";
// 공급대가 = 공급가액(공급대가/11*10) + 부가세(공급대가/11)
// 11000 = (11000/11*10 ) + 11000/11
// 공급가액 계산로직
rtnVal = Math.round(Float.parseFloat(val) / 11 * 10) + "";
return rtnVal;
}
//cash 넣기
/**
* @param mjonPayVO
* @return
* @throws Exception
* cash table 넣기
*/
public MjonPayVO setCashVO(MjonPayVO mjonPayVO) throws Exception{
/*
* amt = mjonPayVO.setAmt(amt); // 결제 금액
* userId = mjonPayVO.getMoid() ; //테스트시 화면에서 전송한 고객사 ID
* mjonPayVO.setPayMethod(payMethod); // 결제수단
*/
String s_amt = mjonPayVO.getAmt();
// 부가세별도 충전금액
s_amt = setCashVatNotIncluded(s_amt);
String s_user_id = mjonPayVO.getMoid();
//캐쉬 테이블 변수 생성
mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()) ;
mjonPayVO.setPointId(idgenMjonPointId.getNextStringId()) ;
mjonPayVO.setCash(Float.parseFloat(s_amt)); //'사용 캐쉬-양수:지급, 음수:소모',
mjonPayVO.setOrderId(mjonPayVO.getMoid()); //'주문번호-주문번호가 없으면 관리자 임의 지급',
mjonPayVO.setUserId(s_user_id);
mjonPayVO.setFrstRegisterId(s_user_id);
String s_paymethod = mjonPayVO.getPayMethod();
if(s_paymethod.equals("CARD")){
s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001)
}else if(s_paymethod.equals("BANK")){
s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000)
}else if(s_paymethod.equals("CELLPHONE")){
s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000)
}else if(s_paymethod.equals("VBANK")){
s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100)
}else if(s_paymethod.equals("SSG_BANK")){
s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000)
}else if(s_paymethod.equals("CMS_BANK")){
s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000)
}else {
s_paymethod = "";
}
String memo = s_paymethod + " " + s_amt + " 충전" ;
mjonPayVO.setMemo(memo); //캐쉬메모
return mjonPayVO;
}
//point 넣기
/**
* @param mjonPayVO
* @return
* @throws Exception
* point table 넣기
*/
public MjonPayVO setPointVO(MjonPayVO mjonPayVO) throws Exception{
String s_paymethod = mjonPayVO.getPayMethod();
if(s_paymethod.equals("CARD")){
s_paymethod = "신용카드" ; // 신용카드(정상 결과코드:3001)
}else if(s_paymethod.equals("SPAY")){
s_paymethod = "간편결제" ; // 간편결제
}else if(s_paymethod.equals("BANK")){
s_paymethod = "계좌이체" ; // 계좌이체(정상 결과코드:4000)
}else if(s_paymethod.equals("CELLPHONE")){
s_paymethod = "휴대폰" ; // 휴대폰(정상 결과코드:A000)
}else if(s_paymethod.equals("VBANK")){
s_paymethod = "가상계좌" ; // 가상계좌(정상 결과코드:4100)
}else if(s_paymethod.equals("SSG_BANK")){
s_paymethod = "SSG은행계좌" ; // SSG은행계좌(정상 결과코드:0000)
}else if(s_paymethod.equals("CMS_BANK")){
s_paymethod = "계좌간편결제" ; // 계좌간편결제(정상 결과코드:0000)
}else {
s_paymethod = "";
}
String s_amt = mjonPayVO.getAmt();
// 부가세별도 충전금액
s_amt = setCashVatNotIncluded(s_amt);
//포인트 테이블 변수설정
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
//int point = Math.round( (Float.parseFloat(s_amt)*2/100) ) ;
float p_i_re_point = 0;
if (sysJoinSetVO != null) {
p_i_re_point = sysJoinSetVO.getPointPer();
}
int point = Math.round((Float.parseFloat(s_amt)*p_i_re_point/100)) ;
mjonPayVO.setPoint(point);
String pointMemo = s_paymethod; //포인트 메모
pointMemo = pointMemo + " " + point + " 충전" ;
mjonPayVO.setPointMemo(pointMemo);
return mjonPayVO;
}
public MjonPayVO setPayInfo(HttpServletRequest request, MjonPayVO mjonPayVO) throws Exception{
if(!this.pgAuth(mjonPayVO , request)) {
mjonPayVO.setPaySuccess(false);
return mjonPayVO;
}
//세금 넣기
mjonPayVO = this.setTexVO(mjonPayVO);
//cash 넣기
mjonPayVO = this.setCashVO(mjonPayVO);
//point 넣기
mjonPayVO = this.setPointVO(mjonPayVO);
return mjonPayVO;
}
}

View File

@ -1,6 +1,10 @@
package itn.let.mjo.event.service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import itn.let.cop.bbs.service.BoardVO;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.uss.umt.service.MberManageVO;
public interface MjonEventService {
@ -35,9 +39,20 @@ public interface MjonEventService {
//이벤트 정보 신규 추가(관리자가 강제로 입력)
int insertEventFrstInfoByAdm(MjonEventVO mjonEventVO) throws Exception;
//현재 진행중 이벤트 상태 정보 불러오기
MjonEventCheckVO selectEventStatus(MjonEventCheckVO p_MjonEventCheckVO) throws Exception;
MjonEventVO selectEventMsgMberDefaultInfo_advc(String userId) throws Exception;
//이벤트 나이스페이 결제
MjonPayVO insertFirstEventNicePay_advc(MjonPayVO mjonPayVO, HttpServletRequest request, String p_payment_comp) throws Exception;
//이벤트 kg모빌런스 모바일 결제
String insertFirstEventKgPayMobile_advc(MjonPayVO mjonPayVO, HttpServletResponse response, HttpServletRequest request) throws Exception;
//이벤트 kg모빌런스 즉시이체 결제
String insertFirstEventKgPayBank_advc(MjonPayVO mjonPayVO, HttpServletResponse response, HttpServletRequest request) throws Exception;
//이벤트 kg모빌런스 즉시이체 결제
String insertFirstEventKgPayCard_advc(MjonPayVO mjonPayVO, HttpServletResponse response, HttpServletRequest request) throws Exception;
}

View File

@ -1,11 +1,16 @@
package itn.let.mjo.event.service.impl;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Service;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.com.cmm.util.KgmPayUtil;
import itn.com.cmm.util.MjonPayUtil;
import itn.com.cmm.util.NicePayUtil;
import itn.let.cop.bbs.service.BoardVO;
import itn.let.mjo.event.service.MjonEventCheckVO;
import itn.let.mjo.event.service.MjonEventService;
@ -35,6 +40,18 @@ public class MjonEventServiceImpl extends EgovAbstractServiceImpl implements Mjo
@Resource(name = "egovMjonPointIdGnrService")
private EgovIdGnrService idgenMjonPointId;
/* 결제 */
@Resource(name = "mjonPayUtil")
MjonPayUtil mjonPayUtil;
/* nicePay */
@Resource(name = "nicePayUtil")
NicePayUtil nicePayUtil;
/* kg */
@Resource(name = "kgmPayUtil")
KgmPayUtil kgmPayUtil;
@Override
public BoardVO selectEventInfoByNttSj(BoardVO boardVO) throws Exception{
return mjonEventDAO.selectEventInfoByNttSj(boardVO);
@ -160,4 +177,112 @@ public class MjonEventServiceImpl extends EgovAbstractServiceImpl implements Mjo
public MjonEventCheckVO selectEventStatus(MjonEventCheckVO p_MjonEventCheckVO) throws Exception{
return mjonEventDAO.selectEventStatus(p_MjonEventCheckVO);
}
@Override
public MjonPayVO insertFirstEventNicePay_advc(
MjonPayVO mjonPayVO
, HttpServletRequest request
, String p_payment_comp) throws Exception {
System.out.println("START 이벤트 나이스페이결제");
//PG인증이 완료되야 테이블 insert
//업체에 따라서 인증 방식이 다르다.
if ("nice".equals(p_payment_comp)) {//신용카드, 즉시이제 결제 처리
if(!nicePayUtil.pgAuth(mjonPayVO , request)){
mjonPayVO.setPaySuccess(false);
mjonPayDAO.insertMjPg(mjonPayVO); //오류시에도 db insert
return mjonPayVO;
}
}else {
mjonPayVO.setPaySuccess(false);
return mjonPayVO;
}
//세금 넣기
mjonPayVO = nicePayUtil.setTexVO(mjonPayVO);
//cash 넣기
mjonPayVO = nicePayUtil.setCashVO(mjonPayVO);
//point 넣기
mjonPayVO = nicePayUtil.setPointVO(mjonPayVO);
// 결제 세금계산서 발행, 등급제 적용
mjonPayUtil.insertPayUtil(mjonPayVO);
// 포인트 발행
mjonPayUtil.updateFirstEventPointUtile(mjonPayVO);
System.out.println("END 카드결제");
mjonPayVO.setPaySuccess(true);
return mjonPayVO;
}
@Override
public String insertFirstEventKgPayMobile_advc(
MjonPayVO mjonPayVO
, HttpServletResponse response
, HttpServletRequest request)
throws Exception {
mjonPayVO = kgmPayUtil.kgmMobileNotiUrl(response, request);
String rtnMsg = mjonPayVO.getRtnMsg();
String pgStatus = mjonPayVO.getPgStatus();
if(rtnMsg.equals("SUCCESS") && pgStatus.equals("1")) {
// 결제 세금계산서 발행, 등급제 적용
mjonPayUtil.insertPayUtil(mjonPayVO);
// 포인트 발행
mjonPayUtil.updateFirstEventPointUtile(mjonPayVO);
// 슬랙 전송
kgmPayUtil.slackKgPay(mjonPayVO);
}
return rtnMsg;
}
@Override
public String insertFirstEventKgPayBank_advc(
MjonPayVO mjonPayVO
, HttpServletResponse response
, HttpServletRequest request) throws Exception {
mjonPayVO = kgmPayUtil.kgmBankNotiUrl(response, request);
String rtnMsg = mjonPayVO.getRtnMsg();
String pgStatus = mjonPayVO.getPgStatus();
if(rtnMsg.equals("SUCCESS") && pgStatus.equals("1")) {
// 결제 세금계산서 발행, 등급제 적용
mjonPayUtil.insertPayUtil(mjonPayVO);
// 포인트 발행
mjonPayUtil.updateFirstEventPointUtile(mjonPayVO);
// 슬랙 전송
kgmPayUtil.slackKgPay(mjonPayVO);
}
return rtnMsg;
}
@Override
public String insertFirstEventKgPayCard_advc(
MjonPayVO mjonPayVO
, HttpServletResponse response
, HttpServletRequest request) throws Exception {
mjonPayVO = kgmPayUtil.kgmCardNotiUrl(response, request);
String rtnMsg = mjonPayVO.getRtnMsg();
String pgStatus = mjonPayVO.getPgStatus();
if(rtnMsg.equals("SUCCESS") && pgStatus.equals("1")) {
// 결제 세금계산서 발행, 등급제 적용
mjonPayUtil.insertPayUtil(mjonPayVO);
// 포인트 발행
mjonPayUtil.updateFirstEventPointUtile(mjonPayVO);
// 슬랙 전송
kgmPayUtil.slackKgPay(mjonPayVO);
}
return rtnMsg;
}
}

View File

@ -3,34 +3,49 @@ package itn.let.mjo.event.web;
import java.text.SimpleDateFormat;
import java.util.Date;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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.RequestParam;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import itn.com.cmm.LoginVO;
import itn.com.cmm.util.KgmPayUtil;
import itn.com.cmm.util.StringUtil;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.cop.bbs.service.BoardVO;
import itn.let.mail.service.StatusResponse;
import itn.let.mjo.event.service.MjonEventService;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.msgcampain.service.MjonCandidateService;
import itn.let.mjo.msgcampain.service.MjonCandidateVO;
import itn.let.mjo.pay.service.MjonKgmVO;
import itn.let.mjo.pay.service.MjonPayService;
import itn.let.mjo.pay.service.MjonPayVO;
import itn.let.mjo.pay.service.MjonVaMsgLogVO;
import itn.let.mjo.payva.service.VacsVactService;
import itn.let.mjo.payva.service.VacsVactVO;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uss.umt.service.EgovMberManageService;
import itn.let.uss.umt.service.MberManageVO;
import itn.let.uss.umt.service.UserManageVO;
@Controller
public class MjonEventPayV2Controller {
@ -50,6 +65,12 @@ public class MjonEventPayV2Controller {
@Resource(name = "mjonPayService")
private MjonPayService mjonPayService;
@Resource(name = "egovPgMoidGnrService")
private EgovIdGnrService idgenPgMoid;
@Resource(name = "kgmPayUtil")
KgmPayUtil kgmPayUtil;
/**
* 이벤트 결제하기 화면
@ -76,15 +97,6 @@ public class MjonEventPayV2Controller {
return "redirect:/web/user/login/login.do";
}
// 하드코딩
//if(!userId.equals("nobledeco")) {
// if(!userId.equals("nobledeco2")) {
// if(!userId.equals("nopay")) {
// return "redirect:/web/main/mainPage.do";
// }
// }
//}
//기존 결제 내역이 있는 회원인지 확인
int payCnt = 0;
if(StringUtil.isNotEmpty(userId)) {
@ -250,4 +262,285 @@ public class MjonEventPayV2Controller {
return eventMberInfo;
}
// 나이스페이
@RequestMapping(value= {"/web/event/member/pay/firstEventPayActionAjax.do"})
public String firstEventPayAction(
@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO
, HttpServletRequest request
, ModelMap model) throws Exception{
String pattern = (String) request.getAttribute(
HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "pay/firstPayResultAjax.do") ;
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
//테스트
mjonPayVO.setBuyerName(loginVO.getName()); //구매자 이름
mjonPayVO.setBuyerEmail(loginVO.getEmail()); //구매자 이메일
mjonPayVO.setBuyerTel(loginVO.getMoblphonNo()); //구매자 휴대폰 번호
//moid 생성 위치 변경
mjonPayVO.setMoid(idgenPgMoid.getNextStringId());
//결제 페이지
mjonPayVO.setReturnURL("/web/event/member/pay/firstEventPayResultAjax.do");
model.addAttribute("mjonPayVO", mjonPayVO);
return "web/cop/nicepay/payRequestMber";
}
@RequestMapping( value = {"/web/event/member/pay/firstEventPayResultAjax.do"})
public String firstEventPayResult(HttpServletRequest request,
ModelMap model , @RequestParam Map<String, Object> commandMap,
@ModelAttribute("searchVO") MjonPayVO mjonPayVO) throws Exception {
String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
//mjonPayVO.setReturnURL(request.getRequestURL().toString().split("nice")[0] + "payResult.do") ;
MjonPayVO returnMjonPayVO = new MjonPayVO();
mjonPayVO.setPageType("event");
// returnMjonPayVO = mjonPayService.insertPay(mjonPayVO , request, "nice" ); //PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update
returnMjonPayVO = mjonEventService.insertFirstEventNicePay_advc(mjonPayVO , request, "nice" ); //PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update
model.addAttribute("mjonPayVO", returnMjonPayVO);
if(pattern.equals("/web/member/pay/payResultAjax.do")){
model.addAttribute("userPage", true);
}
return "web/cop/nicepay/payResultAjax";
}
// KG모빌런스
/////////////////////////////////////////////////////////////////////////////////////////
//
// Mobile Start
//
/**
* KGM 정보 Encode
* @param MjonPayVO
* @param modelAndView
* @return /web/event/member/pay/firstEventKgmMobileEncodeAjax.do
* @throws Exception
*/
@RequestMapping(value = "/web/event/member/pay/firstEventKgmMobileEncodeAjax.do")
public ResponseEntity<StatusResponse> firstEventKgmMobileEncodeAjax(
MjonPayVO mjonPayVO
, HttpServletRequest request ) throws Exception {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(StringUtils.isEmpty(userId)) {
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", ""));
}
MjonKgmVO mjonKgmVO = kgmPayUtil.kgmMobileEncode(request
, "/web/event/member/pay/firstEventOkUrlMobileAjax.do"
, "/web/event/member/pay/firstEventNotiUrlMobileAjax.do");
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", mjonKgmVO));
}
@RequestMapping(value= {"/web/event/member/pay/firstEventOkUrlMobileAjax.do"})
public String firstEventOkUrlMobileAjax(
HttpServletRequest request
, HttpSession session
, HttpServletResponse response
, ModelMap model
) throws Exception{
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
String rstMsg = "";
if("0000".equals(request.getParameter("Resultcd"))) {
rstMsg = "휴대폰결제가 정상적으로 완료되었습니다.";
}
else {
rstMsg = "휴대폰결제가 실패했습니다.";
}
model.addAttribute("Resultcd", request.getParameter("Resultcd"));
model.addAttribute("Resultmsg", rstMsg);
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
System.out.println("KG MOBILIANS OkUrl - MOBILE ResultCd : " + request.getParameter("Resultcd"));
System.out.println("KG MOBILIANS OkUrl - MOBILE ResultMsg : " + rstMsg);
return "web/cop/kgmV2/mobileOkUrl";
}
@RequestMapping(value= {"/web/event/member/pay/firstEventNotiUrlMobileAjax.do"})
public String firstEventNotiUrlMobileAjax(HttpServletRequest request, HttpServletResponse response
, @ModelAttribute("searchVO") MjonPayVO mjonPayVO
, ModelMap model) throws Exception{
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
String rtnMsg = mjonEventService.insertFirstEventKgPayMobile_advc(mjonPayVO, response, request);
model.addAttribute("returnMsg", rtnMsg);
return "web/cop/kgmV2/mobileNotiUrl";
}
/////////////////////////////////////////////////////////////////////////////////////////
//
// BANK Start
//
/**
* KGM 정보 Encode
* @param MjonPayVO
* @param modelAndView
* @return /web/event/member/pay/kgmEncodeAjax.do
* @throws Exception
*/
@RequestMapping(value = "/web/event/member/pay/firstEventKgmBankEncodeAjax.do")
public ResponseEntity<StatusResponse> firstEventKgmBankEncodeAjax(
MjonPayVO mjonPayVO
, HttpServletRequest request ) throws Exception {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(StringUtils.isEmpty(userId)) {
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", ""));
}
MjonKgmVO mjonKgmVO = kgmPayUtil.kgmBankEncode(request
, "/web/event/member/pay/firstEventOkUrlBankAjax.do"
, "/web/event/member/pay/firstEventNotiUrlBankAjax.do");
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", mjonKgmVO));
}
@RequestMapping(value= {"/web/event/member/pay/firstEventOkUrlBankAjax.do"})
public String okUrlBankAjax(
HttpServletRequest request
, HttpSession session
, HttpServletResponse response
, ModelMap model
) throws Exception{
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
String rstMsg = "";
if("0000".equals(request.getParameter("Resultcd"))) {
rstMsg = "즉시이체가 정상적으로 완료되었습니다.";
}
else {
rstMsg = "즉시이체가 실패했습니다.";
}
model.addAttribute("Resultcd", request.getParameter("Resultcd"));
model.addAttribute("Resultmsg", rstMsg);
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
System.out.println("KG MOBILIANS OkUrl - BANK ResultCd : " + request.getParameter("Resultcd"));
System.out.println("KG MOBILIANS OkUrl - BANK ResultMsg : " + rstMsg);
return "web/cop/kgmV2/bankOkUrl";
}
/**
* KGM Bank 결제notiUrl 페이지
* @param searchVO
* @param model
* @throws Exception
*/
@RequestMapping(value= {"/web/event/member/pay/firstEventNotiUrlBankAjax.do"})
public String notiUrlBankAjax(HttpServletRequest request, HttpServletResponse response
, @ModelAttribute("searchVO") MjonPayVO mjonPayVO
, ModelMap model) throws Exception{
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
String rtnMsg = mjonEventService.insertFirstEventKgPayBank_advc(mjonPayVO, response, request);
model.addAttribute("returnMsg", rtnMsg);
return "web/cop/kgmV2/bankNotiUrl";
}
/////////////////////////////////////////////////////////////////////////////////////////
//
// card Start
//
/**
* KGM 정보 Encode
* @param MjonPayVO
* @param modelAndView
* @return /web/event/member/pay/firstEventKgmCardEncodeAjax.do
* @throws Exception
*/
@RequestMapping(value = "/web/event/member/pay/firstEventKgmCardEncodeAjax.do")
public ResponseEntity<StatusResponse> firstEventKgmCardEncodeAjax(
MjonPayVO mjonPayVO
, HttpServletRequest request ) throws Exception {
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(StringUtils.isEmpty(userId)) {
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", ""));
}
MjonKgmVO mjonKgmVO = kgmPayUtil.kgmCardEncode(request
, "/web/event/member/pay/firstEventOkUrlCardAjax.do"
, "/web/event/member/pay/firstEventNotiUrlCardAjax.do");
return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", mjonKgmVO));
}
@RequestMapping(value= {"/web/event/member/pay/firstEventOkUrlCardAjax.do"})
public String firstEventOkUrlCardAjax(
HttpServletRequest request
, HttpSession session
, HttpServletResponse response
, ModelMap model
) throws Exception{
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
String rstMsg = "";
if("0000".equals(request.getParameter("Resultcd"))) {
rstMsg = "즉시이체가 정상적으로 완료되었습니다.";
}
else {
rstMsg = "즉시이체가 실패했습니다.";
}
model.addAttribute("Resultcd", request.getParameter("Resultcd"));
model.addAttribute("Resultmsg", rstMsg);
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
System.out.println("KG MOBILIANS OkUrl - CARD ResultCd : " + request.getParameter("Resultcd"));
System.out.println("KG MOBILIANS OkUrl - CARD ResultMsg : " + rstMsg);
return "web/cop/kgmV2/cardOkUrl";
}
/**
* KGM card 결제notiUrl 페이지
* @param searchVO
* @param model
* @throws Exception
*/
@RequestMapping(value= {"/web/event/member/pay/firstEventNotiUrlCardAjax.do"})
public String firstEventNotiUrlCardAjax(HttpServletRequest request, HttpServletResponse response
, @ModelAttribute("searchVO") MjonPayVO mjonPayVO
, ModelMap model) throws Exception{
//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
String rtnMsg = mjonEventService.insertFirstEventKgPayBank_advc(mjonPayVO, response, request);
model.addAttribute("returnMsg", rtnMsg);
return "web/cop/kgmV2/cardNotiUrl";
}
}

View File

@ -0,0 +1,103 @@
package itn.let.mjo.pay.service;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class MjonKgmVO{
/*****************************************************************************************/
String cash_gb = ""; // 대표결제수단
/*****************************************************************************************
- 필수 입력 항목
*****************************************************************************************/
String ver = ""; //ALL_NEW : 버전설정 고정
String cn_svcid = ""; //서비스아이디 : CN
String mc_svcid = ""; //서비스아이디 : MC
String ra_svcid = ""; //서비스아이디 : RA
String pay_mode = ""; //연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금)
String prdtprice = ""; //결제요청금액.
String prdtnm = "캐시충전"; //상품명 ( 50byte 이내 )
String siteurl = ""; //가맹점도메인
String tradeid = ""; //가맹점거래번호 //결제 요청 마다 unique한 값을 세팅해야 .
String okurl = ""; //성공화면처리URL : 결제완료통보페이지 full Url (:http://www.mcash.co.kr/okurl.jsp )
String notiurl = ""; //결제처리URL : 결제 완료 , 가맹점측 과금 처리할 가맹점측 URL
/*****************************************************************************************
- 디자인 관련 필수항목
*****************************************************************************************/
String logo_yn = "N"; //가맹점 로고 사용 여부 (N: 모빌리언스 로고-default, Y: 가맹점 로고 (사전에 모빌리언스에 가맹점 로고 이미지를 등록해야함))
String call_type = "P"; //결제창 호출 방식 (P: 팝업-default, SELF: 페이지전환, I: 아이프레임)
/*****************************************************************************************
- 디자인 관련 선택항목 (향후 변경될 있습니다.)
*****************************************************************************************/
String iframe_name = ""; //결제창을 iframe으로 호출 경우 iframe 명칭 세팅
String infoarea_yn = ""; //결제창 안내문 표시여부 (Y: 표시-default, N: 미표시)
String footer_yn = ""; //결제창 하단 안내 표시여부 (Y: 표시-default, N: 미표시)
String height = ""; //결제창 높이 (px단위: iframe 사용시 결제창 높이 조절, 팝업창 호출시 "" 세팅)
String prdt_hidden = ""; //iframe 사용시 상품명 숨김 여부 (가맹점 디자인 결제창으로 결제 입력 사항만 iframe에서 사용시)
String email_hidden = ""; //결제자 e-mail 입력창 숨김 여부 (N: 표시-default, Y: 미표시)
String contract_hidden = ""; //이용약관 숨김 여부 (Y: 표시-default, N: 미표시)
/*****************************************************************************************
- 선택 입력 항목
*****************************************************************************************/
String userid = ""; //가맹점결제자ID
String username = ""; //결제자명
String payeremail = ""; //결제자email
String notiemail = ""; //알림 e-mail: 결제 완료 당사와 가맹점간의 Noti 연동이 실패한 경우 알람 메일을 받을 가맹점 담당자 이메일주소
String item = ""; //아이템코드. 미사용 반드시 공백으로 세팅.
String prdtcd = ""; //상품코드. 자동결제인 경우 상품코드별 SMS문구를 별도 세팅할 사용하며 사전에 모빌리언스에 등록이 필요함.
String closeurl = ""; //닫기버튼 클릭 호출되는 가맹점 페이지. CALL_TYPE = I 또는 SELF 셋팅 필수
String failurl = ""; //결제 실패 사용자에게 보여질 가맹점 실패 페이지
String mstr = ""; //가맹점콜백변수 //가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &,%,?,^ 사용불가 ( : MSTR="a=1|b=2|c=3" )
String deposit = ""; //일회용컵보증금
/*****************************************************************************************
- 간편결제 : CN
*****************************************************************************************/
String termregno = ""; //하위가맹점사업자번호
String app_scheme = ""; //APP SCHEME
String cn_billtype = ""; //매출전표 출력 과세/비과세 구분
String cn_taxfree = ""; //비과세
String cn_tax = ""; //부과세 - 전체금액의 10%이하로 설정
String cn_freeinterest = ""; //무이자할부정보
String cn_point = ""; //카드사포인트사용여부
String cn_install = ""; //할부개월
String cn_fixcardcd = ""; //카드사 선택노출 '결제창에 노출할 카드사 코드 셋팅
String cn_direct = ""; //카드사 직접호출 ( : KBC:00:N )
/*****************************************************************************************
- 휴대폰결제 : MC
*****************************************************************************************/
String mc_authpay = ""; //하이브리드 방식 사용시 "Y" 설정 (휴대폰 SMS인증 일반 소켓모듈 결제 연동시 사용) (N: 미사용-default, Y: 사용)
String mc_autopay = ""; //자동결제를 위한 최초 일반결제 "Y" 세팅. 결제 완료 휴대폰정보 대체용 USERKEY 발급 자동결제용 AutoBillKey 발급 (N: 미사용-default, Y: 사용)
String mc_partpay = ""; //부분취소를 위한 일반결제 "Y" 세팅. 결제 완료 자동결제 USERKEY 발급 (N: 미사용-default, Y: 사용)
String mc_no = ""; //사용자 폰번호 (결제창 호출시 세팅할 폰번호)
String mc_fixno = ""; //사용자 폰번호 수정불가 여부(N: 수정가능-default, Y: 수정불가)
String mc_defaultcommid = ""; //통신사 기본 선택 . SKT, KTF, LGT 3개의 원하는 통신사 세팅 해당 통신사가 미리 선택되어짐.
String mc_fixcommid = ""; //통신사 고정 선택 . SKT, KTF, LGT 3개의 원하는 통신사 세팅 해당 통신사만 결제창에 보여짐.
String mc_cpcode = ""; //리셀러하위상점key. 리셀러 업체인 경우에만 세팅.
String mc_ez_yn = "Y"; //간소화결제여부. 간소화결제 사용시 "Y" 설정 (N: 미사용-default, Y: 사용)
String mc_ez_key = ""; //간소화결제 사용자키
/*****************************************************************************************
- 즉시이체 : RA
*****************************************************************************************/
/*****************************************************************************************
- 암호화 처리 (암호화 사용 )
Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다.
) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로
암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다.
*****************************************************************************************/
String cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용
String cryptstring = ""; //암호화 사용 암호화된 스트링
}

View File

@ -236,8 +236,8 @@ public class MjonPayVO extends ComDefaultVO{
private int remainPoint;
private String payType; // 결제분류
private String totChgPay; // 간편결제분류
private String rtnMsg;
}

View File

@ -119,7 +119,9 @@ html,body {overflow:hidden;}
</head>
<body>
<!-- <form name="payForm" method="post" action="payResult.jsp"> -->
<form name="payForm" method="post" action="payResultAjax.do">
<!-- <form name="payForm" method="post" action="payResultAjax.do"> -->
<form name="payForm" method="post" action="${mjonPayVO.returnURL}">
<input type="hidden" id="pageType" value="${mjonPayVO.pageType}">
<input type="hidden" name="PayMethod" value="${mjonPayVO.payMethod}">
<table class="payTable">
<!-- <tr>

View File

@ -314,14 +314,14 @@ function pgOpenerPopup(){
setNextPayMethod();
var payMethod = "";
document.pgForm.action = "/web/member/pay/PayActionAjax.do";
document.pgForm.action = "/web/event/member/pay/firstEventPayActionAjax.do";
if ($currentTab==0) {
payMethod = "CARD";
} else if($currentTab==1) {
payMethod = "VBANK";
} else if($currentTab==2) {
payMethod = "BANK";
payMethod = "BANK";
} else {
payMethod = "SPAY";
}
@ -361,7 +361,8 @@ function pgOpenerPopup(){
// 전용계좌
} else if ($currentTab==2) {
// KG 모빌리언스 => BANK(즉시이체)
kgmPayBankRequest();
firstEventKgmPayBankRequest();
// kgmPayMobileRequest()
} else {
var cnDirect = "";
var mstr = "";
@ -380,16 +381,140 @@ function pgOpenerPopup(){
}
// KG 모빌리언스 => SPAY(간편결제)
kgmPayCardRequest(cnDirect, mstr);
kgmPaySpayRequest(cnDirect, mstr);
}
}
//KG 모빌리언스 => CARD
function kgmPayCardRequest(cnDirect, mstr) {
//KG 모빌리언스 => MOBILE
function kgmPayMobileRequest() {
$.ajax({
type: "POST",
url: "/web/member/pay/kgmCardEncodeAjax.do",
url: "/web/event/member/pay/firstEventKgmMobileEncodeAjax.do",
data: {"Prdtprice": $("#price").val()},
dataType:'json',
async: false,
success: function (data) {
if (data.status == "OK") {
var vo = data.object
var form = document.payMobileForm;
form.CASH_GB.value = vo.cash_gb;
form.Okurl.value = vo.okurl;
form.MC_SVCID.value = vo.mc_svcid;
form.Prdtnm.value = vo.prdtnm;
form.Prdtprice.value = vo.prdtprice;
form.Siteurl.value = vo.siteurl;
form.PAY_MODE.value = vo.pay_mode;
form.Tradeid.value = vo.tradeid;
form.LOGO_YN.value = vo.logo_yn;
form.CALL_TYPE.value = vo.call_type;
form.MC_AUTHPAY.value = vo.mc_authpay;
form.Notiurl.value = vo.notiurl;
form.MC_AUTOPAY.value = vo.mc_autopay;
form.Closeurl.value = vo.closeurl;
form.MC_PARTPAY.value = vo.mc_partpay;
form.Failurl.value = vo.failurl;
form.MC_No.value = vo.mc_no;
form.MC_FIXNO.value = vo.mc_fixno;
form.MC_Cpcode.value = vo.mc_cpcode;
form.Userid.value = vo.userid;
form.Item.value = vo.item;
form.Prdtcd.value = vo.prdtcd;
form.Payeremail.value = vo.payeremail;
form.MC_DEFAULTCOMMID.value = vo.mc_defaultcommid;
form.MC_FIXCOMMID.value = vo.mc_fixcommid;
form.MSTR.value = vo.mstr;
form.Sellernm.value = vo.sellernm;
form.Sellertel.value = vo.sellertel;
form.Notiemail.value = vo.notiemail;
form.IFRAME_NAME.value = vo.iframe_name;
form.INFOAREA_YN.value = vo.infoarea_yn;
form.FOOTER_YN.value = vo.footer_yn;
form.HEIGHT.value = vo.height;
form.PRDT_HIDDEN.value = vo.prdt_hidden;
form.EMAIL_HIDDEN.value = vo.email_hidden;
form.CONTRACT_HIDDEN.value = vo.contract_hidden;
form.Cryptyn.value = vo.cryptyn;
form.Cryptstring.value = vo.cryptstring;
form.MC_EZ_YN.value = vo.mc_ez_yn;
form.MC_EZ_KEY.value = vo.mc_ez_key;
form.MC_PUSH_KEY.value = vo.mc_push_key;
//아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출
MCASH_PAYMENT(form);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
//KG 모빌리언스 => BANK(즉시이체)
function firstEventKgmPayBankRequest() {
$.ajax({
type: "POST"
, url: "/web/event/member/pay/firstEventKgmBankEncodeAjax.do"
, data: {"Prdtprice": $("#price").val()}
, dataType:'json'
, success: function (data) {
if (data.status == "OK") {
var vo = data.object
var form = document.payBankForm;
form.CASH_GB.value = vo.cash_gb;
form.Okurl.value = vo.okurl;
form.RA_SVCID.value = vo.ra_svcid;
form.Prdtnm.value = vo.prdtnm;
form.Prdtprice.value = vo.prdtprice;
form.Siteurl.value = vo.siteurl;
form.PAY_MODE.value = vo.pay_mode;
form.Tradeid.value = vo.tradeid;
form.LOGO_YN.value = vo.logo_yn;
form.CALL_TYPE.value = vo.call_type;
form.Notiurl.value = vo.notiurl;
form.Closeurl.value = vo.closeurl;
form.Failurl.value = vo.failurl;
form.Userid.value = vo.userid;
form.Item.value = vo.item;
form.Prdtcd.value = vo.prdtcd;
form.Payeremail.value = vo.payeremail;
form.MSTR.value = vo.mstr;
form.Notiemail.value = vo.notiemail;
form.IFRAME_NAME.value = vo.iframe_name;
form.INFOAREA_YN.value = vo.infoarea_yn;
form.FOOTER_YN.value = vo.footer_yn;
form.HEIGHT.value = vo.height;
form.PRDT_HIDDEN.value = vo.prdt_hidden;
form.EMAIL_HIDDEN.value = vo.email_hidden;
form.CONTRACT_HIDDEN.value = vo.contract_hidden;
form.Cryptyn.value = vo.cryptyn;
form.Cryptstring.value = vo.cryptstring;
form.Deposit.value = vo.deposit;
form.Billyn.value = "N";
//아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출
MCASH_PAYMENT(form);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
//KG 모빌리언스 => SPAY(간편결제)
function kgmPaySpayRequest(cnDirect, mstr) {
$.ajax({
type: "POST",
url: "/web/event/member/pay/firstEventKgmCardEncodeAjax.do",
data: {"Prdtprice": $("#price").val()},
dataType:'json',
async: false,
@ -440,126 +565,6 @@ function kgmPayCardRequest(cnDirect, mstr) {
});
}
//KG 모빌리언스 => MOBILE
function kgmPayMobileRequest() {
$.ajax({
type: "POST",
url: "/web/member/pay/kgmMobileEncodeAjax.do",
data: {"Prdtprice": $("#price").val()},
dataType:'json',
async: false,
success: function (data) {
if (data.isSuccess) {
var form = document.payMobileForm;
form.CASH_GB.value = data.CASH_GB;
form.Okurl.value = data.Okurl;
form.MC_SVCID.value = data.MC_SVCID;
form.Prdtnm.value = data.Prdtnm;
form.Prdtprice.value = data.Prdtprice;
form.Siteurl.value = data.Siteurl;
form.PAY_MODE.value = data.PAY_MODE;
form.Tradeid.value = data.Tradeid;
form.LOGO_YN.value = data.LOGO_YN;
form.CALL_TYPE.value = data.CALL_TYPE;
form.MC_AUTHPAY.value = data.MC_AUTHPAY;
form.Notiurl.value = data.Notiurl;
form.MC_AUTOPAY.value = data.MC_AUTOPAY;
form.Closeurl.value = data.Closeurl;
form.MC_PARTPAY.value = data.MC_PARTPAY;
form.Failurl.value = data.Failurl;
form.MC_No.value = data.MC_No;
form.MC_FIXNO.value = data.MC_FIXNO;
form.MC_Cpcode.value = data.MC_Cpcode;
form.Userid.value = data.Userid;
form.Item.value = data.Item;
form.Prdtcd.value = data.Prdtcd;
form.Payeremail.value = data.Payeremail;
form.MC_DEFAULTCOMMID.value = data.MC_DEFAULTCOMMID;
form.MC_FIXCOMMID.value = data.MC_FIXCOMMID;
form.MSTR.value = data.MSTR;
form.Sellernm.value = data.Sellernm;
form.Sellertel.value = data.Sellertel;
form.Notiemail.value = data.Notiemail;
form.IFRAME_NAME.value = data.IFRAME_NAME;
form.INFOAREA_YN.value = data.INFOAREA_YN;
form.FOOTER_YN.value = data.FOOTER_YN;
form.HEIGHT.value = data.HEIGHT;
form.PRDT_HIDDEN.value = data.PRDT_HIDDEN;
form.EMAIL_HIDDEN.value = data.EMAIL_HIDDEN;
form.CONTRACT_HIDDEN.value = data.CONTRACT_HIDDEN;
form.Cryptyn.value = data.Cryptyn;
form.Cryptstring.value = data.Cryptstring;
form.MC_EZ_YN.value = data.MC_EZ_YN;
form.MC_EZ_KEY.value = data.MC_EZ_KEY;
form.MC_PUSH_KEY.value = data.MC_PUSH_KEY;
//아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출
MCASH_PAYMENT(form);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
//KG 모빌리언스 => BANK
function kgmPayBankRequest() {
$.ajax({
type: "POST",
url: "/web/member/pay/kgmBankEncodeAjax.do",
data: {"Prdtprice": $("#price").val()},
dataType:'json',
async: false,
success: function (data) {
if (data.isSuccess) {
var form = document.payBankForm;
form.CASH_GB.value = data.CASH_GB;
form.Okurl.value = data.Okurl;
form.RA_SVCID.value = data.RA_SVCID;
form.Prdtnm.value = data.Prdtnm;
form.Prdtprice.value = data.Prdtprice;
form.Siteurl.value = data.Siteurl;
form.PAY_MODE.value = data.PAY_MODE;
form.Tradeid.value = data.Tradeid;
form.LOGO_YN.value = data.LOGO_YN;
form.CALL_TYPE.value = data.CALL_TYPE;
form.Notiurl.value = data.Notiurl;
form.Closeurl.value = data.Closeurl;
form.Failurl.value = data.Failurl;
form.Userid.value = data.Userid;
form.Item.value = data.Item;
form.Prdtcd.value = data.Prdtcd;
form.Payeremail.value = data.Payeremail;
form.MSTR.value = data.MSTR;
form.Notiemail.value = data.Notiemail;
form.IFRAME_NAME.value = data.IFRAME_NAME;
form.INFOAREA_YN.value = data.INFOAREA_YN;
form.FOOTER_YN.value = data.FOOTER_YN;
form.HEIGHT.value = data.HEIGHT;
form.PRDT_HIDDEN.value = data.PRDT_HIDDEN;
form.EMAIL_HIDDEN.value = data.EMAIL_HIDDEN;
form.CONTRACT_HIDDEN.value = data.CONTRACT_HIDDEN;
form.Cryptyn.value = data.Cryptyn;
form.Cryptstring.value = data.Cryptstring;
form.Deposit.value = data.Deposit;
form.Billyn.value = "N";
//아래와 같이 ext_inc_comm.js에 선언되어 있는 함수를 호출
MCASH_PAYMENT(form);
}
else {
alert("Msg : " + data.msg);
}
},
error: function (e) {
alert("ERROR : " + JSON.stringify(e));
}
});
}
// 사용안함
function setPrice(obj, price){
@ -913,17 +918,6 @@ function TabTypePay(obj, tabId) {
<div class="inner">
<!-- send top -->
<div class="send_top">
<!-- tab button -->
<!-- <ul class="tabType4">
<li class="tab"><button type="button" onclick="location.href='/web/pay/PayGuide.do'">요금안내/견적내기</button></li>
<li class="tab active"><button type="button">결제하기</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayUserList.do'">요금 사용내역</button></li>
현금영수증 자동발행 주석
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">계산서/현금영수증 발행 등록</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li>
</ul> --><!--// tab button -->
<!-- 결제관리 - 결제하기 -->
<div class="serv_content charg_cont current" id="tab5_2">
<div class="heading">
<h2>이벤트 결제하기</h2>
@ -953,7 +947,8 @@ function TabTypePay(obj, tabId) {
<ul class="area_tab type03">
<li class="btn_charge1 btn_tab active"><button type="button" onclick="TabTypePay(this,'1');"><i></i>신용카드</button></li>
<li class="btn_charge2 btn_tab"><button type="button" onclick="TabTypePay(this,'2');" id="btnDdedicatedAccount"><i></i>전용계좌</button></li>
<li class="btn_charge3 btn_tab"><button type="button" onclick="TabTypePay(this,'3');"><i></i>즉시이체</button></li>
<!-- <li class="btn_charge3 btn_tab"><button type="button" onclick="TabTypePay(this,'3');" id="btnDdedicatedAccount"><i></i>모바일 테스트</button></li> -->
<li class="btn_charge4 btn_tab"><button type="button" onclick="TabTypePay(this,'3');"><i></i>즉시이체</button></li>
<li class="btn_charge5 btn_tab simple_pay event_simple"><button type="button" onclick="TabTypePay(this,'5');"><i></i></button></li>
<li class="btn_charge6 btn_tab simple_pay event_simple"><button type="button" onclick="TabTypePay(this,'6');"><i></i></button></li>