|
|
@@ -108,8 +108,8 @@ public class TscKcpService {
|
|
|
// 06-3. 가상계좌 승인 결과 처리 (현금영수증은 입금완료 noti에서 입력)
|
|
|
result.setVaNm(c_PayPlus.mf_get_res("va_name")); // 입금할 계좌 예금주
|
|
|
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.setVaBank(c_PayPlus.mf_get_res("bank_code")); // 입금 은행 코드(공통코드 G940)
|
|
|
+ result.setVaDeadline(c_PayPlus.mf_get_res("va_date")); // 가상계좌 입금마감시간
|
|
|
result.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value()); // 결제대기
|
|
|
} else if ("000010000000".equals(result.getUsePayMethod())) {
|
|
|
// 06-4. 휴대폰 승인 결과 처리
|
|
|
@@ -127,10 +127,6 @@ public class TscKcpService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- log.info("CHECK RESPONSE DATA ::::: {} / {}", c_PayPlus.toString(), c_PayPlus.getRecvObj().toString());
|
|
|
- log.info("CHECK RESPONSE RESULT DATA ::::: {}", result.toString());
|
|
|
- log.info("CHECK RESPONSE PARAM DATA ::::: {}", param.toString());
|
|
|
-
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@@ -172,30 +168,94 @@ public class TscKcpService {
|
|
|
return payment;
|
|
|
}
|
|
|
|
|
|
- @Transactional("shopTxnManager")
|
|
|
+ /**
|
|
|
+ * KCP 결제 처리 후 로직 진행 중 에러 발생으로 인한 취소처리
|
|
|
+ * @param param
|
|
|
+ * @param request
|
|
|
+ */
|
|
|
public void kcpPayRollBack(Payment param, HttpServletRequest request) {
|
|
|
+ param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
|
|
|
+ param.setPayGb("E");
|
|
|
+ param.setModType("STSC");
|
|
|
+ param.setModDesc("가맹점 결과 처리 오류 - 가맹점에서 취소 요청");
|
|
|
+ kcpCancel(param, request);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * KCP 전체 취소 (pgTid, regNo, updNo 필수)
|
|
|
+ * @param param
|
|
|
+ * @param request
|
|
|
+ */
|
|
|
+ public void kcpPayCancelAll(Payment param, HttpServletRequest request) {
|
|
|
+ param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
|
|
|
+ param.setPayGb("O");
|
|
|
+ param.setModType("STSC");
|
|
|
+ param.setModDesc("가맹점 취소 - 전체 취소");
|
|
|
+ kcpCancel(param, request);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * KCP 부분 취소 (pgTid, regNo, updNo, leftAmt:취소 전 잔여금액, partCancelAmt:부분취소금액 필수)
|
|
|
+ * @param param
|
|
|
+ * @param request
|
|
|
+ */
|
|
|
+ public void kcpPayCancelPart(Payment param, HttpServletRequest request) {
|
|
|
+ param.setPayStat(TscConstants.PaymentStat.PAYMENT_CANCEL.value());
|
|
|
+ param.setPayGb("O");
|
|
|
+ param.setModType("STPC");
|
|
|
+ param.setModDesc("가맹점 취소 - 부분 취소");
|
|
|
+ kcpCancel(param, request);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional("shopTxnManager")
|
|
|
+ public void kcpCancel(Payment param, HttpServletRequest request) {
|
|
|
try { request.setCharacterEncoding("euc-kr"); } catch(Exception e) { }
|
|
|
|
|
|
J_PP_CLI_N c_PayPlus = new J_PP_CLI_N();
|
|
|
+ Payment payment = new Payment();
|
|
|
|
|
|
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", "가맹점 결과 처리 오류 - 가맹점에서 취소 요청"); // 변경 사유
|
|
|
+ c_PayPlus.mf_set_us(mod_data_set_no, "tno" , param.getPgTid()); // KCP 원거래 거래번호
|
|
|
+ c_PayPlus.mf_set_us(mod_data_set_no, "mod_type" , param.getModType()); // 전체취소 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.getModDesc()); // 변경 사유
|
|
|
+
|
|
|
+ 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() + ""); // 취소가능잔액
|
|
|
+ }
|
|
|
|
|
|
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());
|
|
|
+ if("0000".equals(c_PayPlus.m_res_cd)) {
|
|
|
+ payment.setResCd(c_PayPlus.m_res_cd); // 결과 코드
|
|
|
+ payment.setResMsg(c_PayPlus.m_res_msg); // 결과 메시지
|
|
|
+ payment.setPgTid(c_PayPlus.mf_get_res("tno"));
|
|
|
+ payment.setPgCpnAmt(-Integer.parseInt(c_PayPlus.mf_get_res("coupon_mny")));
|
|
|
+ if ("STSC".equals(param.getModType())) {
|
|
|
+ payment.setOrdNo(Integer.parseInt(c_PayPlus.mf_get_res("order_no"))); // 전체취소시 return 되는 주문번호
|
|
|
+ payment.setPayAmt(-Integer.parseInt(c_PayPlus.mf_get_res("amount"))); // 전체 취소는 결제 금액 전체
|
|
|
+ } else {
|
|
|
+ payment.setOrdNo(Integer.parseInt(c_PayPlus.mf_get_res("ca_order_id"))); // 부분취소시 return되는 주문번호
|
|
|
+ payment.setPayAmt(-Integer.parseInt(c_PayPlus.mf_get_res("panc_mod_mny"))); // 부분 취소는 취소된 금액
|
|
|
+ }
|
|
|
|
|
|
- param.setPayStat(TscConstants.PaymentStat.DB_FAIL.value());
|
|
|
- orderDao.insertPaymentForRollback(param);
|
|
|
+ if ("E".equals(param.getPayGb())) { // 결제완료 로직 진행 중 에러 발생시
|
|
|
+ param.setPgTid(payment.getPgTid());
|
|
|
+ orderDao.insertPaymentCancel(param);
|
|
|
+ } else { // 일반 취소 작업
|
|
|
+ payment.setRegNo(param.getRegNo() == null ? 0 : param.getRegNo());
|
|
|
+ payment.setUpdNo(param.getUpdNo() == null ? 0 : param.getUpdNo());
|
|
|
+ payment.setPayGb(param.getPayGb());
|
|
|
+ payment.setPayStat(param.getPayStat());
|
|
|
+ orderDao.insertPaymentCancel(payment);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw new IllegalArgumentException("결제 취소 실패하였습니다.");
|
|
|
+ }
|
|
|
}
|
|
|
}
|