|
|
@@ -1,5 +1,9 @@
|
|
|
package com.style24.core.biz.service;
|
|
|
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.core.env.Environment;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -9,6 +13,7 @@ import org.springframework.util.MultiValueMap;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
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.KakaoPay;
|
|
|
import com.style24.persistence.domain.Order;
|
|
|
@@ -32,9 +37,6 @@ public class TscKakaoPayService {
|
|
|
@Autowired
|
|
|
private TscMessageByLocale message;
|
|
|
|
|
|
- @Autowired
|
|
|
- private RestTemplate restTemplate;
|
|
|
-
|
|
|
@Autowired
|
|
|
private KakaoPayApi kakaoPayApi;
|
|
|
|
|
|
@@ -51,18 +53,21 @@ public class TscKakaoPayService {
|
|
|
// API 전송 URL 설정
|
|
|
String paymentReadyUrl = env.getProperty("kakao.paymentReadyUrl");
|
|
|
|
|
|
+ // Redirect URL 설정
|
|
|
+ String redirectUrl = "http://" + env.getProperty("domain.front") + env.getProperty("kakao.paymentRedirectUrl");
|
|
|
+
|
|
|
// 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("quantity", order.getOrdGoodsQty()+"");
|
|
|
+ params.add("total_amount", order.getPayAmt()+"");
|
|
|
params.add("tax_free_amount", "0");
|
|
|
- params.add("approval_url", order.getApprovalUrl());
|
|
|
- params.add("fail_url", order.getFailUrl());
|
|
|
- params.add("cancel_url", order.getCancelUrl());
|
|
|
+ params.add("approval_url", redirectUrl);
|
|
|
+ params.add("fail_url", redirectUrl);
|
|
|
+ params.add("cancel_url", redirectUrl);
|
|
|
|
|
|
// 카카오페이 API 전송
|
|
|
return kakaoPayApi.kakaoPaymentApi(params, paymentReadyUrl);
|
|
|
@@ -77,23 +82,22 @@ public class TscKakaoPayService {
|
|
|
* @since 2021. 03. 04
|
|
|
*/
|
|
|
@Transactional("shopTxnManager")
|
|
|
- public Payment approveKakaoPayment(Order order) {
|
|
|
+ public Payment approveKakaoPayment(Payment payment) {
|
|
|
// 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());
|
|
|
+ params.add("tid", payment.getPgTid());
|
|
|
+ params.add("partner_order_id", payment.getPartnerOrderId());
|
|
|
+ params.add("partner_user_id", payment.getPartnerUserId());
|
|
|
+ params.add("pg_token", payment.getPgToken());
|
|
|
|
|
|
// 카카오페이 API 전송
|
|
|
KakaoPay kakaoPay = kakaoPayApi.kakaoPaymentApi(params, approvePaymentUrl);
|
|
|
|
|
|
// 카카오페이 API 전송 결과 처리
|
|
|
- Payment payment = new Payment();
|
|
|
int statusCode = kakaoPay.getStatusCode();
|
|
|
|
|
|
// 승인 성공일때 200
|
|
|
@@ -101,6 +105,8 @@ public class TscKakaoPayService {
|
|
|
payment.setPgTradeNo(kakaoPay.getAid());
|
|
|
payment.setPgTid(kakaoPay.getTid());
|
|
|
payment.setPgShopId(kakaoPay.getCid());
|
|
|
+ payment.setPayDt(convertDateFormat(kakaoPay.getApproved_at()));
|
|
|
+ payment.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());
|
|
|
payment.setOrdNo(Integer.parseInt(kakaoPay.getPartner_order_id()));
|
|
|
payment.setCustNo(Integer.parseInt(kakaoPay.getPartner_user_id()));
|
|
|
payment.setKakaoMethodType(kakaoPay.getPayment_method_type());
|
|
|
@@ -119,18 +125,33 @@ public class TscKakaoPayService {
|
|
|
payment.setResCd(String.valueOf(statusCode));
|
|
|
payment.setResMsg(message.getMessage("SUCC_0004"));
|
|
|
} else {
|
|
|
- int code = Integer.parseInt(kakaoPay.getCode());
|
|
|
- String msg = kakaoPay.getMsg();
|
|
|
- String resultCode = kakaoPay.getExtras().getMethod_result_code();
|
|
|
+ // int code = Integer.parseInt(kakaoPay.getCode());
|
|
|
+ // String msg = kakaoPay.getMsg();
|
|
|
+ // String resultCode = kakaoPay.getExtras().getMethod_result_code();
|
|
|
String resultMessage = kakaoPay.getExtras().getMethod_result_message();
|
|
|
|
|
|
- payment.setResCd(String.valueOf(code));
|
|
|
- payment.setResMsg(resultMessage);
|
|
|
+ throw new IllegalStateException(resultMessage);
|
|
|
+ // payment.setResCd(String.valueOf(code));
|
|
|
+ // payment.setResMsg(resultMessage);
|
|
|
}
|
|
|
|
|
|
return payment;
|
|
|
}
|
|
|
|
|
|
+ private String convertDateFormat(String date) {
|
|
|
+ String result = "";
|
|
|
+ try {
|
|
|
+ SimpleDateFormat parseSdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
|
|
+ Date parseDate = parseSdf.parse(date);
|
|
|
+ result = sdf.format(parseDate);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 카카오페이 주문 조회
|
|
|
*
|
|
|
@@ -140,14 +161,14 @@ public class TscKakaoPayService {
|
|
|
* @since 2021. 03. 04
|
|
|
*/
|
|
|
@Transactional("shopTxnManager")
|
|
|
- public KakaoPay getKakaoPaymentOrder(Order order) {
|
|
|
+ public KakaoPay getKakaoPaymentOrder(Payment payment) {
|
|
|
// 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());
|
|
|
+ params.add("tid", payment.getPgTid());
|
|
|
|
|
|
// 카카오페이 API 전송
|
|
|
KakaoPay pay = kakaoPayApi.kakaoPaymentApi(params, paymentOrderUrl);
|
|
|
@@ -164,29 +185,21 @@ public class TscKakaoPayService {
|
|
|
* @since 2021. 03. 05
|
|
|
*/
|
|
|
@Transactional("shopTxnManager")
|
|
|
- public Payment cancelKakaoPayment(Order order) {
|
|
|
+ public Payment cancelKakaoPayment(Payment payment) {
|
|
|
// 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("tid", payment.getPgTid());
|
|
|
+ params.add("cancel_amount", String.valueOf(payment.getPayAmt()));
|
|
|
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 kakaoPay = kakaoPayApi.kakaoPaymentApi(params, cancelPaymentUrl);
|
|
|
|
|
|
// 카카오페이 API 전송 결과 처리
|
|
|
- Payment payment = new Payment();
|
|
|
int statusCode = kakaoPay.getStatusCode();
|
|
|
|
|
|
// 승인 성공일때 200
|
|
|
@@ -202,16 +215,39 @@ public class TscKakaoPayService {
|
|
|
payment.setResCd(String.valueOf(statusCode));
|
|
|
payment.setResMsg(message.getMessage("SUCC_0004"));
|
|
|
} else {
|
|
|
- int code = Integer.parseInt(kakaoPay.getCode());
|
|
|
- String msg = kakaoPay.getMsg();
|
|
|
- String resultCode = kakaoPay.getExtras().getMethod_result_code();
|
|
|
+ // int code = Integer.parseInt(kakaoPay.getCode());
|
|
|
+ // String msg = kakaoPay.getMsg();
|
|
|
+ // String resultCode = kakaoPay.getExtras().getMethod_result_code();
|
|
|
String resultMessage = kakaoPay.getExtras().getMethod_result_message();
|
|
|
|
|
|
- payment.setResCd(String.valueOf(code));
|
|
|
- payment.setResMsg(resultMessage);
|
|
|
+ throw new IllegalStateException(resultMessage);
|
|
|
+ // payment.setResCd(String.valueOf(code));
|
|
|
+ // payment.setResMsg(resultMessage);
|
|
|
}
|
|
|
|
|
|
return payment;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 카카오페이 결제 데이터 생성
|
|
|
+ *
|
|
|
+ * @param KakaoPay, Order
|
|
|
+ * @return Payment
|
|
|
+ * @author card007
|
|
|
+ * @since 2021. 03. 09
|
|
|
+ */
|
|
|
+ public Payment setKakaoOrderData(KakaoPay kakaoPay, Order order) {
|
|
|
+ Payment payment = new Payment();
|
|
|
+ payment.setPgTid(kakaoPay.getTid());
|
|
|
+ payment.setPartnerOrderId(String.valueOf(order.getOrdNo()));
|
|
|
+ payment.setPartnerUserId(String.valueOf(order.getCustNo()));
|
|
|
+ payment.setNextRedirectAppUrl(kakaoPay.getNext_redirect_app_url());
|
|
|
+ payment.setNextRedirectMobileUrl(kakaoPay.getNext_redirect_mobile_url());
|
|
|
+ payment.setNextRedirectPcUrl(kakaoPay.getNext_redirect_pc_url());
|
|
|
+ payment.setAndroidAppScheme(kakaoPay.getAndroid_app_scheme());
|
|
|
+ payment.setIosAppScheme(kakaoPay.getIos_app_scheme());
|
|
|
+
|
|
|
+ return payment;
|
|
|
+ }
|
|
|
+
|
|
|
}
|