123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- package com.oqpo.api.service.loanmng;
- import com.kicc.EasyPayClient;
- import com.oqpo.api.exception.GlobalException;
- import com.oqpo.api.mapper.loanmng.UnpaidMngMapper;
- import com.oqpo.api.service.CommonService;
- import com.oqpo.api.util.StringUtil;
- import com.oqpo.api.web.dto.request.loanmng.EasypayPaymentRequest;
- import com.oqpo.api.web.dto.response.loanmng.EasypayPaymentResponse;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.servlet.http.HttpServletRequest;
- @Service
- @Slf4j
- public class EasypayPaymentService extends CommonService {
- @Autowired
- private UnpaidMngMapper unpaidMngMapper;
- @Value("${kicc.gateway}")
- private String kiccGatewayUrl;
- @Value("${kicc.cert_dir}")
- private String kiccCertFile;
- @Value("${kicc.log_dir}")
- private String kiccLogDir;
- /* 결제 요청 */
- @Transactional
- public EasypayPaymentResponse requestPayment(String userId, HttpServletRequest request, EasypayPaymentRequest easypayPaymentRequest) throws Exception {
- try {
- /* -------------------------------------------------------------------------- */
- /* ::: 처리구분 설정 */
- /* -------------------------------------------------------------------------- */
- final String TRAN_CD_NOR_PAYMENT = "00101000"; // 승인(일반, 에스크로)
- final String TRAN_CD_NOR_MGR = "00201000"; // 변경(일반, 에스크로)
- @SuppressWarnings("unused") final String TRAN_CD_NOR_MALL = "00201030"; // 셀러(다중정산)
- /* -------------------------------------------------------------------------- */
- /* ::: 지불정보 설정 */
- /* -------------------------------------------------------------------------- */
- final String GW_URL = (String) kiccGatewayUrl; // GatewayURL
- final String GW_PORT = "80"; // 포트번호(변경불가)
- /* -------------------------------------------------------------------------- */
- /* ::: 지불 데이터 셋업 (업체에 맞게 수정) */
- /* -------------------------------------------------------------------------- */
- /* ※ 주의 ※ */
- /* cert_file 변수 설정 */
- /* - pg_cert.pem 파일이 있는 디렉토리의 절대 경로 설정 */
- /* log_dir 변수 설정 */
- /* - log 디렉토리 설정 */
- /* log_level 변수 설정 */
- /* - log 레벨 설정 (1 to 99(높을수록 상세)) */
- /* -------------------------------------------------------------------------- */
- final String CERT_FILE = (String) kiccCertFile;
- final String LOG_DIR = (String) kiccLogDir;
- final int LOG_LEVEL = 1;
- /* -------------------------------------------------------------------------- */
- /* ::: 승인요청 정보 설정 */
- /* -------------------------------------------------------------------------- */
- // [헤더]
- String tr_cd = ""; // [필수]결제창요청구분
- String trace_no = ""; // [필수]추적번호
- String order_no = ""; // [필수]가맹점주문번호
- String mall_id = ""; // [필수]가맹점ID
- // [공통]
- String encrypt_data = ""; // [필수]암호화전문
- String sessionkey = ""; // [필수]세션키
- if (!StringUtil.isEmpty(easypayPaymentRequest.getSp_tr_cd())) {
- // [헤더]
- tr_cd = StringUtil.null2str(easypayPaymentRequest.getSp_tr_cd()); // [필수]결제창요청구분
- trace_no = StringUtil.null2str(easypayPaymentRequest.getSp_trace_no()); // [필수]추적번호
- order_no = StringUtil.null2str(easypayPaymentRequest.getSp_order_no()); // [필수]가맹점주문번호
- mall_id = StringUtil.null2str(easypayPaymentRequest.getSp_mall_id()); // [필수]가맹점ID
- // [공통]
- encrypt_data = StringUtil.null2str(easypayPaymentRequest.getSp_encrypt_data()); // [필수]암호화전문
- sessionkey = StringUtil.null2str(easypayPaymentRequest.getSp_sessionkey()); // [필수]세션키
- } else {
- // [헤더]
- tr_cd = StringUtil.null2str(easypayPaymentRequest.getEP_tr_cd()); // [필수]결제창요청구분
- trace_no = StringUtil.null2str(easypayPaymentRequest.getEP_trace_no()); // [필수]추적번호
- order_no = StringUtil.null2str(easypayPaymentRequest.getEP_order_no()); // [필수]가맹점주문번호
- mall_id = StringUtil.null2str(easypayPaymentRequest.getEP_mall_id()); // [필수]가맹점ID
- // [공통]
- encrypt_data = StringUtil.null2str(easypayPaymentRequest.getEP_encrypt_data()); // [필수]암호화전문
- sessionkey = StringUtil.null2str(easypayPaymentRequest.getEP_sessionkey()); // [필수]세션키
- }
- /* -------------------------------------------------------------------------- */
- /* ::: 변경관리 정보 설정 */
- /* -------------------------------------------------------------------------- */
- String mgr_txtype = StringUtil.null2str(easypayPaymentRequest.getMgr_txtype()); // [필수]거래구분
- String mgr_subtype = StringUtil.null2str(easypayPaymentRequest.getMgr_subtype()); // [선택]변경세부구분
- String org_cno = StringUtil.null2str(easypayPaymentRequest.getOrg_cno()); // [필수]원거래고유번호
- String mgr_amt = StringUtil.null2str(easypayPaymentRequest.getMgr_amt()); // [선택]금액
- String mgr_rem_amt = StringUtil.null2str(easypayPaymentRequest.getMgr_rem_amt()); // [선택]부분취소잔액
- String mgr_bank_cd = StringUtil.null2str(easypayPaymentRequest.getMgr_bank_cd()); // [선택]환불계좌은행코드
- String mgr_account = StringUtil.null2str(easypayPaymentRequest.getMgr_account()); // [선택]환불계좌번호
- String mgr_depositor = StringUtil.null2str(easypayPaymentRequest.getMgr_depositor()); // [선택]환불계좌예금주명
- /* -------------------------------------------------------------------------- */
- /* ::: 전문 */
- /* -------------------------------------------------------------------------- */
- // String mgr_data = ""; // 변경정보
- // String mall_data = ""; // 요청전문
- /* -------------------------------------------------------------------------- */
- /* ::: 결제 결과 */
- /* -------------------------------------------------------------------------- */
- String bDBProc = ""; //가맹점DB처리성공여부
- String res_cd = ""; //응답코드
- String res_msg = ""; //응답메시지
- String r_cno = ""; //PG거래번호
- String r_amount = ""; //총 결제금액
- String r_order_no = ""; //주문번호
- String r_auth_no = ""; //승인번호
- String r_tran_date = ""; //승인일시
- String r_escrow_yn = ""; //에스크로 사용유무
- String r_complex_yn = ""; //복합결제 유무
- String r_stat_cd = ""; //상태코드
- String r_stat_msg = ""; //상태메시지
- String r_pay_type = ""; //결제수단
- String r_mall_id = ""; //가맹점 Mall ID
- String r_card_no = ""; //카드번호
- String r_issuer_cd = ""; //발급사코드
- String r_issuer_nm = ""; //발급사명
- String r_acquirer_cd = ""; //매입사코드
- String r_acquirer_nm = ""; //매입사명
- String r_install_period = ""; //할부개월
- String r_noint = ""; //무이자여부
- String r_part_cancel_yn = ""; //부분취소 가능여부
- String r_card_gubun = ""; //신용카드 종류
- String r_card_biz_gubun = ""; //신용카드 구분
- String r_cpon_flag = ""; //쿠폰사용유무
- String r_bank_cd = ""; //은행코드
- String r_bank_nm = ""; //은행명
- String r_account_no = ""; //계좌번호
- String r_deposit_nm = ""; //입금자명
- String r_expire_date = ""; //계좌사용만료일
- String r_cash_res_cd = ""; //현금영수증 결과코드
- String r_cash_res_msg = ""; //현금영수증 결과메세지
- String r_cash_auth_no = ""; //현금영수증 승인번호
- String r_cash_tran_date = ""; //현금영수증 승인일시
- String r_cash_issue_type = ""; //현금영수증발행용도
- String r_cash_auth_type = ""; //인증구분
- String r_cash_auth_value = ""; //인증번호
- String r_auth_id = ""; //PhoneID
- String r_billid = ""; //인증번호
- String r_mobile_no = ""; //휴대폰번호
- String r_mob_ansim_yn = ""; //안심결제 사용유무
- String r_ars_no = ""; //전화번호
- String r_cp_cd = ""; //포인트사/쿠폰사
- String r_cpon_auth_no = ""; //쿠폰승인번호
- String r_cpon_tran_date = ""; //쿠폰승인일시
- String r_cpon_no = ""; //쿠폰번호
- String r_remain_cpon = ""; //쿠폰잔액
- String r_used_cpon = ""; //쿠폰 사용금액
- String r_rem_amt = ""; //잔액
- String r_bk_pay_yn = ""; //장바구니 결제여부
- String r_canc_acq_date = ""; //매입취소일시
- String r_canc_date = ""; //취소일시
- String r_refund_date = ""; //환불예정일시
- /* -------------------------------------------------------------------------- */
- /* ::: EasyPayClient 인스턴스 생성 [변경불가 !!]. */
- /* -------------------------------------------------------------------------- */
- EasyPayClient easyPayClient = new EasyPayClient();
- easyPayClient.easypay_setenv_init(GW_URL, GW_PORT, CERT_FILE, LOG_DIR, LOG_LEVEL);
- easyPayClient.easypay_reqdata_init();
- /* -------------------------------------------------------------------------- */
- /* ::: 승인요청(플러그인 암호화 전문 설정) */
- /* -------------------------------------------------------------------------- */
- if (TRAN_CD_NOR_PAYMENT.equals(tr_cd)) {
- // 승인요청 전문 설정
- easyPayClient.easypay_set_trace_no(trace_no);
- easyPayClient.easypay_encdata_set(encrypt_data, sessionkey);
- }
- /* -------------------------------------------------------------------------- */
- /* ::: 변경관리 요청 */
- /* -------------------------------------------------------------------------- */
- else if (TRAN_CD_NOR_MGR.equals(tr_cd)) {
- int easypay_mgr_data_item;
- easypay_mgr_data_item = easyPayClient.easypay_item("mgr_data");
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_txtype", mgr_txtype); // [필수]거래구분
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_subtype", mgr_subtype); // [선택]변경세부구분
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "org_cno", org_cno); // [필수]원거래고유번호
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_amt", mgr_amt); // [선택]금액
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_rem_amt", mgr_rem_amt); // [선택]부분취소 잔액
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_bank_cd", mgr_bank_cd); // [선택]환불계좌 은행코드
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_account", mgr_account); // [선택]환불계좌 번호
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_depositor", mgr_depositor); // [선택]환불계좌 예금주명
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "req_ip", request.getRemoteAddr());// [필수]요청자 IP
- }
- /* -------------------------------------------------------------------------- */
- /* ::: 실행 */
- /* -------------------------------------------------------------------------- */
- if (tr_cd.length() > 0) {
- easyPayClient.easypay_run(mall_id, tr_cd, order_no);
- res_cd = easyPayClient.res_cd;
- res_msg = easyPayClient.res_msg;
- } else {
- res_cd = "M114";
- res_msg = "연동 오류|tr_cd값이 설정되지 않았습니다.";
- }
- /* -------------------------------------------------------------------------- */
- /* ::: 결과 처리 */
- /* -------------------------------------------------------------------------- */
- r_cno = easyPayClient.easypay_get_res("cno"); //PG거래번호
- r_amount = easyPayClient.easypay_get_res("amount"); //총 결제금액
- r_order_no = easyPayClient.easypay_get_res("order_no"); //주문번호
- r_auth_no = easyPayClient.easypay_get_res("auth_no"); //승인번호
- r_tran_date = easyPayClient.easypay_get_res("tran_date"); //승인일시
- r_escrow_yn = easyPayClient.easypay_get_res("escrow_yn"); //에스크로 사용유무
- r_complex_yn = easyPayClient.easypay_get_res("complex_yn"); //복합결제 유무
- r_stat_cd = easyPayClient.easypay_get_res("stat_cd"); //상태코드
- r_stat_msg = easyPayClient.easypay_get_res("stat_msg"); //상태메시지
- r_pay_type = easyPayClient.easypay_get_res("pay_type"); //결제수단
- r_mall_id = easyPayClient.easypay_get_res("mall_id"); //가맹점 Mall ID
- r_card_no = easyPayClient.easypay_get_res("card_no"); //카드번호
- r_issuer_cd = easyPayClient.easypay_get_res("issuer_cd"); //발급사코드
- r_issuer_nm = easyPayClient.easypay_get_res("issuer_nm"); //발급사명
- r_acquirer_cd = easyPayClient.easypay_get_res("acquirer_cd"); //매입사코드
- r_acquirer_nm = easyPayClient.easypay_get_res("acquirer_nm"); //매입사명
- r_install_period = easyPayClient.easypay_get_res("install_period"); //할부개월
- r_noint = easyPayClient.easypay_get_res("noint"); //무이자여부
- r_part_cancel_yn = easyPayClient.easypay_get_res("part_cancel_yn"); //부분취소 가능여부
- r_card_gubun = easyPayClient.easypay_get_res("card_gubun"); //신용카드 종류
- r_card_biz_gubun = easyPayClient.easypay_get_res("card_biz_gubun"); //신용카드 구분
- r_cpon_flag = easyPayClient.easypay_get_res("cpon_flag"); //쿠폰사용유무
- r_bank_cd = easyPayClient.easypay_get_res("bank_cd"); //은행코드
- r_bank_nm = easyPayClient.easypay_get_res("bank_nm"); //은행명
- r_account_no = easyPayClient.easypay_get_res("account_no"); //계좌번호
- r_deposit_nm = easyPayClient.easypay_get_res("deposit_nm"); //입금자명
- r_expire_date = easyPayClient.easypay_get_res("expire_date"); //계좌사용만료일
- r_cash_res_cd = easyPayClient.easypay_get_res("cash_res_cd"); //현금영수증 결과코드
- r_cash_res_msg = easyPayClient.easypay_get_res("cash_res_msg"); //현금영수증 결과메세지
- r_cash_auth_no = easyPayClient.easypay_get_res("cash_auth_no"); //현금영수증 승인번호
- r_cash_tran_date = easyPayClient.easypay_get_res("cash_tran_date"); //현금영수증 승인일시
- r_cash_issue_type = easyPayClient.easypay_get_res("cash_issue_type"); //현금영수증발행용도
- r_cash_auth_type = easyPayClient.easypay_get_res("cash_auth_type"); //인증구분
- r_cash_auth_value = easyPayClient.easypay_get_res("cash_auth_value"); //인증번호
- r_auth_id = easyPayClient.easypay_get_res("auth_id"); //PhoneID
- r_billid = easyPayClient.easypay_get_res("billid"); //인증번호
- r_mobile_no = easyPayClient.easypay_get_res("mobile_no"); //휴대폰번호
- r_mob_ansim_yn = easyPayClient.easypay_get_res("mob_ansim_yn"); //안심결제 사용유무
- r_ars_no = easyPayClient.easypay_get_res("ars_no"); //전화번호
- r_cp_cd = easyPayClient.easypay_get_res("cp_cd"); //포인트사/쿠폰사
- r_cpon_auth_no = easyPayClient.easypay_get_res("cpon_auth_no"); //쿠폰승인번호
- r_cpon_tran_date = easyPayClient.easypay_get_res("cpon_tran_date"); //쿠폰승인일시
- r_cpon_no = easyPayClient.easypay_get_res("cpon_no"); //쿠폰번호
- r_remain_cpon = easyPayClient.easypay_get_res("remain_cpon"); //쿠폰잔액
- r_used_cpon = easyPayClient.easypay_get_res("used_cpon"); //쿠폰 사용금액
- r_rem_amt = easyPayClient.easypay_get_res("rem_amt"); //잔액
- r_bk_pay_yn = easyPayClient.easypay_get_res("bk_pay_yn"); //장바구니 결제여부
- r_canc_acq_date = easyPayClient.easypay_get_res("canc_acq_date"); //매입취소일시
- r_canc_date = easyPayClient.easypay_get_res("canc_date"); //취소일시
- r_refund_date = easyPayClient.easypay_get_res("refund_date"); //환불예정일시
- /* -------------------------------------------------------------------------- */
- /* ::: 가맹점 DB 처리 */
- /* -------------------------------------------------------------------------- */
- /* 응답코드(res_cd)가 "0000" 이면 정상승인 입니다. */
- /* r_amount가 주문DB의 금액과 다를 시 반드시 취소 요청을 하시기 바랍니다. */
- /* DB 처리 실패 시 취소 처리를 해주시기 바랍니다. */
- /* -------------------------------------------------------------------------- */
- log.info("[REQUEST_PAYMENT] res_cd : " + res_cd);
- EasypayPaymentResponse easyResult = new EasypayPaymentResponse();
- easyResult.setRes_cd(res_cd);
- easyResult.setRes_msg(res_msg);
- easyResult.setCno(r_cno);
- easyResult.setAmount(r_amount);
- easyResult.setOrder_no(r_order_no);
- easyResult.setAuth_no(r_auth_no);
- easyResult.setTran_date(r_tran_date);
- easyResult.setEscrow_yn(r_escrow_yn);
- easyResult.setComplex_yn(r_complex_yn);
- easyResult.setStat_cd(r_stat_cd);
- easyResult.setStat_msg(r_stat_msg);
- easyResult.setPay_type(r_pay_type);
- easyResult.setMall_id(r_mall_id);
- easyResult.setCard_no(r_card_no);
- easyResult.setIssuer_cd(r_issuer_cd);
- easyResult.setIssuer_nm(r_issuer_nm);
- easyResult.setAcquirer_cd(r_acquirer_cd);
- easyResult.setAcquirer_nm(r_acquirer_nm);
- easyResult.setInstall_period(r_install_period);
- easyResult.setNoint(r_noint);
- easyResult.setPart_cancel_yn(r_part_cancel_yn);
- easyResult.setCard_gubun(r_card_gubun);
- easyResult.setCard_biz_gubun(r_card_biz_gubun);
- easyResult.setCpon_flag(r_cpon_flag);
- easyResult.setBank_cd(r_bank_cd);
- easyResult.setBank_nm(r_bank_nm);
- easyResult.setAccount_no(r_account_no);
- easyResult.setDeposit_nm(r_deposit_nm);
- easyResult.setExpire_date(r_expire_date);
- easyResult.setCash_res_cd(r_cash_res_cd);
- easyResult.setCash_res_msg(r_cash_res_msg);
- easyResult.setCash_auth_no(r_cash_auth_no);
- easyResult.setCash_tran_date(r_cash_tran_date);
- easyResult.setCash_issue_type(r_cash_issue_type);
- easyResult.setCash_auth_type(r_cash_auth_type);
- easyResult.setCash_auth_value(r_cash_auth_value);
- easyResult.setAuth_id(r_auth_id);
- easyResult.setBillid(r_billid);
- easyResult.setMobile_no(r_mobile_no);
- easyResult.setMob_ansim_yn(r_mob_ansim_yn);
- easyResult.setArs_no(r_ars_no);
- easyResult.setCp_cd(r_cp_cd);
- easyResult.setCpon_auth_no(r_cpon_auth_no);
- easyResult.setCpon_tran_date(r_cpon_tran_date);
- easyResult.setCpon_no(r_cpon_no);
- easyResult.setRemain_cpon(r_remain_cpon);
- easyResult.setUsed_cpon(r_used_cpon);
- easyResult.setRem_amt(r_rem_amt);
- easyResult.setBk_pay_yn(r_bk_pay_yn);
- easyResult.setCanc_acq_date(r_canc_acq_date);
- easyResult.setCanc_date(r_canc_date);
- easyResult.setRefund_date(r_refund_date);
- if (res_cd.equals("0000")) {
- bDBProc = "true"; // DB처리 성공 시 "true", 실패 시 "false"
- try {
- // TbSaleHeaderModel saleHeader = (TbSaleHeaderModel) SessionUtil.getAttribute(SessionUtil.PAYMENT_CART);
- // saveEasypayResult(easyResult);
- // TODO 결과를 저장한다.
- } catch (Exception e) {
- e.printStackTrace();
- bDBProc = "false";
- }
- if (bDBProc.equals("false")) {
- // 승인요청이 실패 시 아래 실행
- if (TRAN_CD_NOR_PAYMENT.equals(tr_cd)) {
- int easypay_mgr_data_item;
- easyPayClient.easypay_reqdata_init();
- tr_cd = TRAN_CD_NOR_MGR;
- easypay_mgr_data_item = easyPayClient.easypay_item("mgr_data");
- if (!r_escrow_yn.equals("Y")) {
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_txtype", "40");
- } else {
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_txtype", "61");
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_subtype", "ES02");
- }
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "org_cno", r_cno);
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "order_no", order_no);
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "req_ip", request.getRemoteAddr());
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "req_id", "MALL_R_TRANS");
- easyPayClient.easypay_deli_us(easypay_mgr_data_item, "mgr_msg", "DB 처리 실패로 망취소");
- easyPayClient.easypay_run(mall_id, tr_cd, order_no);
- res_cd = easyPayClient.res_cd;
- res_msg = easyPayClient.res_msg;
- r_cno = easyPayClient.easypay_get_res("cno"); // PG거래번호
- r_canc_date = easyPayClient.easypay_get_res("canc_date"); // 취소일시
- }
- }
- }
- return easyResult;
- } catch (GlobalException e) {
- e.getStackTrace();
- throw new GlobalException(e.getSystemMessageCode());
- } catch (Exception e) {
- e.getStackTrace();
- throw new RuntimeException();
- }
- }
- }
|