Bladeren bron

이태영 - 20210616 네이버페이 주문형 개발 중

xodud lee 4 jaren geleden
bovenliggende
commit
023a1f68b5

+ 369 - 53
src/main/java/com/style24/core/biz/service/TscNaverPayService.java

@@ -9,8 +9,7 @@ import java.util.*;
 import com.nhncorp.psinfra.toolkit.SimpleCryptLib;
 import com.style24.core.biz.checkout.MallServiceLocator;
 import com.style24.core.biz.checkout.MallServiceSOAP11BindingStub;
-import com.style24.core.biz.checkout.base.AccessCredentialsType;
-import com.style24.core.biz.checkout.base.DeliveryMethodType;
+import com.style24.core.biz.checkout.base.*;
 import com.style24.core.biz.checkout.mall.*;
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.persistence.domain.OrderChange;
@@ -317,7 +316,7 @@ public class TscNaverPayService {
 			for(Order order : confirmList) {
 				//서명생성
 				generateSignature("ApproveCancelApplication", env.getProperty("naverPay.secret.key"));
-				log.debug("ApproveCancelApplication(취소요청승인 데이타 송신) :: timeStamp === " + timeStamp);
+				log.info("ApproveCancelApplication(취소요청승인 데이타 송신) :: timeStamp === " + timeStamp);
 
 				//인증정보
 				accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
@@ -343,12 +342,12 @@ public class TscNaverPayService {
 					log.info("취소승인 성공 주문번호 ===> " + param.getOrdNo());
 					log.info("취소승인 성공 네이버상품주문번호 ===> " + order.getNpayOrdDtlNo());
 				} else {
-					log.debug("취소승인 에러");
-					log.debug("주문번호 ===> " + param.getOrdNo());
-					log.debug("네이버주문번호 ===> " + order.getNpayOrdDtlNo());
-					log.debug("Code : " + approveCancelApplicationResponse.getError().getCode());
-					log.debug("Message : " + approveCancelApplicationResponse.getError().getMessage());
-					log.debug("Detail : " + approveCancelApplicationResponse.getError().getDetail());
+					log.info("취소승인 에러");
+					log.info("주문번호 ===> " + param.getOrdNo());
+					log.info("네이버주문번호 ===> " + order.getNpayOrdDtlNo());
+					log.info("Code : " + approveCancelApplicationResponse.getError().getCode());
+					log.info("Message : " + approveCancelApplicationResponse.getError().getMessage());
+					log.info("Detail : " + approveCancelApplicationResponse.getError().getDetail());
 
 					Order fail = new Order();
 					fail.setErrorReason("취소 완료 주문 정보 송부 에러");
@@ -469,6 +468,87 @@ public class TscNaverPayService {
 		}
 	}
 
+	/**
+	 * 네이버페이 교환 반려 정보 송부
+	 * @param chnge
+	 * @param userNo
+	 * @author xodud1202
+	 * @since  2021. 06. 27
+	 */
+	public void sendNaverPayRejectExchange(OrderChange param, int userNo) throws Exception {
+		Collection<OrderChange> rejectList = orderChangeDao.approveCancelRequestInfo(param);
+
+		Security.addProvider(new BouncyCastleProvider());
+		AccessCredentialsType accessCredentialsType = new AccessCredentialsType();
+		MallServiceLocator MSL = new MallServiceLocator(env.getProperty("naverPay.port.address"));
+		MallServiceSOAP11BindingStub stub = new MallServiceSOAP11BindingStub();
+
+		stub = (MallServiceSOAP11BindingStub) MSL.getMallServiceSOAP11Port();
+
+		RejectExchangeRequest rejectExchgneRequest 	= null;
+		RejectExchangeResponse rejectExchgneResponse 	= null;
+
+		for (OrderChange change : rejectList) {
+			if(TscConstants.PgGb.NAVER_ORDER.value().equals(change.getPgGb())) {
+				// 서명생성
+				generateSignature("RejectExchange", env.getProperty("naverPay.secret.key"));
+				log.info("RejectExchange(교환반려 주문 네이버로 송신) :: timeStamp === " + timeStamp);
+
+				//인증정보
+				accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
+				accessCredentialsType.setSignature(signature);
+				accessCredentialsType.setTimestamp(timeStamp);
+
+				rejectExchgneRequest = new RejectExchangeRequest();
+				rejectExchgneRequest.setAccessCredentials(accessCredentialsType);
+				rejectExchgneRequest.setDetailLevel("Full");
+				rejectExchgneRequest.setVersion(env.getProperty("naverPay.version"));
+				rejectExchgneRequest.setRequestID("");
+				rejectExchgneRequest.setProductOrderID(change.getNpayOrdDtlNo());
+				rejectExchgneRequest.setRejectDetailContent("교환반려");
+
+				rejectExchgneResponse = stub.rejectExchange(rejectExchgneRequest);
+
+				String resultStr = "";
+				if (rejectExchgneResponse.getResponseType() != null) {
+					resultStr = rejectExchgneResponse.getResponseType().toUpperCase();
+				}
+
+				if ("SUCCESS".equals(resultStr)) {
+					log.info("교환반려 성공 주문번호===>"+change.getOrdNo());
+					log.info("교환반려 성공 네이버상품주문번호===>"+change.getNpayOrdDtlNo());
+				} else {
+					log.info("교환반려 에러");
+					log.info("주문번호 ===> " + change.getOrdNo());
+					log.info("네이버상품주문번호 ===> " + change.getNpayOrdDtlNo());
+					log.info("Code : " + rejectExchgneResponse.getError().getCode());
+					log.info("Message : " + rejectExchgneResponse.getError().getMessage());
+					log.info("Detail : " + rejectExchgneResponse.getError().getDetail());
+
+					try {
+						Order fail = new Order();
+						fail.setErrorReason("교환 반려 데이터 송부 에러");
+						fail.setOrdNo(change.getOrdNo());
+						fail.setNpayOrdDtlNo(change.getNpayOrdDtlNo());
+						fail.setOptCd("sendNaverPayRejectExchange");
+						fail.setResultCd(rejectExchgneResponse.getError().getCode());
+						fail.setResultMsg(rejectExchgneResponse.getError().getMessage());
+						fail.setMallCd(env.getProperty("naverPay.shop.id"));
+						fail.setAccessLicense(env.getProperty("naverPay.access.license"));
+						fail.setSecretKey(env.getProperty("naverPay.secret.key"));
+						fail.setRegNo(userNo);
+
+						orderDao.createNaverPayErrorLog(fail);
+					} catch(Exception e) {
+						e.printStackTrace();
+					}
+
+					throw new IllegalStateException("실패");
+				}
+			}
+		}
+	}
+
 	/**
 	 * 네이버페이 반품 반려 정보 송부
 	 * @param chnge
@@ -490,60 +570,234 @@ public class TscNaverPayService {
 		RejectReturnResponse rejectReturnResponse 	= null;
 
 		for (OrderChange change : rejectList) {
-			// 서명생성
-			generateSignature("RejectReturn", env.getProperty("naverPay.secret.key"));
-			log.debug("RejectReturn(취소반려 주문 네이버로 송신) :: timeStamp === " + timeStamp);
+			if(TscConstants.PgGb.NAVER_ORDER.value().equals(change.getPgGb())) {
+				// 서명생성
+				generateSignature("RejectReturn", env.getProperty("naverPay.secret.key"));
+				log.info("RejectReturn(반품반려 주문 네이버로 송신) :: timeStamp === " + timeStamp);
 
-			//인증정보
-			accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
-			accessCredentialsType.setSignature(signature);
-			accessCredentialsType.setTimestamp(timeStamp);
+				//인증정보
+				accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
+				accessCredentialsType.setSignature(signature);
+				accessCredentialsType.setTimestamp(timeStamp);
+
+				rejectReturnRequest = new RejectReturnRequest();
+				rejectReturnRequest.setAccessCredentials(accessCredentialsType);
+				rejectReturnRequest.setDetailLevel("Full");
+				rejectReturnRequest.setVersion(env.getProperty("naverPay.version"));
+				rejectReturnRequest.setRequestID("");
+				rejectReturnRequest.setProductOrderID(change.getNpayOrdDtlNo());
+				rejectReturnRequest.setRejectDetailContent("반품반려");
+
+				rejectReturnResponse = stub.rejectReturn(rejectReturnRequest);
+
+				String resultStr = "";
+				if (rejectReturnResponse.getResponseType() != null) {
+					resultStr = rejectReturnResponse.getResponseType().toUpperCase();
+				}
+
+				if ("SUCCESS".equals(resultStr)) {
+					log.info("반품반려 성공 주문번호===>"+change.getOrdNo());
+					log.info("반품반려 성공 네이버상품주문번호===>"+change.getNpayOrdDtlNo());
+				} else {
+					log.info("반품반려 에러");
+					log.info("주문번호 ===> " + change.getOrdNo());
+					log.info("네이버상품주문번호 ===> " + change.getNpayOrdDtlNo());
+					log.info("Code : " + rejectReturnResponse.getError().getCode());
+					log.info("Message : " + rejectReturnResponse.getError().getMessage());
+					log.info("Detail : " + rejectReturnResponse.getError().getDetail());
 
-			rejectReturnRequest = new RejectReturnRequest();
-			rejectReturnRequest.setAccessCredentials(accessCredentialsType);
-			rejectReturnRequest.setDetailLevel("Full");
-			rejectReturnRequest.setVersion(env.getProperty("naverPay.version"));
-			rejectReturnRequest.setRequestID("");
-			rejectReturnRequest.setProductOrderID(change.getNpayOrdDtlNo());
-			rejectReturnRequest.setRejectDetailContent("취소반려");
+					try {
+						Order fail = new Order();
+						fail.setErrorReason("반품 반려 데이터 송부 에러");
+						fail.setOrdNo(change.getOrdNo());
+						fail.setNpayOrdDtlNo(change.getNpayOrdDtlNo());
+						fail.setOptCd("sendNaverPayRejectReturn");
+						fail.setResultCd(rejectReturnResponse.getError().getCode());
+						fail.setResultMsg(rejectReturnResponse.getError().getMessage());
+						fail.setMallCd(env.getProperty("naverPay.shop.id"));
+						fail.setAccessLicense(env.getProperty("naverPay.access.license"));
+						fail.setSecretKey(env.getProperty("naverPay.secret.key"));
+						fail.setRegNo(userNo);
+
+						orderDao.createNaverPayErrorLog(fail);
+					} catch(Exception e) {
+						e.printStackTrace();
+					}
 
-			rejectReturnResponse = stub.rejectReturn(rejectReturnRequest);
+					throw new IllegalStateException("실패");
+				}
+			}
+		}
+	}
 
+	/**
+	 * 네이버페이 반품 완료 정보 송부
+	 * @param chnge
+	 * @param userNo
+	 * @author xodud1202
+	 * @since  2021. 06. 27
+	 */
+	public void sendNaverPayReturnComplete(OrderChange param, int userNo) throws Exception {
+		Collection<OrderChange> successList = orderChangeDao.approveCancelRequestInfo(param);
+
+		Security.addProvider(new BouncyCastleProvider());
+		AccessCredentialsType accessCredentialsType = new AccessCredentialsType();
+		MallServiceLocator MSL = new MallServiceLocator(env.getProperty("naverPay.port.address"));
+		MallServiceSOAP11BindingStub stub = new MallServiceSOAP11BindingStub();
+
+		stub = (MallServiceSOAP11BindingStub) MSL.getMallServiceSOAP11Port();
+
+		ApproveReturnApplicationRequest returnCompleteRequest		= null;
+		ApproveReturnApplicationResponse returnCompleteResponse		= null;
+
+		ReleaseReturnHoldRequest releaseReturnHoldRequest			= null;
+		ReleaseReturnHoldResponse releaseReturnHoldResponse			= null;
+
+		// 반품배송비 결제방법 보류해제 예외 방법
+		String passRfdDelPayType = "환불금에서 차감";
+
+		// 반품승인 하기 전 반품배송비결제방법을 확인하여
+		// 보류가 걸려있으면 보류를 해제한다. (환불금에서차감 제외)
+		for(OrderChange change : successList) {
 			String resultStr = "";
-			if (rejectReturnResponse.getResponseType() != null) {
-				resultStr = rejectReturnResponse.getResponseType().toUpperCase();
+			String[] productOrderIdList = new String[] {change.getNpayOrdDtlNo()};
+
+			// 상품주문상태 조회
+			ProductOrderInfo[] productOrderInfo = productOrderInfoList(productOrderIdList);
+
+			if(productOrderInfo != null && productOrderInfo.length > 0) {
+				ReturnInfo returnInfo = productOrderInfo[0].getReturnInfo();
+				String returnPayType = "";		// 반품배송비 결제방법
+
+				HoldbackStatusType returnHoldStatus = null;
+
+				if (returnInfo != null) {
+					if (returnInfo.getHoldbackStatus() != null) {
+						returnHoldStatus = returnInfo.getHoldbackStatus();				// 보류 상태 코드
+					}
+
+					// 반품배송비 오류 추가
+					if (returnInfo.getClaimDeliveryFeePayMethod() != null) {
+						returnPayType = returnInfo.getClaimDeliveryFeePayMethod();		// 반품배송비 결제방법
+					}
+				}
+
+				if( (returnPayType != null && !returnPayType.equals("")) && (returnHoldStatus.toString() != null && !returnHoldStatus.equals(""))) {
+					// 보류중이고 환불금 차감 형식이 아니면 보류해제 처리
+					if("HOLDBACK".equals(returnHoldStatus.toString()) && !passRfdDelPayType.equals(returnPayType)) {
+						//서명생성
+						generateSignature("ReleaseReturnHold", env.getProperty("naverPay.secret.key"));
+						log.info("ReleaseReturnHold(반품 보류해제 네이버로 송신) :: timeStamp === " + timeStamp);
+
+						//인증정보
+						accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
+						accessCredentialsType.setSignature(signature);
+						accessCredentialsType.setTimestamp(timeStamp);
+
+						releaseReturnHoldRequest = new ReleaseReturnHoldRequest();
+						releaseReturnHoldRequest.setAccessCredentials(accessCredentialsType);
+						releaseReturnHoldRequest.setRequestID("");
+						releaseReturnHoldRequest.setDetailLevel("Full");
+						releaseReturnHoldRequest.setVersion(env.getProperty("naverPay.version"));
+						releaseReturnHoldRequest.setProductOrderID(change.getNpayOrdDtlNo());
+
+						releaseReturnHoldResponse = stub.releaseReturnHold(releaseReturnHoldRequest);
+
+						if(releaseReturnHoldResponse.getResponseType() != null ) {
+							resultStr = releaseReturnHoldResponse.getResponseType().toUpperCase();
+						}
+
+						if ("SUCCESS".equals(resultStr)) {
+							log.info("보류해제 성공 네이버상품주문번호 ===> " + change.getNpayOrdDtlNo());
+							log.info("보류해제 성공 반품배송비결제방법 ===> " + returnPayType);
+						} else {
+							log.info("보류해제 에러");
+							log.info("네이버상품주문번호 ===> " + change.getNpayOrdDtlNo());
+							log.info("반품배송비 결제방법 >>>> " + returnPayType);
+							log.info("Code : " + releaseReturnHoldResponse.getError().getCode());
+							log.info("Message : " + releaseReturnHoldResponse.getError().getMessage());
+							log.info("Detail : " + releaseReturnHoldResponse.getError().getDetail());
+
+							try {
+								Order fail = new Order();
+								fail.setErrorReason("반품 보류 해제 데이터 송부 에러");
+								fail.setOrdNo(change.getOrdNo());
+								fail.setNpayOrdDtlNo(change.getNpayOrdDtlNo());
+								fail.setOptCd("sendNaverPayReturnComplete");
+								fail.setResultCd(releaseReturnHoldResponse.getError().getCode());
+								fail.setResultMsg(releaseReturnHoldResponse.getError().getMessage());
+								fail.setMallCd(env.getProperty("naverPay.shop.id"));
+								fail.setAccessLicense(env.getProperty("naverPay.access.license"));
+								fail.setSecretKey(env.getProperty("naverPay.secret.key"));
+								fail.setRegNo(userNo);
+
+								orderDao.createNaverPayErrorLog(fail);
+							} catch(Exception e) {
+								e.printStackTrace();
+							}
+						}
+					}
+				}
 			}
+		}
 
-			if ("SUCCESS".equals(resultStr)) {
-				log.debug("반품반려 성공 주문번호===>"+change.getOrdNo());
-				log.debug("반품반려 성공 네이버상품주문번호===>"+change.getNpayOrdDtlNo());
-			} else {
-				log.debug("반품반려 에러");
-				log.debug("주문번호 ===> " + change.getOrdNo());
-				log.debug("네이버상품주문번호 ===> " + change.getNpayOrdDtlNo());
-				log.debug("Code : " + rejectReturnResponse.getError().getCode());
-				log.debug("Message : " + rejectReturnResponse.getError().getMessage());
-				log.debug("Detail : " + rejectReturnResponse.getError().getDetail());
-
-				try {
-					Order fail = new Order();
-					fail.setErrorReason("반품 반려 데이터 송부 에러");
-					fail.setOrdNo(change.getOrdNo());
-					fail.setNpayOrdDtlNo(change.getNpayOrdDtlNo());
-					fail.setOptCd("sendNaverPayRejectReturn");
-					fail.setResultCd(rejectReturnResponse.getError().getCode());
-					fail.setResultMsg(rejectReturnResponse.getError().getMessage());
-					fail.setMallCd(env.getProperty("naverPay.shop.id"));
-					fail.setAccessLicense(env.getProperty("naverPay.access.license"));
-					fail.setSecretKey(env.getProperty("naverPay.secret.key"));
-					fail.setRegNo(userNo);
+		for (OrderChange change : successList) {
+			if(TscConstants.PgGb.NAVER_ORDER.value().equals(change.getPgGb())) {
+				// 서명생성
+				generateSignature("ApproveReturnApplication", env.getProperty("naverPay.secret.key"));
+				log.info("ApproveReturnApplication(반품완료 주문 네이버로 송신) :: timeStamp === " + timeStamp);
 
-					orderDao.createNaverPayErrorLog(fail);
-				} catch(Exception e) {
-					e.printStackTrace();
+				//인증정보
+				accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
+				accessCredentialsType.setSignature(signature);
+				accessCredentialsType.setTimestamp(timeStamp);
+
+				returnCompleteRequest = new ApproveReturnApplicationRequest();
+				returnCompleteRequest.setAccessCredentials(accessCredentialsType);
+				returnCompleteRequest.setDetailLevel("Full");
+				returnCompleteRequest.setVersion(env.getProperty("naverPay.version"));
+				returnCompleteRequest.setRequestID("");
+				returnCompleteRequest.setProductOrderID(change.getNpayOrdDtlNo());
+				// returnCompleteRequest.setEtcFeeDemandAmount(shipAmt); // (구) 네이버페이 API에서만 사용.
+
+				returnCompleteResponse = stub.approveReturnApplication(returnCompleteRequest);
+
+				String resultStr = "";
+				if (returnCompleteResponse.getResponseType() != null) {
+					resultStr = returnCompleteResponse.getResponseType().toUpperCase();
 				}
 
-				throw new IllegalStateException("실패");
+				if ("SUCCESS".equals(resultStr)) {
+					log.info("반품승인 성공 주문번호===>"+change.getOrdNo());
+					log.info("반품승인 성공 네이버상품주문번호===>"+change.getNpayOrdDtlNo());
+				} else {
+					log.info("반품반려 에러");
+					log.info("주문번호 ===> " + change.getOrdNo());
+					log.info("네이버상품주문번호 ===> " + change.getNpayOrdDtlNo());
+					log.info("Code : " + returnCompleteResponse.getError().getCode());
+					log.info("Message : " + returnCompleteResponse.getError().getMessage());
+					log.info("Detail : " + returnCompleteResponse.getError().getDetail());
+
+					try {
+						Order fail = new Order();
+						fail.setErrorReason("반품 완료 데이터 송부 에러");
+						fail.setOrdNo(change.getOrdNo());
+						fail.setNpayOrdDtlNo(change.getNpayOrdDtlNo());
+						fail.setOptCd("sendNaverPayReturnComplete");
+						fail.setResultCd(returnCompleteResponse.getError().getCode());
+						fail.setResultMsg(returnCompleteResponse.getError().getMessage());
+						fail.setMallCd(env.getProperty("naverPay.shop.id"));
+						fail.setAccessLicense(env.getProperty("naverPay.access.license"));
+						fail.setSecretKey(env.getProperty("naverPay.secret.key"));
+						fail.setRegNo(userNo);
+
+						orderDao.createNaverPayErrorLog(fail);
+					} catch(Exception e) {
+						e.printStackTrace();
+					}
+
+					throw new IllegalStateException("실패");
+				}
 			}
 		}
 	}
@@ -566,4 +820,66 @@ public class TscNaverPayService {
 			log.error(e.getMessage()); //서명정보 실패
 		}
 	}
+
+	/**
+	 * 주문상세 정보 조회
+	 * @param productOrderIdList
+	 * @return
+	 * @author xodud1202
+	 * @since  2021. 05. 28
+	 */
+	@Transactional("shopTxnManager")
+	public ProductOrderInfo[] productOrderInfoList(String[] productOrderIdList) {
+		ProductOrderInfo[] result =  null;
+		try {
+			if (productOrderIdList != null) {
+				Security.addProvider(new BouncyCastleProvider());
+				AccessCredentialsType accessCredentialsType = new AccessCredentialsType();
+				MallServiceLocator MSL = new MallServiceLocator(env.getProperty("naverPay.port.address"));
+				MallServiceSOAP11BindingStub stub = new MallServiceSOAP11BindingStub();
+				stub = (MallServiceSOAP11BindingStub) MSL.getMallServiceSOAP11Port();
+				GetProductOrderInfoListRequest request = new GetProductOrderInfoListRequest();
+				GetProductOrderInfoListResponse response = new GetProductOrderInfoListResponse();
+
+				//서명생성
+				generateSignature("GetProductOrderInfoList", env.getProperty("naverPay.secret.key"));
+				log.info("GetProductOrderInfoList(상품주문 내역 상세 조회) :: timeStamp === " + timeStamp);
+
+				//인증정보
+				accessCredentialsType.setAccessLicense(env.getProperty("naverPay.access.license"));
+				accessCredentialsType.setSignature(signature);
+				accessCredentialsType.setTimestamp(timeStamp);
+
+				request.setAccessCredentials(accessCredentialsType);
+				request.setDetailLevel("Full");
+				request.setVersion(env.getProperty("naverPay.version"));
+				request.setRequestID("");
+				request.setProductOrderIDList(productOrderIdList);
+
+				//GetChangedProductOrderList Response 수신
+				response = stub.getProductOrderInfoList(request);
+
+				String resultStr = "";
+				if (response.getResponseType() != null) {
+					resultStr = response.getResponseType().toUpperCase();
+				}
+
+				//결과 출력
+				if ("SUCCESS".equals(resultStr)) {
+					result = response.getProductOrderInfoList();
+				} else {
+					log.info("상품주문내역조회 에러");
+					log.info("Code    : " + response.getError().getCode());
+					log.info("Message : " + response.getError().getMessage());
+					log.info("Detail  : " + response.getError().getDetail());
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		log.info("***** productOrderInfoList end *****");
+
+		return result;
+	}
 }

+ 57 - 45
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -1112,62 +1112,74 @@ public class TscOrderChangeService {
 
 		// 2. 추가배송비 존재 시 PG취소 정보 설정
 		Payment pg = new Payment();
-		if (paymentList != null && paymentList.size() > 0) {
-			// 추가배송비 취소 처리
-			orderChangeDao.createAddDeliveryFeeCancel(orderChange);
-			
-			// 2-1. 추가배송비 결제정보 조회
-			pg.setOrdChgSq(ordChgSq);
-			pg = orderChangeDao.getAddPayCostPaymentInfo(pg);
+		try {
+			if (paymentList != null && paymentList.size() > 0) {
+				// 추가배송비 취소 처리
+				orderChangeDao.createAddDeliveryFeeCancel(orderChange);
 
-			// 2-2. 추가배송비 취소 정보 설정
-			if (pg != null && StringUtils.isNotBlank(pg.getPgTid())) {
-				pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-				pg.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
-				pg.setModType("STSC");
-				pg.setModDesc("가맹점 취소 - 전체 취소");
-				pg.setIpAddress(orderChange.getIpAddress());
-				pg.setRegNo(regNo);
-				pg.setUpdNo(updNo);
+				// 2-1. 추가배송비 결제정보 조회
+				pg.setOrdChgSq(ordChgSq);
+				pg = orderChangeDao.getAddPayCostPaymentInfo(pg);
+
+				// 2-2. 추가배송비 취소 정보 설정
+				if (pg != null && StringUtils.isNotBlank(pg.getPgTid())) {
+					pg.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+					pg.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
+					pg.setModType("STSC");
+					pg.setModDesc("가맹점 취소 - 전체 취소");
+					pg.setIpAddress(orderChange.getIpAddress());
+					pg.setRegNo(regNo);
+					pg.setUpdNo(updNo);
+				}
 			}
-		}
 
-		// 3. 교환철회 처리
-		Order exchangeCancel = new Order();
-		exchangeCancel.setOrdNo(ordNo);
-		exchangeCancel.setOrdChgSq(ordChgSq);
-		exchangeCancel.setOrdDtlStat(TscConstants.OrderDetailStat.EXCHANGE_CANCEL.value());
-		exchangeCancel.setChgStat(TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value());
-		exchangeCancel.setDelYn("Y");
-		exchangeCancel.setRegNo(regNo);
-		exchangeCancel.setUpdNo(updNo);
+			// 3. 교환철회 처리
+			Order exchangeCancel = new Order();
+			exchangeCancel.setOrdNo(ordNo);
+			exchangeCancel.setOrdChgSq(ordChgSq);
+			exchangeCancel.setOrdDtlStat(TscConstants.OrderDetailStat.EXCHANGE_CANCEL.value());
+			exchangeCancel.setChgStat(TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value());
+			exchangeCancel.setDelYn("Y");
+			exchangeCancel.setRegNo(regNo);
+			exchangeCancel.setUpdNo(updNo);
 
-		// 3-1. TB_ORDER_DETAIL 상태값 변경
-		orderChangeDao.updateOrderDetailForExchangeCancel(exchangeCancel);
+			// 3-1. TB_ORDER_DETAIL 상태값 변경
+			orderChangeDao.updateOrderDetailForExchangeCancel(exchangeCancel);
 
-		// 3-2. TB_ORDER_DETAIL_HST 생성
-		orderChangeDao.createOrderDtlHstCancel(exchangeCancel);
+			// 3-2. TB_ORDER_DETAIL_HST 생성
+			orderChangeDao.createOrderDtlHstCancel(exchangeCancel);
 
-		// 3-3. TB_ORDER_DETAIL_ITEM 상태값 변경
-		// orderChangeDao.updateOrderDetailItemForExchangeCancel(exchangeCancel);
+			// 3-3. TB_ORDER_DETAIL_ITEM 상태값 변경
+			// orderChangeDao.updateOrderDetailItemForExchangeCancel(exchangeCancel);
 
-		// 3-4. TB_ORDER_DETAIL_ITEM_HST 생성
-		orderChangeDao.createOrderDetailItemHstForExchangeCancel(exchangeCancel);
+			// 3-4. TB_ORDER_DETAIL_ITEM_HST 생성
+			orderChangeDao.createOrderDetailItemHstForExchangeCancel(exchangeCancel);
 
-		// 3-5. TB_ORDER_CHANGE_DETAIL 상태값 변경 및 DEL_YN Y로 업데이트
-		orderChangeDao.updateOrderChangeDtlCancel(exchangeCancel);
+			// 3-5. TB_ORDER_CHANGE_DETAIL 상태값 변경 및 DEL_YN Y로 업데이트
+			orderChangeDao.updateOrderChangeDtlCancel(exchangeCancel);
 
-		// 3-6. TB_ORDER_CHANGE_DETAIL_HST 생성
-		orderChange.setChgStat(TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value());
-		orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChange);
+			// 3-6. TB_ORDER_CHANGE_DETAIL_HST 생성
+			orderChange.setChgStat(TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value());
+			orderChangeDao.createOrderChangeDetailHstForAllCancel(orderChange);
 
-		// 4. PG 취소 처리
-		if (pg != null && StringUtils.isNotBlank(pg.getPgTid())) {
-			kcpService.kcpCancel(pg);
-		}
+			// 4. PG 취소 처리
+			if (pg != null && StringUtils.isNotBlank(pg.getPgTid())) {
+				if(!TscConstants.PgGb.NAVER_ORDER.value().equals(pg.getPgGb())) {
+					kcpService.kcpCancel(pg);
+				}
+			}
 
-		// 5. 결과값 처리
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+			// 5. 결과값 처리
+			result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+			// 6. 네이버페이 주문시 네이버페이 교환 반려 송부
+			OrderChange change = new OrderChange();
+			change.setOrdChgSq(ordChgSq);
+			naverPayService.sendNaverPayRejectExchange(change, regNo);
+		} catch (Exception e) {
+			e.printStackTrace();
+			result.set("status", GagaResponseStatus.FAIL.getCode());
+		}
 
 		return result;
 	}