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