Forráskód Böngészése

카카오페이 임시 커밋

card007 5 éve
szülő
commit
cdc9c69e11

+ 44 - 63
src/main/java/com/style24/core/biz/service/TscKakaoPayService.java

@@ -1,42 +1,18 @@
 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;
 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.Service;
 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.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;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -96,7 +72,7 @@ public class TscKakaoPayService {
 	 * 카카오페이 승인 처리
 	 *
 	 * @param Order
-	 * @return GagaMap
+	 * @return Payment
 	 * @author card007
 	 * @since 2021. 03. 04
 	 */
@@ -118,7 +94,6 @@ public class TscKakaoPayService {
 
 		// 카카오페이 API 전송 결과 처리
 		Payment payment = new Payment();
-		Gson gson = new GsonBuilder().create();
 		int statusCode = kakaoPay.getStatusCode();
 
 		// 승인 성공일때 200
@@ -126,19 +101,19 @@ public class TscKakaoPayService {
 			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.setOrdNo(Integer.parseInt(kakaoPay.getPartner_order_id()));
+			payment.setCustNo(Integer.parseInt(kakaoPay.getPartner_user_id()));
+			payment.setKakaoMethodType(kakaoPay.getPayment_method_type());
 			payment.setPayAmt(kakaoPay.getAmount().getTotal());
 			payment.setKakaoPoint(kakaoPay.getAmount().getPoint());
 			payment.setKakaoDiscount(kakaoPay.getAmount().getDiscount());
 
 			// 카카오페이 카드결제 시 카드정보 설정
-			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());
+			if ("CARD".equals(kakaoPay.getPayment_method_type())) {
+				payment.setCardKind(kakaoPay.getCard_info().getPurchase_corp());
+				payment.setCardNm(kakaoPay.getCard_info().getIssuer_corp());
+				payment.setCardType("신용".equals(kakaoPay.getCard_info().getCard_type()) ? "N" : "Y");
+				payment.setCardMips(kakaoPay.getCard_info().getInstall_month());
 			}
 			
 			payment.setResCd(String.valueOf(statusCode));
@@ -146,8 +121,8 @@ public class TscKakaoPayService {
 		} else {
 			int code = Integer.parseInt(kakaoPay.getCode());
 			String msg = kakaoPay.getMsg();
-			String resultCode = kakaoPay.getExtras().getMethodResultCode();
-			String resultMessage = kakaoPay.getExtras().getMethodResultMessage();
+			String resultCode = kakaoPay.getExtras().getMethod_result_code();
+			String resultMessage = kakaoPay.getExtras().getMethod_result_message();
 
 			payment.setResCd(String.valueOf(code));
 			payment.setResMsg(resultMessage);
@@ -160,7 +135,7 @@ public class TscKakaoPayService {
 	 * 카카오페이 주문 조회
 	 *
 	 * @param Order
-	 * @return GagaMap
+	 * @return KakaoPay
 	 * @author card007
 	 * @since 2021. 03. 04
 	 */
@@ -177,32 +152,38 @@ public class TscKakaoPayService {
 		// 카카오페이 API 전송
 		KakaoPay pay = 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("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("selected_card_info", map.get("selected_card_info"));
-		result.set("payment_action_details", map.get("payment_action_details"));*/
+		return pay;
+	}
+
+	/**
+	 * 카카오페이 결제 취소
+	 *
+	 * @param Order
+	 * @return KakaoPay
+	 * @author card007
+	 * @since 2021. 03. 05
+	 */
+	@Transactional("shopTxnManager")
+	public KakaoPay cancelKakaoPayment(Order order) {
+		// API 전송 URL 설정
+		String cancelPaymentUrl = env.getProperty("kakao.cancelPaymentUrl");
+
+		// API 파라메터 설정
+		MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
+		params.add("cid", env.getProperty("kakao.cid"));
+		params.add("tid", order.getPgTid());
+		params.add("cancel_tax_free_amount", "0");
+
+		// 전체 취소의 경우 카카오페이에 취소가능금액으로 취소금액 설정
+		if ("Y".equals(order.getAllCanYn())) {
+			KakaoPay orderInfo = getKakaoPaymentOrder(order);
+			params.add("cancel_amount", String.valueOf(orderInfo.getCancel_available_amount().getTotal()));
+		} else {
+			params.add("cancel_amount", String.valueOf(order.getCnclRtnAmt()));
+		}
+
+		// 카카오페이 API 전송
+		KakaoPay pay = kakaoPayApi.kakaoPaymentApi(params, cancelPaymentUrl);
 
 		return pay;
 	}

+ 75 - 66
src/main/java/com/style24/persistence/domain/KakaoPay.java

@@ -16,98 +16,107 @@ import lombok.Data;
 @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 String aid;													// 요청 고유 번호
+	private String tid;													// 결제 고유 번호, 20자
+	private String cid;													// 가맹점 코드, 10자
+	private String cid_secret;											// 가맹점 코드 인증키, 24자, 숫자+영문 소문자 조합
+	private String sid;													// 정기결제용 ID, 정기결제 CID로 단건결제 요청 시 발급
+	private String status;												// 결제 상태
+	private String partner_order_id;									// 가맹점 주문번호, 최대 100자
+	private String partner_user_id;										// 가맹점 회원 id, 최대 100자
+	private String payment_method_type;									// 결제 수단, CARD 또는 MONEY 중 하나
+	private String item_name;											// 상품명, 최대 100자
+	private String item_code;											// 상품코드, 최대 100자
+	private int quantity;												// 상품 수량
+	private Amount amount;												// 결제 금액 정보
+	private CanceledAmount canceled_amount;								// 취소된 금액
+	private CancelAvailableAmount cancel_available_amount;				// 취소 가능 금액
+	private String created_at;											// 결제 준비 요청 시간
+	private String approved_at;											// 결제 승인 시각
+	private SelectedCardInfo selected_card_info;						// 결제 카드 정보
+	private Collection<PaymentActionDetails> payment_action_details;	// 결제/취소 상세
 	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 next_redirect_app_url;								// 카카오톡 결제 페이지 Redirect URL (모바일 앱)
+	private String next_redirect_mobile_url;							// 카카오톡 결제 페이지 Redirect URL (모바일 웹)
+	private String next_redirect_pc_url;								// 카카오톡 결제 페이지 Redirect URL (PC 웹)
+	private String android_app_scheme;									// 카카오페이 결제 화면으로 이동하는 Android 앱 스킴(Scheme)
+	private String ios_app_scheme;										// 카카오페이 결제 화면으로 이동하는 iOS 앱 스킴
+	private String payload;												// 결제 승인 요청에 대해 저장한 값, 요청 시 전달된 내용
+	private int total_amount;											// 상품 총액
+	private CardInfo card_info;											// 결제 상세 정보, 결제수단이 카드일 경우만 포함
 	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;
+		private int total;												// 전체 결제 금액
+		private int tax_free;											// 비과세 금액
+		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;
+		private int total;												// 전체 취소 금액
+		private int tax_free;											// 취소된 비과세 금액
+		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;
+		private int total;												// 전체 취소 가능 금액
+		private int tax_free;											// 취소 가능한 비과세 금액
+		private int vat;												// 취소 가능한 부가세 금액
+		private int point;												// 취소 가능한 포인트 금액
+		private int discount;											// 취소 가능한 할인 금액
+	}
+	
+	@Data
+	public class SelectedCardInfo {
+		private String card_bin;										// 카드 BIN
+		private int install_month;										// 할부 개월 수
+		private String card_corp_name;									// 카드사 정보
+		private String interest_free_install;							// 무이자할부 여부(Y/N)
 	}
 
 	@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;
+		private String aid;												// Request 고유 번호
+		private String payment_action_type;								// 결제 타입 PAYMENT(결제), CANCEL(결제취소), ISSUED_SID(SID 발급) 중 하나
+		private String payment_method_type;								// 결제 수단, CARD 또는 MONEY 중 하나
+		private int amount;												// 결제/취소 총액
+		private int point_amount;										// 결제/취소 포인트 금액
+		private int discount_amount;									// 할인 금액
+		private String approved_at;										// 거래시간
+		private String payLoad;											// Request로 전달한 값
 	}
 	
 	@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;
+		private String purchase_corp;									// 매입 카드사 한글명
+		private String purchase_corp_code;								// 매입 카드사 코드
+		private String issuer_corp;										// 카드 발급사 한글명
+		private String issuer_corp_code;								// 카드 발급사 코드
+		private String kakaopay_purchase_corp;							// 카카오페이 매입사명
+		private String kakaopay_purchase_corp_code;						// 카카오페이 매입사 코드
+		private String kakaopay_issuer_corp;							// 카카오페이 발급사명
+		private String kakaopay_issuer_corp_code;						// 카카오페이 발급사 코드
+		private String bin;												// 카드 BIN
+		private String card_type;										// 카드 타입
+		private String install_month;									// 할부 개월 수
+		private String approved_id;										// 카드사 승인번호
+		private String card_mid;										// 카드사 가맹점 번호
+		private String interest_free_install;							// 무이자할부 여부(Y/N)
+		private String card_item_code;									// 카드 상품 코드
 	}
 	
 	@Data
 	public class Extras {
-		private String methodResultCode;
-		private String methodResultMessage;
+		private String method_result_code;								// 실패 코드
+		private String method_result_message;							// 실패 메세지
 	}
 }