ソースを参照

이태영 - 20210422 현금영수증 API 송부 개발 중

xodud1202 5 年 前
コミット
b92353cdea

+ 78 - 1
src/main/java/com/style24/front/biz/service/TsfOrderService.java

@@ -9,10 +9,12 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.StringUtils;
 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 com.gagaframework.web.parameter.GagaMap;
+import com.kcp.J_PP_CLI_N;
 import com.style24.core.biz.dao.TscOrderDao;
 import com.style24.core.biz.service.TscKakaoPayService;
 import com.style24.core.biz.service.TscKcpService;
@@ -22,6 +24,7 @@ import com.style24.front.biz.dao.TsfOrderDao;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.KakaoPay;
 import com.style24.persistence.domain.NaverPay;
 import com.style24.persistence.domain.Order;
@@ -60,6 +63,9 @@ public class TsfOrderService {
 	@Autowired
 	private TsfCartService cartService;
 
+	@Autowired
+	private Environment env;
+
 	/**
 	 * 마이페이지 주문 정보 조회
 	 *
@@ -605,5 +611,76 @@ public class TsfOrderService {
 		return resultStr;
 		
 	}
-	
+
+	/**
+	 * KCP 현금영수증 신청
+	 * param.setTradeTime("20210422200347");	// 결제시각 : YYYYMMDDHH24MISS 형식
+	 * param.setOrdPhnno("01011111111");		// 현금영수증 대상 휴대폰번호
+	 * param.setUsGfcdAmt(10000);				// 현금영수증 신청 금액
+	 * param.setOrdNo(211);						// 주문번호
+	 * param.setGoodsNm("보라색 원피스");		// 상품명 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 상품명을 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+	 * param.setOrdNm("구매자");				// 구매자명
+	 * param.setOrdEmail("xxxx@xxxx.com");		// 구매자이메일 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 메일주소를 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+	 * @param param
+	 * @return
+	 */
+	public GiftCard kcpCashReceiptsRequest(GiftCard param) {
+		GiftCard result = new GiftCard();
+		String cust_ip = TsfSession.getInfo().getIpAddr();
+		String reqTx = "pay";		// 현금영수증 신청
+		String txCd = "07010000";	// 현금영수증 등록 요청
+		String ordPhnno = "";
+		if(!StringUtils.isEmpty(param.getOrdPhnno())) {
+			ordPhnno = param.getOrdPhnno().replaceAll("-", "");
+		}
+
+		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 rcpt_data_set   = c_PayPlus.mf_add_set( "rcpt_data" ) ;
+		int ordr_data_set   = c_PayPlus.mf_add_set( "ordr_data" ) ;
+		int corp_data_set   = c_PayPlus.mf_add_set( "corp_data" ) ;
+
+		// 현금영수증 정보
+		c_PayPlus.mf_set_us( rcpt_data_set, "user_type", "PG01") ;
+		c_PayPlus.mf_set_us( rcpt_data_set, "trad_time", param.getTradeTime()) ;
+		c_PayPlus.mf_set_us( rcpt_data_set, "tr_code"  , "0") ;							// 0 : 소득공제용(개인), 1 : 지출증빙용(기업)
+		c_PayPlus.mf_set_us( rcpt_data_set, "id_info"  , ordPhnno) ;							// 발급 대상이 개인인 경우에는 주민번호, 휴대폰번호,현금영수증 카드를 세팅하며, 기업인 경우에는 대상 사업자 번호를 입력. 자진발급으로 등록 시, “0100001234” 으로 입력.
+		c_PayPlus.mf_set_us( rcpt_data_set, "amt_tot"  , param.getUsGfcdAmt() + "") ;	// 현금영수증 금액 (공급가액 + 부가가치세 + 봉사료)
+		//c_PayPlus.mf_set_us( rcpt_data_set, "amt_sup"  , amt_sup   ) ;		// 공급가액
+		//c_PayPlus.mf_set_us( rcpt_data_set, "amt_svc"  , amt_svc   ) ;		// 봉사료
+		//c_PayPlus.mf_set_us( rcpt_data_set, "amt_tax"  , amt_tax   ) ;		// 부가가치세 (공급가액의 10%)
+		c_PayPlus.mf_set_us( rcpt_data_set, "pay_type" , "PAXX") ;		// 무슨 값인지 알 수 없음.
+
+		// 주문 정보
+		c_PayPlus.mf_set_us( ordr_data_set, "ordr_idxx", param.getOrdNo() + "") ;		// 주문번호
+		c_PayPlus.mf_set_us( ordr_data_set, "good_name", param.getGoodsNm());				// 상품명
+		c_PayPlus.mf_set_us( ordr_data_set, "buyr_name", param.getOrdNm());
+		c_PayPlus.mf_set_us( ordr_data_set, "buyr_tel1", ordPhnno);
+		c_PayPlus.mf_set_us( ordr_data_set, "buyr_mail", param.getOrdEmail());
+		// c_PayPlus.mf_set_us( ordr_data_set, "comment"  , comment);		// 비고 (ex - 여유 파라미터)
+
+		// 가맹점 정보
+		c_PayPlus.mf_set_us( corp_data_set, "corp_type", "0");		// 사업장 구분 (직접 판매 : 0, 입점몰 판매 : 1)
+
+		// 실행
+		c_PayPlus.mf_do_tx(env.getProperty("pg.kcp.site.cd"), "", txCd, cust_ip, param.getOrdNo() + "", env.getProperty("pg.kcp.log.dir"), "0");
+
+		// 결과
+		result.setResultCd(c_PayPlus.m_res_cd);
+		result.setResultMsg(c_PayPlus.m_res_msg);
+		result.setOrdNo(param.getOrdNo());
+		result.setUsGfcdAmt(param.getUsGfcdAmt());
+		if("0000".equals(result.getResultCd())) {
+			result.setTradeNo(c_PayPlus.mf_get_res("cash_no"));
+			result.setAuthNo(c_PayPlus.mf_get_res("receipt_no"));
+
+			// 성공시 TB_GIFTCARD_RECEIPT INSERT
+		}
+
+		// 성공이든 실패이든 로그성 데이터 TB_GIFTCARD_RECEIPT_API INSERT
+
+		return result;
+	}
 }

+ 16 - 0
src/main/java/com/style24/front/biz/web/TsfCartController.java

@@ -30,10 +30,12 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.util.CryptoUtils;
 import com.style24.front.biz.service.TsfCartService;
 import com.style24.front.biz.service.TsfCouponService;
+import com.style24.front.biz.service.TsfOrderService;
 import com.style24.front.support.controller.TsfBaseController;
 import com.style24.front.support.security.session.TsfSession;
 import com.style24.persistence.domain.Cart;
 import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.GiftCard;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.Login;
 import com.style24.persistence.domain.Order;
@@ -65,6 +67,9 @@ public class TsfCartController extends TsfBaseController {
 	@Autowired
 	private TscOrderService coreOrderService;
 
+	@Autowired
+	private TsfOrderService orderService;
+
 	@Autowired
 	private Environment env;
 
@@ -148,6 +153,17 @@ public class TsfCartController extends TsfBaseController {
 		model.addAttribute("loginInfo", TsfSession.getInfo());
 		model.addAttribute("order", order);
 		model.addAttribute("IMG_PATH", env.getProperty("upload.goods.view"));
+
+		GiftCard temp = new GiftCard();
+		temp.setTradeTime("20210422200347");	// 결제시각 : YYYYMMDDHH24MISS 형식
+		temp.setOrdPhnno("01011111111");		// 현금영수증 대상 휴대폰번호
+		temp.setUsGfcdAmt(10000);				// 현금영수증 신청 금액
+		temp.setOrdNo(211);						// 주문번호
+		temp.setGoodsNm("보라색 원피스");		// 상품명 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 상품명을 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+		temp.setOrdNm("구매자");				// 구매자명
+		temp.setOrdEmail("xxxx@xxxx.com");		// 구매자이메일 (“7. 현금영수증 매출전표 연동” 을 통해 고객이 직접 전표를 확인코자 한다면 메일주소를 넘겨주지 않았을 경우 구매자 인증 시 인증오류가 발생할 수 있습니다.)
+		orderService.kcpCashReceiptsRequest(temp);
+
 		return super.getDeviceViewName("cart/CartListAjaxForm");
 	}
 

+ 1 - 1
src/main/resources/config/application-run.yml

@@ -64,7 +64,7 @@ mail:
 # PG
 pg:
     kcp:
-        log.dir: /WIDE/workspace/files/data/style24/logs/front
+        log.dir: E:/Run/Payplus
         gw:
             url: paygw.kcp.co.kr
             port: 8090