Просмотр исходного кода

이태영 - 20210306 PG 임시 커밋

xodud1202 5 лет назад
Родитель
Сommit
90688ef6ec

+ 9 - 0
src/main/java/com/style24/core/biz/dao/TscOrderDao.java

@@ -8,6 +8,7 @@ import org.apache.ibatis.session.ResultHandler;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
+import com.style24.persistence.domain.Payment;
 
 /**
  * 주문관리 Dao
@@ -440,4 +441,12 @@ public interface TscOrderDao {
 	 * @since 2021. 02. 02
 	 */	
 	int getDailyDeliveryZoneInfo(Order order);
+
+	/**
+	 * 결제 후 롤백 취소 데이터 등록
+	 *
+	 * @param param
+	 * @return
+	 */
+	int insertPaymentForRollback(Payment param);
 }

+ 86 - 5
src/main/java/com/style24/core/biz/service/TscKcpService.java

@@ -8,9 +8,14 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.kcp.J_PP_CLI_N;
+import com.style24.core.biz.dao.TscOrderDao;
+import com.style24.core.support.env.TscConstants;
+import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.Payment;
 
 import lombok.extern.slf4j.Slf4j;
@@ -21,6 +26,9 @@ public class TscKcpService {
 	@Autowired
 	private Environment env;
 
+	@Autowired
+	private TscOrderDao orderDao;
+
 	public String f_get_parm(String val) {
 		if ( val == null ) val = "";
 		return  val;
@@ -37,11 +45,14 @@ public class TscKcpService {
 		}
 
 		// 02. 지불 요청 정보 설정
+		result.setPgGb(param.getPgGb());
+		result.setPayMeans(param.getPayMeans());
 		result.setReqTx(request.getParameter("req_tx"));
 		result.setTranCd(request.getParameter("tran_cd"));
 		result.setUsePayMethod(request.getParameter("use_pay_method"));
 		result.setOrdNo(Integer.parseInt(request.getParameter("ordr_idxx")));
-
+		result.setPgShopId(env.getProperty("pg.kcp.site.cd"));
+		result.setPayStat(TscConstants.PaymentStat.PAYMENT_COMPLETE.value());
 
 		// 03. 인스턴스 생성 및 초기화(변경 불가) (결제에 필요한 인스턴스를 생성하고 초기화 합니다.)
 		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
@@ -75,6 +86,8 @@ public class TscKcpService {
 				//result.setPntIssue(c_PayPlus.mf_get_res("pnt_issue"));					// 결제 포인트사 코드
 				result.setPayAmt(Integer.parseInt(c_PayPlus.mf_get_res("amount")));	// KCP 실제 거래 금액
 				result.setPgCpnAmt(c_PayPlus.mf_get_res("coupon_mny").isEmpty() ? 0 : Integer.parseInt(c_PayPlus.mf_get_res("coupon_mny")));    // 쿠폰 할인금액
+				result.setPgGb(TscConstants.PgGb.KCP.value());
+				// TODO KCP일 경우 PgGb PAYCO로 변경 필요
 
 				if ("100000000000".equals(result.getUsePayMethod())) {
 					// 06-1. 신용카드 승인 결과 처리
@@ -97,18 +110,21 @@ public class TscKcpService {
 					result.setVaNo(c_PayPlus.mf_get_res("account"));				// 입금할 계좌 번호
 					result.setVaBank(c_PayPlus.mf_get_res("bankcode"));			// 입금 은행 코드(공통코드 G940)
 					result.setVaDeadline(c_PayPlus.mf_get_res("vaDate"));		// 가상계좌 입금마감시간
+					result.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());	// 결제대기
 				} else if ("000010000000".equals(result.getUsePayMethod())) {
 					// 06-4. 휴대폰 승인 결과 처리
 					result.setPayDt(c_PayPlus.mf_get_res("hp_app_time"));		// 승인시간
 					result.setTelecom(c_PayPlus.mf_get_res("commid"));			// 통신사코드
 				}
+
+				if(!StringUtils.isEmpty(param.getPgGb()) && TscConstants.PgGb.PAYCO.value().equals(param.getPgGb())) {
+					result.setPgGb(TscConstants.PgGb.PAYCO.value());
+					result.setPayMeans(TscConstants.PayMeans.CREDIT_CARD.value());
+				}
 			} else {
-				log.info("KCP RESULT :::: {}, {}", result.getResCd(), result.getResMsg());
+				log.error("KCP ERROR RESULT :::: {}, {}", result.getResCd(), result.getResMsg());
 				throw new IllegalArgumentException("결제 실패하였습니다.");
 			}
-		} else {
-			// PAY가 아닐 경우 ?? 다른 메서드로 진행할지 확인 후 Exception 처리할건지 취소가 진행될건지 소스 진행
-			int a = 1;
 		}
 
 		log.info("CHECK RESPONSE DATA        ::::: {} / {}", c_PayPlus.toString(), c_PayPlus.getRecvObj().toString());
@@ -117,4 +133,69 @@ public class TscKcpService {
 
 		return result;
 	}
+
+	public Payment setKcpOrderData(Order order) {
+		Payment payment = new Payment();
+		// KCP 주문요청 공통 데이터
+		payment.setReqTx("pay");						// 필수 (주문시 only "pay")
+		payment.setCurrency("WON");						// 필수, 원화 : WON, 달러 : USD
+		payment.setOrdrIdxx(order.getOrdNo());			// 필수
+		payment.setGoodName(order.getGoodsNm());		// 필수
+		payment.setGoodMny(order.getPayAmt());			// 필수
+		payment.setBuyrName(order.getOrdNm());			// 필수
+		payment.setBuyrMail(order.getOrdEmail());		// 선택
+		payment.setBuyrTel1(order.getOrdTelno());		// 선택, 일반 전화번호
+		payment.setBuyrTel2(order.getOrdPhnno());		// 필수, 휴대폰번호
+		payment.setShopUserId(order.getCustNo());		// 필수, 쇼핑몰회원ID (CUST_NO)
+		// KCP 공통 변경되지 않는 값
+		payment.setSiteCd(env.getProperty("pg.kcp.site.cd"));		// 상점코드
+		payment.setSiteName(env.getProperty("pg.kcp.site.name"));	// 상점 이름 (영문 작성 권장)
+		payment.setModuleType(env.getProperty("pg.kcp.module.type"));
+		payment.setGoodExpr("0");									// 제공 기간 설정 0:일회성 1:기간설정(ex 1:2012010120120131)
+
+		if(TscConstants.PgGb.PAYCO.value().equals(order.getPgGb())) {	// 페이코
+			payment.setPaycoDirect("Y");					// 페이코 직접 호출
+			payment.setPayMthod( "100000000000");			// 직접 호출시 필요 데이터
+			payment.setPayMethod("100000000000");			// 카드
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.CREDIT_CARD.value().equals(order.getPayMeans())) {		// KCP 카드
+			payment.setPayMethod("100000000000");			// 카드
+			payment.setQuotaopt(12);						// 최대 할부 개월 수
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.BANK_DEPOSIT.value().equals(order.getPayMeans())) {		// KCP 가상계좌(무통장입금)
+			payment.setPayMethod("001000000000");			// 가상계좌
+			payment.setVcntExpireTerm(3);					// 무통장입금 유효기간
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.ACCOUNT_TRANSFER.value().equals(order.getPayMeans())) {	// KCP 계좌이체(실시간계좌이체)
+			payment.setPayMethod("010000000000");			// 계좌이체
+		} else if(order.getPayMeans() != null && TscConstants.PayMeans.CELL_PHONE.value().equals(order.getPayMeans())) {		// KCP 휴대폰결제
+			payment.setPayMethod("000010000000");			// 휴대폰결제
+		}
+
+		return payment;
+	}
+
+	@Transactional("shopTxnManager")
+	public void kcpPayRollBack(Payment param, HttpServletRequest request) {
+		try {	request.setCharacterEncoding("euc-kr");	} catch(Exception e) {	}
+
+		J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
+
+		c_PayPlus.mf_init( "", env.getProperty("pg.kcp.gw.url"), env.getProperty("pg.kcp.gw.port"), Integer.parseInt(env.getProperty("pg.kcp.tx.mode")), env.getProperty("pg.kcp.log.dir"));
+		c_PayPlus.mf_init_set();
+
+		int mod_data_set_no = c_PayPlus.mf_add_set("mod_data");
+		c_PayPlus.mf_set_us( mod_data_set_no, "tno", param.getPgTid());		// KCP 원거래 거래번호
+		c_PayPlus.mf_set_us( mod_data_set_no, "mod_type", "STSC");		// 전체취소 STSC / 부분취소 STPC
+		c_PayPlus.mf_set_us( mod_data_set_no, "mod_ip", f_get_parm(request.getRemoteAddr())); // 변경 요청자 IP
+		c_PayPlus.mf_set_us( mod_data_set_no, "mod_desc", "가맹점 결과 처리 오류 - 가맹점에서 취소 요청"); // 변경 사유
+
+		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");
+
+		param.setResCd(c_PayPlus.m_res_cd);		// 결과 코드
+		param.setResMsg(c_PayPlus.m_res_msg);	// 결과 메시지
+
+		log.info("CHECK CANCEL INFO >> {} ", c_PayPlus.getRecvObj().toString());
+
+		param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
+		orderDao.insertPaymentForRollback(param);
+	}
 }

+ 0 - 41
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -1200,45 +1200,4 @@ public class TscOrderService {
 	public Collection<Order> getSerialCpnApplyGoodsList(Order order) {
 		return orderDao.getGoodsCartCpnApplyGoodsList(order);
 	}
-
-	public Payment setKcpOrderData(Order order) {
-		Payment payment = new Payment();
-		// KCP 주문요청 공통 데이터
-		payment.setReqTx("pay");						// 필수 (주문시 only "pay")
-		payment.setCurrency("WON");						// 필수, 원화 : WON, 달러 : USD
-		payment.setOrdrIdxx(order.getOrdNo());			// 필수
-		payment.setGoodName(order.getGoodsNm());		// 필수
-		payment.setGoodMny(order.getPayAmt());			// 필수
-		payment.setBuyrName(order.getOrdNm());			// 필수
-		payment.setBuyrMail(order.getOrdEmail());		// 선택
-		payment.setBuyrTel1(order.getOrdTelno());		// 선택, 일반 전화번호
-		payment.setBuyrTel2(order.getOrdPhnno());		// 필수, 휴대폰번호
-		payment.setShopUserId(order.getCustNo());		// 필수, 쇼핑몰회원ID (CUST_NO)
-		// KCP 공통 변경되지 않는 값
-		payment.setSiteCd(env.getProperty("pg.kcp.site.cd"));		// 상점코드
-		payment.setSiteName(env.getProperty("pg.kcp.site.name"));	// 상점 이름 (영문 작성 권장)
-		payment.setModuleType(env.getProperty("pg.kcp.module.type"));
-		payment.setGoodExpr("0");									// 제공 기간 설정 0:일회성 1:기간설정(ex 1:2012010120120131)
-
-		// KCP 신용카드 옵션
-		payment.setQuotaopt(12);						// 최대 할부 개월 수
-
-		// KCP 무통장입금 옵션
-		payment.setVcntExpireTerm(3);					// 무통장입금 유효기간
-
-		if(TscConstants.PgGb.PAYCO.value().equals(order.getPgGb())) {	// 페이코
-			payment.setPaycoDirect("Y");
-			payment.setPayMthod( "100000000000");
-			payment.setPayMethod("100000000000");
-		} else if(TscConstants.PayMeans.CREDIT_CARD.value().equals(order.getPayMeans())) {		// KCP 카드
-			payment.setPayMethod("100000000000");
-		} else if(TscConstants.PayMeans.BANK_DEPOSIT.value().equals(order.getPayMeans())) {		// KCP 가상계좌(무통장입금)
-			payment.setPayMethod("001000000000");
-		} else if(TscConstants.PayMeans.ACCOUNT_TRANSFER.value().equals(order.getPayMeans())) {	// KCP 계좌이체(실시간계좌이체)
-			payment.setPayMethod("010000000000");
-		} else if(TscConstants.PayMeans.CELL_PHONE.value().equals(order.getPayMeans())) {		// KCP 휴대폰결제
-			payment.setPayMethod("000010000000");
-		}
-		return payment;
-	}
 }

+ 2 - 2
src/main/java/com/style24/core/support/env/TscConstants.java

@@ -292,9 +292,9 @@ public class TscConstants {
 
 	// 결제상태
 	public enum PaymentStat {
-		PAYMENT_WAIT("G016_00"),			// 결제대기
+		PAYMENT_WAIT("G016_00"),				// 결제대기
 		PAYMENT_SUCCESS("G016_20"),			// 결제성공
-		PAYMENT_COMPLETE("G016_30"),		// 결제완료
+		PAYMENT_COMPLETE("G016_30"),			// 결제완료
 		DB_FAIL("G016_97"),					// 결제성공후DB실패
 		PAYMENT_CANCEL("G016_99");			// 결제취소
 

+ 2 - 1
src/main/java/com/style24/persistence/domain/Payment.java

@@ -28,8 +28,9 @@ public class Payment extends TscBaseDomain {
 	private int custNo;				// 고객번호
 	private String payGb;			// 결제구분(O:주문시결제, D:배송시결제, E:에러(강제 결제 태울 때 또는 에러일 때)
 	private String payDt;			// 결제일자
-	private String pgMeans;			// 결제수단
+	private String payMeans;		// 결제수단
 	private String pgGb;			// PG구분
+	private String payStat;			// 결제 상태
 	private String pgTid;			// PG TID
 	private String pgTradeNo;		// PG거래번호(승인번호)
 	private String pgShopId;		// PG가맹점ID

+ 61 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscOrder.xml

@@ -2142,6 +2142,67 @@
 			#{item}
 		</foreach>
 	</insert>
+
+	<insert id="insertPaymentForRollback" parameterType="Payment">
+		/* TscOrder.insertPaymentForRollback : 롤백 취소 데이터 등록 */
+		INSERT INTO TB_PAYMENT (
+			  ORD_NO
+			, PAY_DT
+			, PAY_MEANS
+			, PAY_AMT
+			, PG_CPN_AMT
+			, NPAY_PNT_AMT
+			, PAY_GB
+			, PAY_STAT
+			, PG_GB
+			, PG_TID
+			, PG_TRADE_NO
+			, PG_SHOP_ID
+			, CARD_TYPE
+			, CARD_KIND
+			, CARD_BANK
+			, CARD_NM
+			, CARD_MIPS
+			, CARD_PCABLE_YN
+			, VA_NO
+			, VA_NM
+			, VA_BANK
+			, VA_DEADLINE
+			, TELECOM
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{ordNo}
+			, NOW()
+			, #{payMeans}
+			, -#{payAmt}
+			, -#{pgCpnAmt}
+			, -#{npayPntAmt}
+			, 'E'
+			, #{payStat}
+			, #{pgGb}
+			, #{pgTid}
+			, #{pgTradeNo}
+			, #{pgShopId}
+			, #{cardType}
+			, #{cardKind}
+			, #{cardBank}
+			, #{cardNm}
+			, #{cardMips}
+			, #{cardPcableYn}
+			, #{vaNo}
+			, #{vaNm}
+			, #{vaBank}
+			, DATE_FORMAT(#{vaDeadline} , '%Y%m%d%H%i%S')
+			, #{telecom}
+			, #{regNo}
+			, NOW()
+			, #{regNo}
+			, NOW()
+		)
+	</insert>
 </mapper>