Просмотр исходного кода

Merge remote-tracking branch 'origin/order' into jsh77b

jsh77b 5 лет назад
Родитель
Сommit
b55aa005e5

+ 140 - 39
src/main/java/com/style24/core/biz/service/TscKakaoPayService.java

@@ -16,11 +16,16 @@ import org.springframework.util.MultiValueMap;
 import org.springframework.web.client.RestTemplate;
 
 import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.gagaframework.web.util.GagaFileUtil;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.style24.core.biz.dao.TscPointDao;
+import com.style24.core.biz.thirdparty.KakaoPayApi;
+import com.style24.core.support.env.TscConstants;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Payment;
 import com.style24.persistence.domain.Point;
 
 import lombok.extern.slf4j.Slf4j;
@@ -39,9 +44,13 @@ public class TscKakaoPayService {
 	private Environment env;
 
 	@Autowired
-	private RestTemplate restTemplate;
+	private TscMessageByLocale message;
 
-	public static final String PROTOCOL = "http:";
+	@Autowired
+	private RestTemplate restTemplate;
+	
+	@Autowired
+	private KakaoPayApi kakaoPayApi;
 
 	/**
 	 * 카카오페이 결제준비 처리
@@ -53,44 +62,136 @@ public class TscKakaoPayService {
 	 */
 	@Transactional("shopTxnManager")
 	public GagaMap kakaoPaymentReady(Order order) {
-		GagaMap map = new GagaMap();
+		// API 전송 URL 설정
 		String paymentReadyUrl = env.getProperty("kakao.paymentReadyUrl");
-		try {
-			MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-			params.add("cid", env.getProperty("kakao.cid"));
-			params.add("partner_order_id", order.getOrdNo()+"");
-			params.add("partner_user_id", order.getCustNo()+"");
-			params.add("item_name", order.getGoodsNm());
-			params.add("quantity", order.getOrdQty()+"");
-			params.add("total_amount", order.getRealOrdAmt()+"");
-			params.add("tax_free_amount", "0");
-			params.add("approval_url", PROTOCOL + env.getProperty("domain.front"));
-			params.add("fail_url", PROTOCOL + env.getProperty("domain.front"));
-			params.add("cancel_url", PROTOCOL + env.getProperty("domain.front"));
-
-			// Header
-			HttpHeaders headers = new HttpHeaders();
-			headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-			headers.set("Authorization", "KakaoAK " + env.getProperty("kakao.adminKey"));
-
-			HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
-			URI url = URI.create(paymentReadyUrl);
-
-			// POST방식으로 호출
-			ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
-			log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
-
-			String jsonResult = responseEntity.getBody();
-			log.info("responseEntity.getBody(): {} ", jsonResult);
-
-			Gson gson = new GsonBuilder().create();
-			map = gson.fromJson(jsonResult, GagaMap.class); //access_token, refresh_token
-
-		} catch (Exception e) {
-			log.error(e.getMessage());
+
+		// API 파라메터 설정
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+		params.add("cid", env.getProperty("kakao.cid"));
+		params.add("partner_order_id", order.getOrdNo()+"");
+		params.add("partner_user_id", order.getCustNo()+"");
+		params.add("item_name", order.getGoodsNm());
+		params.add("quantity", order.getOrdQty()+"");
+		params.add("total_amount", order.getRealOrdAmt()+"");
+		params.add("tax_free_amount", "0");
+		params.add("approval_url", order.getApprovalUrl());
+		params.add("fail_url", order.getFailUrl());
+		params.add("cancel_url", order.getCancelUrl());
+
+		// 카카오페이 API 전송
+		return kakaoPayApi.kakaoPaymentApi(params, paymentReadyUrl);
+	}
+
+	/**
+	 * 카카오페이 승인 처리
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 04
+	 */
+	@Transactional("shopTxnManager")
+	public Payment approveKakaoPayment(Order order) {
+		// API 전송 URL 설정
+		String approvePaymentUrl = env.getProperty("kakao.approvePaymentUrl");
+
+		// API 파라메터 설정
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+		params.add("cid", env.getProperty("kakao.cid"));
+		params.add("tid", order.getPgTid());
+		params.add("partner_order_id", order.getOrdNo()+"");
+		params.add("partner_user_id", order.getCustNo()+"");
+		params.add("pg_token", order.getPgToken());
+
+		// 카카오페이 API 전송
+		GagaMap map = kakaoPayApi.kakaoPaymentApi(params, approvePaymentUrl);
+
+		// 카카오페이 API 전송 결과 처리
+		Payment payment = new Payment();
+		Gson gson = new GsonBuilder().create();
+		int statusCode = map.getInt("statusCode");
+
+		// 승인 성공일때 200
+		if (statusCode == 200) {
+			payment.setPgTradeNo(map.getString("aid"));
+			payment.setPgTid(map.getString("tid"));
+			payment.setPgShopId(map.getString("cid"));
+			payment.setOrdNo(Integer.parseInt(map.getString("partner_order_id")));
+			payment.setCustNo(Integer.parseInt(map.getString("partner_user_id")));
+			payment.setKakaoMethodType(map.getString("payment_method_type"));
+
+			GagaMap amount = gson.fromJson(map.getString("amount"), GagaMap.class);
+			payment.setPayAmt((int)amount.getDouble("total"));
+			payment.setKakaoPoint((int)amount.getDouble("point"));
+			payment.setKakaoDiscount((int)amount.getDouble("discount"));
+
+			// 카카오페이 카드결제 시 카드정보 설정
+			if ("CARD".equals(map.getString("payment_method_type"))) {
+				GagaMap cardInfo = gson.fromJson(map.getString("card_info"), GagaMap.class);
+				payment.setCardKind(cardInfo.getString("purchase_corp"));
+				payment.setCardNm(cardInfo.getString("issuer_corp"));
+				payment.setCardType("신용".equals(cardInfo.getString("card_type")) ? "N" : "Y");
+				payment.setCardMips(cardInfo.getString("install_month"));
+			}
+			
+			payment.setResCd(String.valueOf(statusCode));
+			payment.setResMsg(message.getMessage("SUCC_0004"));
+		} else {
+			int code = (int) map.getDouble("code");
+			String msg = map.getString("msg");
+			GagaMap extras = gson.fromJson(map.getString("extras"), GagaMap.class);
+			String resultCode = extras.getString("method_result_code");
+			String resultMessage = extras.getString("method_result_message");
+
+			payment.setResCd(String.valueOf(code));
+			payment.setResMsg(resultMessage);
 		}
-		
-		return map;
+
+		return payment;
+	}
+
+	/**
+	 * 카카오페이 주문 조회
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 04
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap getKakaoPaymentOrder(Order order) {
+		// API 전송 URL 설정
+		String paymentOrderUrl = env.getProperty("kakao.paymentOrderUrl");
+
+		// API 파라메터 설정
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+		params.add("cid", env.getProperty("kakao.cid"));
+		params.add("tid", order.getPgTid());
+
+		// 카카오페이 API 전송
+		GagaMap map = kakaoPayApi.kakaoPaymentApi(params, paymentOrderUrl);
+
+		// 카카오페이 API 전송 결과 처리
+		GagaMap result = new GagaMap();
+		Gson gson = new GsonBuilder().create();
+		result.setString("tid", map.getString("tid"));
+		result.setString("cid", map.getString("cid"));
+		result.setString("status", map.getString("status"));
+		result.setString("partner_order_id", map.getString("partner_order_id"));
+		result.setString("partner_user_id", map.getString("partner_user_id"));
+		result.setString("payment_method_type", map.getString("payment_method_type"));
+		result.set("amount", gson.fromJson(map.getString("amount"), GagaMap.class));
+		result.set("canceled_amount", gson.fromJson(map.getString("canceled_amount"), GagaMap.class));
+		result.set("cancel_available_amount", gson.fromJson(map.getString("cancel_available_amount"), GagaMap.class));
+		result.setString("item_name", map.getString("item_name"));
+		result.setString("item_code", map.getString("item_code"));
+		result.setDouble("quantity", map.getDouble("quantity"));
+		result.setString("created_at", map.getString("created_at"));
+		result.setString("approved_at", map.getString("approved_at"));
+		result.setString("canceled_at", map.getString("canceled_at"));
+		result.set("selected_card_info", gson.fromJson(map.getString("selected_card_info"), GagaMap.class));
+		result.set("payment_action_details", gson.fromJson(map.getString("payment_action_details"), GagaMap.class));
+
+		return result;
 	}
-	
 }

+ 45 - 15
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -26,12 +26,8 @@ public class TscKcpService {
 		return  val;
 	}
 
-	public GagaMap kcpPayRequest(Payment param, HttpServletRequest request, HttpServletResponse response) throws Exception {
-		GagaMap result = new GagaMap();
-		// PC pay_method
-		/* =  신용카드 : 100000000000, 계좌이체  : 010000000000, 가상계좌 : 001000000000 = */
-		/* =  포인트   : 000100000000, 휴대폰    : 000010000000, 상품권   : 000000001000 = */
-		/* =  ARS      : 000000000010                                                    = */
+	public Payment kcpPayRequest(Payment param, HttpServletRequest request, HttpServletResponse response) throws Exception {
+		Payment result = new Payment();
 
 		// 01. characterEncoding EUC-KR 세팅
 		request.setCharacterEncoding("euc-kr");
@@ -42,9 +38,9 @@ public class TscKcpService {
 		}
 
 		// 02. 지불 요청 정보 설정
-		param.setReqTx(request.getParameter("req_tx"));
-		param.setTranCd(request.getParameter("tran_cd"));
-		param.setOrdrIdxx(request.getParameter("ordr_idxx"));
+		result.setReqTx(request.getParameter("req_tx"));
+		result.setTranCd(request.getParameter("tran_cd"));
+		result.setOrdrIdxx(Integer.parseInt(request.getParameter("ordr_idxx")));
 
 		// 03. 인스턴스 생성 및 초기화(변경 불가) (결제에 필요한 인스턴스를 생성하고 초기화 합니다.)
 		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
@@ -52,7 +48,7 @@ public class TscKcpService {
 		c_PayPlus.mf_init_set();
 
 		// 04-1. 승인 요청 정보 설정
-		if ("pay".equals(param.getReqTx())){
+		if ("pay".equals(result.getReqTx())){
 			c_PayPlus.mf_set_enc_data(f_get_parm(request.getParameter("enc_data" )), f_get_parm(request.getParameter("enc_info")));
 
 			/* 1원은 실제로 업체에서 결제하셔야 될 원 금액을 넣어주셔야 합니다. 결제금액 유효성 검증 */
@@ -61,17 +57,51 @@ public class TscKcpService {
 		}
 
 		// 05. 실행
-		if (param.getTranCd().length() > 0) {
-			c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), env.getProperty("pg.kcp.site.key"), param.getTranCd(), "", param.getOrdrIdxx(), env.getProperty("pg.kcp.log.level"), "0");
+		if (result.getTranCd().length() > 0) {
+			c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), env.getProperty("pg.kcp.site.key"), result.getTranCd(), "", result.getOrdrIdxx() + "", env.getProperty("pg.kcp.log.level"), "0");
 		} else {
 			c_PayPlus.m_res_cd  = "9562";
 			c_PayPlus.m_res_msg = "연동 오류|tran_cd값이 설정되지 않았습니다.";
 		}
 
-		param.setResCd(c_PayPlus.m_res_cd);		// 결과 코드
-		param.setResMsg(c_PayPlus.m_res_msg);	// 결과 메시지
+		result.setResCd(c_PayPlus.m_res_cd);		// 결과 코드
+		result.setResMsg(c_PayPlus.m_res_msg);	// 결과 메시지
+
+		// 06. 승인 결과 값 추출
+		if ("pay".equals(result.getReqTx())) {
+			if ("0000".equals(result.getResCd())) {
+				result.setPgTid(c_PayPlus.mf_get_res("tno"));							// KCP 거래 고유 번호
+				//result.setPntIssue(c_PayPlus.mf_get_res("pnt_issue"));					// 결제 포인트사 코드
+				result.setPayAmt(Integer.parseInt(c_PayPlus.mf_get_res("amount")));	// KCP 실제 거래 금액
+				result.setPgCpnAmt(c_PayPlus.mf_get_res("coupon_mny").isEmpty() ? 0 : Integer.parseInt(c_PayPlus.mf_get_res("coupon_mny")));    // 쿠폰 할인금액
+
+				/* = -------------------------------------------------------------------------- = */
+				/* =   06-1. 신용카드 승인 결과 처리                                            = */
+				/* = -------------------------------------------------------------------------- = */
+				if ("100000000000".equals(param.getUsePayMethod())) {
+					result.setCardKind(c_PayPlus.mf_get_res("card_cd"));			// 카드종류. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값 ??      card_cd: 카드 발급사 코드
+					result.setCardBank(c_PayPlus.mf_get_res("card_cd"));			// 카드발급은행. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값 ??  card_cd: 카드 발급사 코드
+					result.setCardNm(c_PayPlus.mf_get_res("card_name"));			// 카드명. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값 ??        card_name: 결제건의 발급 사 명
+					log.info("CHECK c_PayPlus.mf_get_res(\"app_time\") :::: {}", c_PayPlus.mf_get_res("app_time"));
+					result.setPayDt(c_PayPlus.mf_get_res("app_time"));
+					result.setPgTradeNo(c_PayPlus.mf_get_res("app_no"));			// PG거래번호(승인번호)
+					result.setCardMips(c_PayPlus.mf_get_res("quota"));			// 할부개월수
+					//noinf = c_PayPlus.mf_get_res("noinf"); // 무이자 여부
+					result.setCardPcableYn(c_PayPlus.mf_get_res("partcanc_yn"));	// 부분취소 가능유무
+					// N : 신용카드, Y : 체크카드, G 기프트카드 (기프트카드는 어떻게 입력해야할지 ?)
+					result.setCardType("0".equals(c_PayPlus.mf_get_res("card_bin_type_02")) ? "N" : "Y");
+				}
+			} else {
+				throw new IllegalArgumentException("결제 실패하였습니다.");
+			}
+		} else {
+			// PAY가 아닐 경우 ?? 다른 메서드로 진행할지 확인 후 Exception 처리할건지 취소가 진행될건지 소스 진행
+			int a = 1;
+		}
 
-		log.info("CHECK RESULT >> " + param.toString());
+		log.info("CHECK RESPONSE DATA       ::::: {} / {}", c_PayPlus.toString(), c_PayPlus.getRecvObj().toString());
+		log.info("CHECK RESPONSE RESULT DATA ::::: {}", result.toString());
+		log.info("CHECK RESPONSE PARAM DATA ::::: {}", param.toString());
 
 		return result;
 	}

+ 79 - 0
src/main/java/com/style24/core/biz/thirdparty/KakaoPayApi.java

@@ -0,0 +1,79 @@
+package com.style24.core.biz.thirdparty;
+
+import java.net.URI;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Order;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 카카오페이 API
+ *
+ * @author card007
+ * @since 2021. 03. 04
+ */
+@Component
+@Slf4j
+public class KakaoPayApi {
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private RestTemplate restTemplate;
+
+	/**
+	 * 카카오페이 API
+	 *
+	 * @param Order
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 03
+	 */
+	public GagaMap kakaoPaymentApi(MultiValueMap<String, String> params, String apiUrl) {
+		GagaMap map;
+
+		try {
+			HttpHeaders headers = new HttpHeaders();
+			headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+			headers.set("Authorization", "KakaoAK " + env.getProperty("kakao.adminKey"));
+
+			HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
+			URI url = URI.create(apiUrl);
+
+			ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, request, String.class);
+			log.info("responseEntity.getStatusCode(): {} ", responseEntity.getStatusCode());
+
+			String jsonResult = responseEntity.getBody();
+			log.info("responseEntity.getBody(): {} ", jsonResult);
+
+			Gson gson = new GsonBuilder().create();
+			map = gson.fromJson(jsonResult, GagaMap.class);
+			map.setInt("statusCode", responseEntity.getStatusCode().value());
+
+		} catch (Exception e) {
+			throw new IllegalStateException(message.getMessage("FAIL_0004"));
+		}
+
+		return map;
+	}
+}

+ 0 - 60
src/main/java/com/style24/core/biz/web/TscKcpController.java

@@ -1,60 +0,0 @@
-package com.style24.core.biz.web;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import com.gagaframework.web.parameter.GagaMap;
-import com.style24.core.biz.service.TscKcpService;
-import com.style24.core.biz.service.TscOrderService;
-import com.style24.persistence.domain.Order;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- * KCP PG Controller
- * @author xodud1202
- * @since 2021. 03. 02
- */
-@Controller
-@RequestMapping("/kcp")
-@Slf4j
-public class TscKcpController {
-	@Autowired
-	private TscKcpService kcpService;
-
-	@Autowired
-	private TscOrderService orderService;
-
-	@Autowired
-	private Environment env;
-
-	/**
-	 * KCP ORDER
-	 * @return
-	 * @author xodud1202
-	 * @since 2021. 01. 28
-	 */
-	@ResponseBody
-	@PostMapping("/test")
-	public GagaMap kcpTest(Order param, HttpServletRequest request, HttpServletResponse response) {
-		GagaMap result = new GagaMap();
-		try {
-			request.setCharacterEncoding("euc-kr");
-
-			//result = kcpService.kcpOrderRequest(param, request, response);
-			result.put("message", "SUCCESS");
-		} catch (Exception e) {
-
-		}
-
-		return result;
-	}
-}

+ 21 - 1
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -330,6 +330,26 @@ public class TscConstants {
 		}
 	}
 
+	// PG 구분
+	public enum PgGb {
+		INICIS("INICIS"),	// 이니시스
+		KAKAO("KAKAO"),		// 카카오페이
+		KCP("KCP"),			// KCP
+		NAVER("NAVER"),		// NAVERPAY
+		NICE("NICE"),		// NICEPAY
+		PAYCO("PAYCO");		// PAYCO
+
+		private String value;
+
+		private PgGb(String value) {
+			this.value = value;
+		}
+
+		public String value() {
+			return value;
+		}
+	}
+
 	// 배송비구분
 	public enum DeliveryFeeGb {
 		ORIGIN_DELIVERY_FEE("G018_10"),		// 원주문배송비
@@ -805,7 +825,7 @@ public class TscConstants {
 
 	// 프론트 구분
 	public enum FrontGb {
-		MOBIEL("M"),
+		MOB("M"),
 		PC("P");
 
 		private String value;

+ 6 - 0
src/main/java/com/style24/persistence/domain/Order.java

@@ -520,6 +520,12 @@ public class Order extends TscBaseDomain {
 	private int cancelCount;
 	private int exchangeCount;
 	private int returnCount;
+	
+	// 카카오페이
+	private String approvalUrl;
+	private String failUrl;
+	private String cancelUrl;
+	private String pgToken;
 
 	// 암호화 대상 복호화 처리
 	public String getCustNm() {

+ 43 - 1
src/main/java/com/style24/persistence/domain/Payment.java

@@ -18,16 +18,51 @@ import lombok.Data;
 @SuppressWarnings("serial")
 @Data
 public class Payment extends TscBaseDomain {
+	// TB_PAYMENT
+	private int paySq;				// 결제 일련번호
+	private int ordNo;				// 주문번호
+	private int payAmt;				// 결제금액
+	private int pgCpnAmt;			// PG 쿠폰할인금
+	private int npayPntAmt;			// 네이버페이 포인트 할인금
+	private int ordChgSq;			// 주문변경일련번호
+	private String payGb;			// 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
+	private String payDt;			// 결제일자
+	private String pgMeans;			// 결제수단
+	private String pgGb;			// PG구분
+	private String pgTid;			// PG TID
+	private String pgTradeNo;		// PG거래번호(승인번호)
+	private String pgShopId;		// PG가맹점ID
+	private String cardType;		// PG 카드 유형 (Y:체크카드, N:신용카드, G:기프트카드) 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardKind;		// 카드종류. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardBank;		// 카드발급은행. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardNm;			// 카드명. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardMips;		// 카드할부개월수. 결제수단이 "30:신용카드"일 때 사용. PG사에서 받은 값
+	private String cardPcableYn;	// 부분취소가능여부
+	private String vaNo;			// 가상계좌번호. 결제수단이 "20:무통장입금일" 때 사용
+	private String vaNm;			// 가상계좌예금주명. 결제수단이 "20:무통장입금일" 때 사용
+	private String vaBank;			// 가상계좌은행(공통코드G940). 결제수단이 "20:무통장입금일" 때 사용
+	private String vaDeadline;		// 무통장입금마감일시. 결제수단이 "20:무통장입금일" 때 사용
+	private String telecom;			// 통신사.결제수단이 휴대폰결제인경우만 사용
+	private String escrowYn;		// 에스크로 여부
+	private int custNo;				// 고객번호
+
 	// KCP
+	private int shopUserId;			// 쇼핑몰 회원 ID (CUST_NO)
 	private int quotaopt;			// 할부옵션
 	private int goodMny;			// 결제금액
+	private int ordrIdxx;			// 주문번호
+	private int amount;				// KCP 실제 거래 금액
+	private int couponMny;			// 쿠폰금액
+	private String pntIssue;		// 결제 포인트사 코드
+	private String tno;				// KCP 거래 고유 번호
+	private String paycoDirect;		// Y : PAYCO, N : KCP PG
+	private String payMthod;		// PAYCO일때 송부
 	private String reqTx;			// 요청종류 (승인 : pay, 취소, 매입 : mod)
 	private String siteCd;			// 회사코드
 	private String siteName;		// 사이트명
 	private String currency;		// 결제 화폐단위
 	private String moduleType;		// 모듈타입
 	private String payMethod;		// 지불 방법(신용카드 : 100000000000, 계좌이체 : 010000000000, 가상계좌 : 001000000000, 포인트   : 000100000000, 휴대폰   : 000010000000, 상품권   : 000000001000, ARS      : 000000000010)
-	private String ordrIdxx;		// 주문번호
 	private String goodName;		// 상품명
 	private String buyrName;		// 주문자명
 	private String buyrMail;		// 주문자 E-MAIL
@@ -45,4 +80,11 @@ public class Payment extends TscBaseDomain {
 	private String cashYn;
 	private String cashTrCode;
 	private String cashIdInfo;
+	
+	// KAKAOPAY
+	private String kakaoMethodType;	// 결제 수단, CARD 또는 MONEY 중 하나
+	private int kakaoPoint;			// 사용한 포인트 금액
+	private int kakaoDiscount;		// 할인 금액
+	private String createDt;		// 결제 준비 요청 시각
+	private String approveDt;		// 결제 승인 시각
 }