everyday com-eat
카테고리
작성일
2022. 5. 8. 22:38
작성자
갱수터
728x90

결제는 사업자등록번호가 있어야 구현 할 수 있어서

import를 이용한 test 결제로 그냥 성공/실패 시 db에 등록되게 구현할려고 한다

 

결과

 

 

1. view단 javascript 작성

결제 완료시 데이터를 ajax로 보낼 수도 있고, 나 같은 경우는 form 데이터로 보냈다.
/*아임포트 카카오페이 결제*/
$('#paymentBtn').click(function () {
      var IMP = window.IMP;
      IMP.init('아임포트 본인 가맹점식별코드');
      
      //DOM객체들에서 사용할 데이터 뽑기
      var paymentGoods = $('input[name="paymentOrderName"]').val();
      var money = $('.totalprice').text();
      var memberName = $('input[name="memberName"]').val();
      var memberEmail = $('input[name="memberEmail"]').val();
      var memberPhone = $('input[name="memberPhone"]').val();
      
      var len = memberEmail.indexOf("@");
      var memberId = memberEmail.substr(0, len);
	  

      IMP.request_pay({
      	  //카카오페이 결제시 사용할 정보 입력
          pg: 'card',
          paymentCode: 'p' + new Date().getTime()+'_'+memberId,
          name: paymentGoods,
          amount: money,
          buyer_email: memberEmail,
          buyer_name: memberName,
          buyer_tel: memberPhone,
      }, function (rsp) {
      	  //결제 완료시
          if (rsp.success) {
              var msg = '결제가 완료되었습니다.';
              msg += '카드 승인번호 : ' + rsp.apply_num;
              
              /* 
              만약 데이터들을 ajax로 보낼 시 사용할 코드
              $.ajax({
                  type: "GET", 
                  url: "/mypage/mypaymentList/paymentDetail", 
                  data: {
                      "amount" : money
                  },
              });
              */
              
              $('#paymentForm').submit();
              
          } else {
          	  //결제 실패시
              var msg = '결제에 실패하였습니다.';
              msg += '에러내용 : ' + rsp.error_msg;
            
              if($('input[name="eClassApprovedSetDate"]').length){
            document.location.href="/mypage/mySignUpForClassList"; //alert창 확인 후 이동할 url 설정
              }else {
            document.location.href="/challenge/challengeGather/challengeGatherList"; //alert창 확인 후 이동할 url 설정
              }
          }
          alert(msg);
      });
  });

 

 

2. 결제 mapper 인터페이스 및 xml 쿼리 작성

//결제처리
public void addPayment(Payment payment);

mapper.java

 

<resultMap type="paymentMethod" id="paymentMethodResultMap">
	<id 	column="paymentMethodCode" 		property="paymentMethodCode"/>
	<result column="paymentMethodName" 		property="paymentMethodName"/>
	<result column="paymentMethodRegDate" 	property="paymentMethodRegDate"/>
	<collection property="member" 			resultMap="memberResultMap"></collection>
</resultMap>

<resultMap type="payment" id="paymentResultMap">
	<id 	column="paymentCode" 			property="paymentCode"/>
	<result column="paymentGroupCode" 		property="paymentGroupCode"/>
	<result column="paymentTotalOrderPrice" property="paymentTotalOrderPrice"/>
	<result column="paymentUsePoint" 		property="paymentUsePoint"/>
	<result column="paymentTotalPayPrice" 	property="paymentTotalPayPrice"/>
	<result column="paymentState" 			property="paymentState"/>
	<result column="paymentRegDate" 		property="paymentRegDate"/>
	<collection property="member" 			resultMap="memberResultMap"></collection>
	<collection property="paymentMethod"	resultMap="paymentMethodResultMap"></collection>
</resultMap>

<insert id="addPayment" parameterType="Payment">
	INSERT INTO payment
		( 
		  paymentCode
		, paymentGroupCode
		, memberEmail
		, paymentMethodCode
		, paymentMethodName
		, paymentTotalOrderPrice
		, paymentUsePoint
		, paymentTotalPayPrice
		, paymentState
		, paymentRegDate)
		VALUES (
		  #{paymentCode}
		, #{paymentGroupCode}
		, #{memberEmail}
		, #{paymentMethodCode}
		, #{paymentMethodName}
		, #{paymentTotalOrderPrice}
		, #{paymentUsePoint}
		, #{paymentTotalPayPrice}
		, '결제완료'
		, NOW());
</insert>

mapper.xml

 

 

3. 결제 service 작성

//결제처리
public int addPayment(Payment payment) {
	
    
	int len = payment.getMemberEmail().indexOf("@");
	String memberId = payment.getMemberEmail().substring(0, len);
	SimpleDateFormat date = new SimpleDateFormat("yyyyMMddhhmmss");
	String paymentCode = "p"+date.format(new Date())+"_"+memberId;
    
	String paymentMethodCode = paymentMapper.getPaymentMethodCode(payment.getPaymentMethodName());
	
	payment.setPaymentCode(paymentCode);
	payment.setPaymentMethodCode(paymentMethodCode);
	
	paymentMapper.addPayment(payment);
	
	return 1;
}

 

 

 

4. 결제 controller 작성

//결제처리
@PostMapping("/payment")
public String payment(Model model, Payment payment, RedirectAttributes reAttr
						,ChallengeGatherPlanDo challengeGatherPlanDo) {
	
	model.addAttribute("title", "결제");
	String paymentGroupCode =payment.getPaymentGroupCode();
	
	int result = paymentService.addPayment(payment);
	if(result == 1 && paymentGroupCode.startsWith("c") == true ) {
    	//결제 성공시 챌린지 플랜 insert 처리
		challengeEnterService.challengeGatherPlanDoInsert(challengeGatherPlanDo);
	}
    	//결제 실패시 챌린지 참여 테이블 delete 처리 필요
	
	reAttr.addAttribute("paymentCode", payment.getPaymentCode());
	
	return "redirect:/mypage/mypaymentList/paymentDetail";
}