|
|
@@ -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);
|
|
|
+ }
|
|
|
}
|