Преглед на файлове

이태영 - 20210416 KCP 환불계좌 취소 진행중

xodud1202 преди 5 години
родител
ревизия
5160f7bda5
променени са 2 файла, в които са добавени 65 реда и са изтрити 43 реда
  1. 63 42
      src/main/java/com/style24/core/biz/service/TscKcpService.java
  2. 2 1
      src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

+ 63 - 42
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -213,44 +213,45 @@ public class TscKcpService {
 	}
 
 	/**
-	 * KCP 결제 처리 후 로직 진행 중 에러 발생으로 인한 취소처리 (TB_PAYMENT에 insert되는 모든 데이터 필요)
-	 * @param param
-	 * @param request
-	 */
-	public void kcpPayRollBack(Payment param) {
-		param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
-		param.setPayGb("E");
-		param.setModType("STSC");
-		param.setModDesc("가맹점 결과 처리 오류 - 가맹점에서 취소 요청");
-		kcpCancel(param);
-	}
-
-	/**
-	 * KCP 전체 취소 (pgTid, regNo, updNo 필수)
-	 * @param param
-	 * @param request
-	 */
-	public void kcpPayCancelAll(Payment param) {
-		param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-		param.setPayGb("O");
-		param.setModType("STSC");
-		param.setModDesc("가맹점 취소 - 전체 취소");
-		kcpCancel(param);
-	}
-
-	/**
-	 * KCP 부분 취소 (pgTid, regNo, updNo, leftAmt:취소 전 잔여금액, partCancelAmt:부분취소금액 필수)
+	 * KCP 취소 (pgTid, regNo, updNo)
+	 * ** 주문 로직 진행 중 에러로 인한 취소
+	 * result.setIpAddress(request.getRemoteAddr());
+	 * result.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
+	 * result.setPayGb("E");	// O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
+	 * result.setModType("STSC");
+	 * result.setModDesc("가맹점 결과 처리 오류 - 가맹점에서 취소 요청");
+	 *
+	 * ** 전체취소 필요 정보
+	 * result.setIpAddress(request.getRemoteAddr());
+	 * param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+	 * param.setPayGb("O");				// O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
+	 * param.setModType("STSC");		// 전체취소
+	 * param.setModDesc("가맹점 취소 - 전체 취소");
+	 *
+	 * ** 부분취소 필요 정보
+	 * result.setIpAddress(request.getRemoteAddr());
+	 * param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
+	 * param.setPayGb("O");				// O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
+	 * param.setModType("STPC");
+	 * param.setModDesc("가맹점 취소 - 부분 취소");
+	 * param.setLeftAmt(100000);		// 취소 전 잔여금액
+	 * param.setPartCancelAmt(30000);	// 부분취소금액
+	 *
+	 * ** 무통장입금 입금 후 전체 취소 (전체취소 필요 정보에서 아래 정보 추가)
+	 * param.setModType("STHD");			// 전체환불
+	 * param.setBankCd("88");				// 계좌은행(공통코드G940). 결제수단이 "20:무통장입금일" 때 사용
+	 * param.setAccountNm("테스터");		// 환불계좌 예금주명
+	 * param.setAccountNo("110111111111")	// 환불계좌번호
+	 *
+	 * ** 무통장입금 입금 전 부분 취소 (부분취소 필요 정보에서 아래 정보 추가)
+	 * param.setModType("STPD");			// 부분환불
+	 * param.setBankCd("88");				// 계좌은행(공통코드G940). 결제수단이 "20:무통장입금일" 때 사용
+	 * param.setAccountNm("테스터");		// 환불계좌 예금주명
+	 * param.setAccountNo("110111111111")	// 환불계좌번호
+	 *
 	 * @param param
 	 * @param request
 	 */
-	public void kcpPayCancelPart(Payment param) {
-		param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
-		param.setPayGb("O");
-		param.setModType("STPC");
-		param.setModDesc("가맹점 취소 - 부분 취소");
-		kcpCancel(param);
-	}
-
 	@Transactional("shopTxnManager")
 	public void kcpCancel(Payment param) {
 		// try {	request.setCharacterEncoding("euc-kr");	} catch(Exception e) {e.printStackTrace();}
@@ -269,31 +270,48 @@ public class TscKcpService {
 
 		if("STPC".equals(param.getModType())) {
 			c_PayPlus.mf_set_us( mod_data_set_no, "mod_mny", param.getPartCancelAmt() + "");	// 취소요청금액
-			c_PayPlus.mf_set_us( mod_data_set_no, "rem_mny", param.getLeftAmt() + "");			// 취소가능잔액
+			c_PayPlus.mf_set_us( mod_data_set_no, "rem_mny", param.getLeftAmt() + "");		// 취소가능잔액
+		} else if("STHD".equals(param.getModType())) {
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_sub_type", "MDSC00");					// 변경 유형
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_comp_type", "MDCP01");				// 변경 유형
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_bankcode", "BK" + param.getBankCd());	// 환불 요청 은행 코드
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_account", param.getAccountNo());			// 환불 요청 계좌
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_depositor", param.getAccountNm());		// 환불 요청 계좌주명
+		} else if("STPD".equals(param.getModType())) {
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_sub_type", "MDSC03");					// 변경 유형
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_comp_type", "MDCP01");				// 변경 유형
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_mny", param.getPartCancelAmt() + "");	// 취소요청금액
+			c_PayPlus.mf_set_us( mod_data_set_no, "rem_mny", param.getLeftAmt() + "");		// 취소가능잔액
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_bankcode", "BK" + param.getBankCd());	// 환불 요청 은행 코드
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_account", param.getAccountNo());			// 환불 요청 계좌
+			c_PayPlus.mf_set_us( mod_data_set_no, "mod_depositor", param.getAccountNm());		// 환불 요청 계좌주명
+		}
+
+		String custIp = "";
+		if("STHD".equals(param.getModType()) || "STPD".equals(param.getModType())) {
+			custIp = f_get_parm(param.getIpAddress());
 		}
 
 		param.setTranCd("00200000");
-		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), env.getProperty("pg.kcp.site.key"), param.getTranCd(), "", "", env.getProperty("pg.kcp.log.level"), "0");
+		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), env.getProperty("pg.kcp.site.key"), param.getTranCd(), custIp, "", env.getProperty("pg.kcp.log.level"), "0");
 
 		if("0000".equals(c_PayPlus.m_res_cd)) {
 			try {
-				payment.setPgTid(c_PayPlus.mf_get_res("tno"));
-
 				// 주문 결제 정보 조회
-				payment = orderDao.getKcpOrderPaymentInfo(payment);
+				payment = orderDao.getKcpOrderPaymentInfo(param);
 
 				payment.setResCd(c_PayPlus.m_res_cd);			// 결과 코드
 				payment.setResMsg(c_PayPlus.m_res_msg);			// 결과 메시지
 				payment.setPgCpnAmt(c_PayPlus.mf_get_res("coupon_mny").isEmpty() ? 0 : Integer.parseInt(c_PayPlus.mf_get_res("coupon_mny")));
 
 				if ("STSC".equals(param.getModType())) {
-					payment.setPayAmt(-payment.getPayAmt());												// 전체 취소는 결제 금액 전체
+					payment.setPayAmt(-payment.getPayAmt());													// 전체 취소는 결제 금액 전체
 				} else {
 					payment.setPayAmt(-(Integer.parseInt(c_PayPlus.mf_get_res("panc_mod_mny"))));			// 부분 취소는 취소된 금액
 				}
 
 				if ("E".equals(param.getPayGb())) {			// 결제완료 로직 진행 중 에러 발생시
-					param.setPgTid(payment.getPgTid());
+					param.setPgTradeNo(c_PayPlus.mf_get_res("tno"));
 					param.setPayAmt(payment.getPayAmt());
 					orderDao.insertPayment(param);
 				} else {									// 일반 취소 작업
@@ -301,6 +319,9 @@ public class TscKcpService {
 					payment.setUpdNo(param.getUpdNo() == null ? 0 : param.getUpdNo());
 					payment.setPayGb(param.getPayGb());
 					payment.setPayStat(param.getPayStat());
+					payment.setOrdNo(param.getOrdNo());
+					payment.setPgTradeNo(c_PayPlus.mf_get_res("tno"));		// 환불 요청건의 KCP 거래번호
+
 					orderDao.insertPaymentCancel(payment);
 				}
 			} catch (Exception e) {

+ 2 - 1
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -2277,7 +2277,6 @@
 			 , PG_GB
 		     , ORD_NO
 		     , PG_TID
-
 			 , PG_SHOP_ID
 			 , CARD_TYPE
 			 , CARD_KIND
@@ -2311,6 +2310,7 @@
 			, PAY_STAT
 			, PG_GB
 			, PG_TID
+			, PG_TRADE_NO
 			, PG_SHOP_ID
 			, CARD_TYPE
 			, CARD_KIND
@@ -2338,6 +2338,7 @@
 			 , #{payStat}
 			 , PG_GB
 			 , #{pgTid}
+		     , #{pgTradeNo}
 			 , PG_SHOP_ID
 			 , CARD_TYPE
 			 , CARD_KIND