card007 5 лет назад
Родитель
Сommit
51799f41e7

+ 48 - 35
src/main/java/com/style24/core/biz/service/TscKakaoPayService.java

@@ -1,6 +1,13 @@
 package com.style24.core.biz.service;
 
+import java.lang.reflect.Type;
 import java.net.URI;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.function.DoubleToIntFunction;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,10 +27,13 @@ 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.google.gson.reflect.TypeToken;
 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.CustCoupon;
+import com.style24.persistence.domain.KakaoPay;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 import com.style24.persistence.domain.Point;
@@ -56,12 +66,12 @@ public class TscKakaoPayService {
 	 * 카카오페이 결제준비 처리
 	 * 
 	 * @param Order
-	 * @return GagaMap
+	 * @return KakaoPay
 	 * @author card007
 	 * @since 2021. 03. 03
 	 */
 	@Transactional("shopTxnManager")
-	public GagaMap kakaoPaymentReady(Order order) {
+	public KakaoPay kakaoPaymentReady(Order order) {
 		// API 전송 URL 설정
 		String paymentReadyUrl = env.getProperty("kakao.paymentReadyUrl");
 
@@ -104,44 +114,40 @@ public class TscKakaoPayService {
 		params.add("pg_token", order.getPgToken());
 
 		// 카카오페이 API 전송
-		GagaMap map = kakaoPayApi.kakaoPaymentApi(params, approvePaymentUrl);
+		KakaoPay kakaoPay = kakaoPayApi.kakaoPaymentApi(params, approvePaymentUrl);
 
 		// 카카오페이 API 전송 결과 처리
 		Payment payment = new Payment();
 		Gson gson = new GsonBuilder().create();
-		int statusCode = map.getInt("statusCode");
+		int statusCode = kakaoPay.getStatusCode();
 
 		// 승인 성공일때 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"));
+			payment.setPgTradeNo(kakaoPay.getAid());
+			payment.setPgTid(kakaoPay.getTid());
+			payment.setPgShopId(kakaoPay.getCid());
+			payment.setOrdNo(Integer.parseInt(kakaoPay.getPartnerOrderId()));
+			payment.setCustNo(Integer.parseInt(kakaoPay.getPartnerUserId()));
+			payment.setKakaoMethodType(kakaoPay.getPaymentMethodType());
+			payment.setPayAmt(kakaoPay.getAmount().getTotal());
+			payment.setKakaoPoint(kakaoPay.getAmount().getPoint());
+			payment.setKakaoDiscount(kakaoPay.getAmount().getDiscount());
 
 			// 카카오페이 카드결제 시 카드정보 설정
-			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"));
+			if ("CARD".equals(kakaoPay.getPaymentMethodType())) {
+				payment.setCardKind(kakaoPay.getCardInfo().getPurchaseCorp());
+				payment.setCardNm(kakaoPay.getCardInfo().getIssuerCorp());
+				payment.setCardType("신용".equals(kakaoPay.getCardInfo().getCardType()) ? "N" : "Y");
+				payment.setCardMips(kakaoPay.getCardInfo().getInstallMonth());
 			}
 			
 			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");
+			int code = Integer.parseInt(kakaoPay.getCode());
+			String msg = kakaoPay.getMsg();
+			String resultCode = kakaoPay.getExtras().getMethodResultCode();
+			String resultMessage = kakaoPay.getExtras().getMethodResultMessage();
 
 			payment.setResCd(String.valueOf(code));
 			payment.setResMsg(resultMessage);
@@ -159,7 +165,7 @@ public class TscKakaoPayService {
 	 * @since 2021. 03. 04
 	 */
 	@Transactional("shopTxnManager")
-	public GagaMap getKakaoPaymentOrder(Order order) {
+	public KakaoPay getKakaoPaymentOrder(Order order) {
 		// API 전송 URL 설정
 		String paymentOrderUrl = env.getProperty("kakao.paymentOrderUrl");
 
@@ -169,10 +175,10 @@ public class TscKakaoPayService {
 		params.add("tid", order.getPgTid());
 
 		// 카카오페이 API 전송
-		GagaMap map = kakaoPayApi.kakaoPaymentApi(params, paymentOrderUrl);
+		KakaoPay pay = kakaoPayApi.kakaoPaymentApi(params, paymentOrderUrl);
 
 		// 카카오페이 API 전송 결과 처리
-		GagaMap result = new GagaMap();
+		/*GagaMap result = new GagaMap();
 		Gson gson = new GsonBuilder().create();
 		result.setString("tid", map.getString("tid"));
 		result.setString("cid", map.getString("cid"));
@@ -180,18 +186,25 @@ public class TscKakaoPayService {
 		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.set("amount", gson.fromJson(map.getString("amount"), GagaMap.class));
+		result.set("amount", map.get("amount"));
+		Map tmp = (Map) map.get("amount");
+		log.info("total >>> {}", jsonDoubleToInt(tmp.get("total")));
+		// result.set("canceled_amount", gson.fromJson(map.getString("canceled_amount"), GagaMap.class));
+		result.set("canceled_amount", map.get("canceled_amount"));
+		// result.set("cancel_available_amount", gson.fromJson(map.getString("cancel_available_amount"), GagaMap.class));
+		result.set("cancel_available_amount", map.get("cancel_available_amount"));
 		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));
+		// result.set("selected_card_info", gson.fromJson(map.getString("selected_card_info"), GagaMap.class));
+		result.set("selected_card_info", map.get("selected_card_info"));
+		result.set("payment_action_details", map.get("payment_action_details"));*/
 
-		return result;
+		return pay;
 	}
+
 }

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

@@ -18,6 +18,7 @@ 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.KakaoPay;
 import com.style24.persistence.domain.Order;
 
 import lombok.extern.slf4j.Slf4j;
@@ -49,9 +50,8 @@ public class KakaoPayApi {
 	 * @author card007
 	 * @since 2021. 03. 03
 	 */
-	public GagaMap kakaoPaymentApi(MultiValueMap<String, String> params, String apiUrl) {
-		GagaMap map;
-
+	public KakaoPay kakaoPaymentApi(MultiValueMap<String, String> params, String apiUrl) {
+		KakaoPay pay;
 		try {
 			HttpHeaders headers = new HttpHeaders();
 			headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
@@ -67,13 +67,13 @@ public class KakaoPayApi {
 			log.info("responseEntity.getBody(): {} ", jsonResult);
 
 			Gson gson = new GsonBuilder().create();
-			map = gson.fromJson(jsonResult, GagaMap.class);
-			map.setInt("statusCode", responseEntity.getStatusCode().value());
+			pay = gson.fromJson(jsonResult, KakaoPay.class);
+			pay.setStatusCode(responseEntity.getStatusCode().value());
 
 		} catch (Exception e) {
 			throw new IllegalStateException(message.getMessage("FAIL_0004"));
 		}
 
-		return map;
+		return pay;
 	}
 }

+ 113 - 0
src/main/java/com/style24/persistence/domain/KakaoPay.java

@@ -0,0 +1,113 @@
+package com.style24.persistence.domain;
+
+import java.util.Collection;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 카카오페이 도메인
+ * 
+ * @author card007
+ * @since 2021. 03. 05
+ */
+@SuppressWarnings("serial")
+@Data
+public class KakaoPay extends TscBaseDomain {
+
+	private String aid;
+	private String tid;
+	private String cid;													// 
+	private String cidSecret;											// 가맹점 코드 인증키, 24자, 숫자+영문 소문자 조합
+	private String sid;
+	private String status;
+	private String partnerOrderId;
+	private String partnerUserId;
+	private String paymentMethodType;
+	private String itemName;
+	private String itemCode;
+	private int quantity;
+	private Amount amount;
+	private CanceledAmount canceledAmount;
+	private CancelAvailableAmount cancelAvailableAmount;
+	private String created_at;
+	private String approved_at;
+	private Collection<PaymentActionDetails> paymentActionDetails;
+	private int statusCode;
+	private String nextRedirectAppUrl;
+	private String nextRedirectMobileUrl;
+	private String nextRedirectPcUrl;
+	private String androidAppScheme;
+	private String iosAppScheme;
+	private String pgToken;
+	private String payload;
+	private int totalAmount;
+	private CardInfo cardInfo;
+	private String code;
+	private String msg;
+	private Extras extras;
+
+	@Data
+	public class Amount {
+		private int total;
+		private int taxFree;
+		private int vat;
+		private int point;
+		private int discount;
+	}
+
+	@Data
+	public class CanceledAmount {
+		private int total;
+		private int taxFree;
+		private int vat;
+		private int point;
+		private int discount;
+	}
+
+	@Data
+	public class CancelAvailableAmount {
+		private int total;
+		private int taxFree;
+		private int vat;
+		private int point;
+		private int discount;
+	}
+
+	@Data
+	public class PaymentActionDetails {
+		private String aid;
+		private String paymentActionType;
+		private String paymentMethodType;
+		private int amount;
+		private int pointAmount;
+		private int discountAmount;
+		private String approvedAt;
+	}
+	
+	@Data
+	public class CardInfo {
+		private String purchaseCorp;
+		private String purchaseCorpCode;
+		private String issuerCorp;
+		private String issuerCorpCode;
+		private String kakaopayPurchaseCorp;
+		private String kakaopayPurchaseCorpCode;
+		private String kakaopayIssuerCorp;
+		private String kakaopayIssuerCorpCode;
+		private String bin;
+		private String cardType;
+		private String installMonth;
+		private String approvedId;
+		private String cardMid;
+		private String interestFreeInstall;
+		private String cardItemCode;
+	}
+	
+	@Data
+	public class Extras {
+		private String methodResultCode;
+		private String methodResultMessage;
+	}
+}