Prechádzať zdrojové kódy

카카오페이 임시 커밋

card007 5 rokov pred
rodič
commit
f63765b28b

+ 122 - 88
src/main/java/com/style24/core/biz/service/TscKakaoPayService.java

@@ -16,10 +16,14 @@ 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;
@@ -40,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;
 
 	/**
 	 * 카카오페이 결제준비 처리
@@ -54,44 +62,24 @@ 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", order.getApprovalUrl());
-			params.add("fail_url", order.getFailUrl());
-			params.add("cancel_url", order.getCancelUrl());
-
-			// 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());
-		}
-		
-		return map;
+
+		// 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);
 	}
 
 	/**
@@ -104,60 +92,106 @@ public class TscKakaoPayService {
 	 */
 	@Transactional("shopTxnManager")
 	public Payment approveKakaoPayment(Order order) {
-		GagaMap map = new GagaMap();
+		// API 전송 URL 설정
 		String approvePaymentUrl = env.getProperty("kakao.approvePaymentUrl");
-		try {
-			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());
-
-			// 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(approvePaymentUrl);
-
-			// 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("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();
-		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 = (GagaMap) map.get("amount");
-		payment.setPayAmt(Integer.parseInt(amount.getString("total")));
-		payment.setKakaoPoint(Integer.parseInt(amount.getString("point")));
-		payment.setKakaoDiscount(Integer.parseInt(amount.getString("discount")));
-
-		if ("CARD".equals(map.getString("payment_method_type"))) {
-			GagaMap cardInfo = (GagaMap) map.get("card_info");
-			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"));
+		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 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;
+	}
 }

+ 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;
+	}
+}