|
@@ -1,5 +1,9 @@
|
|
|
package com.style24.core.biz.service;
|
|
package com.style24.core.biz.service;
|
|
|
|
|
|
|
|
|
|
+import java.util.Arrays;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.core.env.Environment;
|
|
import org.springframework.core.env.Environment;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
@@ -42,14 +46,14 @@ public class TscNaverPayService {
|
|
|
* 네이버페이 결제준비 처리
|
|
* 네이버페이 결제준비 처리
|
|
|
*
|
|
*
|
|
|
* @param Order
|
|
* @param Order
|
|
|
- * @return KakaoPay
|
|
|
|
|
|
|
+ * @return NaverPay
|
|
|
* @author card007
|
|
* @author card007
|
|
|
- * @since 2021. 03. 03
|
|
|
|
|
|
|
+ * @since 2021. 03. 07
|
|
|
*/
|
|
*/
|
|
|
@Transactional("shopTxnManager")
|
|
@Transactional("shopTxnManager")
|
|
|
public NaverPay naverPaymentReady(Order order) {
|
|
public NaverPay naverPaymentReady(Order order) {
|
|
|
// API 전송 URL 설정
|
|
// API 전송 URL 설정
|
|
|
- String paymentReadyUrl = "https://dev.apis.naver.com/np_ktptw906068/naverpay/payments/v2/reserve";
|
|
|
|
|
|
|
+ String paymentReadyUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.paymentReadyUrl");
|
|
|
|
|
|
|
|
// API 파라메터 설정
|
|
// API 파라메터 설정
|
|
|
NaverPay naverPay = new NaverPay();
|
|
NaverPay naverPay = new NaverPay();
|
|
@@ -63,8 +67,170 @@ public class TscNaverPayService {
|
|
|
naverPay.setTaxExScopeAmount(0);
|
|
naverPay.setTaxExScopeAmount(0);
|
|
|
naverPay.setReturnUrl(order.getReturnUrl());
|
|
naverPay.setReturnUrl(order.getReturnUrl());
|
|
|
|
|
|
|
|
|
|
+ // 네이버페이 API 전송
|
|
|
|
|
+ return naverPayApi.naverPaymentJsonApi(naverPay, paymentReadyUrl);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 네이버페이 결제승인 처리
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return NaverPay
|
|
|
|
|
+ * @author card007
|
|
|
|
|
+ * @since 2021. 03. 08
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
|
|
+ public Payment approveNaverPayment(Order order) {
|
|
|
|
|
+ // API 전송 URL 설정
|
|
|
|
|
+ String paymentReadyUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.approvePaymentUrl");
|
|
|
|
|
+
|
|
|
|
|
+ // API 파라메터 설정
|
|
|
|
|
+ MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
|
|
|
|
|
+ params.add("paymentId", order.getPaymentId());
|
|
|
|
|
+
|
|
|
|
|
+ // 네이버페이 API 전송
|
|
|
|
|
+ NaverPay naverPay = naverPayApi.naverPaymentApi(params, paymentReadyUrl);
|
|
|
|
|
+
|
|
|
|
|
+ // 카카오페이 API 전송 결과 처리
|
|
|
|
|
+ Payment payment = new Payment();
|
|
|
|
|
+ int statusCode = naverPay.getStatusCode();
|
|
|
|
|
+
|
|
|
|
|
+ // 승인 성공일때 200
|
|
|
|
|
+ if (statusCode == 200) {
|
|
|
|
|
+ payment.setPgTradeNo(naverPay.getBody().getPayHistId());
|
|
|
|
|
+ payment.setPgTid(naverPay.getBody().getDetail().getPaymentId());
|
|
|
|
|
+ payment.setPgShopId(naverPay.getBody().getDetail().getMerchantId());
|
|
|
|
|
+ payment.setOrdNo(Integer.parseInt(naverPay.getBody().getDetail().getMerchantPayKey()));
|
|
|
|
|
+ payment.setCustNo(Integer.parseInt(naverPay.getBody().getDetail().getMerchantUserKey()));
|
|
|
|
|
+ payment.setNaverMethodType(naverPay.getBody().getDetail().getPrimaryPayMeans());
|
|
|
|
|
+ payment.setPayAmt(naverPay.getBody().getDetail().getTotalPayAmount());
|
|
|
|
|
+ payment.setNpayPntAmt(naverPay.getBody().getDetail().getNpointPayAmount());
|
|
|
|
|
+
|
|
|
|
|
+ // 네이버페이 카드결제 시 카드정보 설정
|
|
|
|
|
+ if ("CARD".equals(naverPay.getBody().getDetail().getPrimaryPayMeans())) {
|
|
|
|
|
+ payment.setCardNm(getCardNm(naverPay.getBody().getDetail().getCardCorpCode()));
|
|
|
|
|
+ payment.setCardMips(String.valueOf(naverPay.getBody().getDetail().getCardInstCount()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ payment.setResCd(naverPay.getCode());
|
|
|
|
|
+ payment.setResMsg(naverPay.getMessage());
|
|
|
|
|
+
|
|
|
|
|
+ return payment;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private String getCardNm(String cardCode) {
|
|
|
|
|
+ String result = "";
|
|
|
|
|
+ String[] codeArr = {"C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CA", "CB", "CC", "CD", "CF", "CH"};
|
|
|
|
|
+ String[] codeNmArr = {"신한", "비씨", "광주", "KB국민", "NH", "롯데", "산업", "삼성", "수협", "씨티", "외환", "우리", "전북", "제주", "하나-외환", "현대"};
|
|
|
|
|
+
|
|
|
|
|
+ List<String> list = Arrays.asList(codeArr);
|
|
|
|
|
+
|
|
|
|
|
+ int index = list.indexOf(cardCode);
|
|
|
|
|
+
|
|
|
|
|
+ if (index >= 0) {
|
|
|
|
|
+ result = codeNmArr[list.indexOf(cardCode)];
|
|
|
|
|
+ } else {
|
|
|
|
|
+ result = cardCode;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 네이버페이 주문 조회
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return NaverPay
|
|
|
|
|
+ * @author card007
|
|
|
|
|
+ * @since 2021. 03. 08
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
|
|
+ public NaverPay getNaverPaymentOrder(Order order) {
|
|
|
|
|
+ // API 전송 URL 설정
|
|
|
|
|
+ String paymentOrderUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.paymentOrderUrl");
|
|
|
|
|
+
|
|
|
|
|
+ // API 파라메터 설정
|
|
|
|
|
+ NaverPay naverPay = new NaverPay();
|
|
|
|
|
+ naverPay.setPaymentId(order.getPaymentId());
|
|
|
|
|
+
|
|
|
|
|
+ // 기간별 주문 조회 (31일 이내)
|
|
|
|
|
+ // naverPay.setStartTime(order.getStartTime());
|
|
|
|
|
+ // naverPay.setEndTime(order.getEndTime());
|
|
|
|
|
+ // naverPay.setApprovalType(order.getApprovalType());
|
|
|
|
|
+ // naverPay.setPageNumber(order.getPageNo());
|
|
|
|
|
+ // naverPay.setRowsPerPage(order.getPageSize());
|
|
|
|
|
+
|
|
|
// 카카오페이 API 전송
|
|
// 카카오페이 API 전송
|
|
|
- return naverPayApi.naverPaymentApi(naverPay, paymentReadyUrl);
|
|
|
|
|
|
|
+ return naverPayApi.naverPaymentJsonApi(naverPay, paymentOrderUrl);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 네이버페이 결제 취소
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param Order
|
|
|
|
|
+ * @return Payment
|
|
|
|
|
+ * @author card007
|
|
|
|
|
+ * @since 2021. 03. 08
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
|
|
+ public Payment cancelNaverPayment(Order order) {
|
|
|
|
|
+ // API 전송 URL 설정
|
|
|
|
|
+ String cancelPaymentUrl = env.getProperty("naverPay.apiUrl") + env.getProperty("naverPay.partnerId") + env.getProperty("naverPay.cancelPaymentUrl");
|
|
|
|
|
+
|
|
|
|
|
+ // API 파라메터 설정
|
|
|
|
|
+ MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
|
|
|
|
|
+ params.add("paymentId", order.getPaymentId());
|
|
|
|
|
+ params.add("cancelReason", order.getChgReasonNm());
|
|
|
|
|
+
|
|
|
|
|
+ // 전체 취소의 경우 네이버페이에 취소가능금액으로 취소금액 설정
|
|
|
|
|
+ if ("Y".equals(order.getAllCanYn())) {
|
|
|
|
|
+ NaverPay orderInfo = getNaverPaymentOrder(order);
|
|
|
|
|
+
|
|
|
|
|
+ int cancelAmount = 0;
|
|
|
|
|
+ for (int i = 0; i < orderInfo.getBody().getList().size(); i++) {
|
|
|
|
|
+ int amt = 0;
|
|
|
|
|
+
|
|
|
|
|
+ if ("01".equals(orderInfo.getBody().getList().get(i).getAdmissionTypeCode())) {
|
|
|
|
|
+ amt = orderInfo.getBody().getList().get(i).getTotalPayAmount();
|
|
|
|
|
+ } else if ("04".equals(orderInfo.getBody().getList().get(i).getAdmissionTypeCode())) {
|
|
|
|
|
+ amt = orderInfo.getBody().getList().get(i).getTotalPayAmount() * -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ cancelAmount += amt;
|
|
|
|
|
+ }
|
|
|
|
|
+ params.add("cancelAmount", String.valueOf(cancelAmount));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ params.add("cancelAmount", String.valueOf(order.getCnclRtnAmt()));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 취소 요청자 설정
|
|
|
|
|
+ String cancelRequester = "2";
|
|
|
|
|
+ if (StringUtils.isNotBlank(order.getCancelRequester())) {
|
|
|
|
|
+ cancelRequester = order.getCancelRequester();
|
|
|
|
|
+ }
|
|
|
|
|
+ params.add("cancelRequester", cancelRequester);
|
|
|
|
|
+
|
|
|
|
|
+ // 카카오페이 API 전송
|
|
|
|
|
+ NaverPay naverPay = naverPayApi.naverPaymentApi(params, cancelPaymentUrl);
|
|
|
|
|
+
|
|
|
|
|
+ // 카카오페이 API 전송 결과 처리
|
|
|
|
|
+ Payment payment = new Payment();
|
|
|
|
|
+ int statusCode = naverPay.getStatusCode();
|
|
|
|
|
+
|
|
|
|
|
+ // 승인 성공일때 200
|
|
|
|
|
+ if (statusCode == 200) {
|
|
|
|
|
+ payment.setPgTradeNo(naverPay.getBody().getPayHistId());
|
|
|
|
|
+ payment.setPgTid(naverPay.getBody().getPaymentId());
|
|
|
|
|
+ payment.setOrdNo(order.getOrdNo());
|
|
|
|
|
+ payment.setCustNo(order.getCustNo());
|
|
|
|
|
+ payment.setNaverMethodType(naverPay.getBody().getPrimaryPayMeans());
|
|
|
|
|
+ payment.setPayAmt(naverPay.getBody().getPrimaryPayCancelAmount() + naverPay.getBody().getNpointCancelAmount());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ payment.setResCd(naverPay.getCode());
|
|
|
|
|
+ payment.setResMsg(naverPay.getMessage());
|
|
|
|
|
+
|
|
|
|
|
+ return payment;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|