아임포트 결제 기능 구현하기(3)_결제 환불 처리하기

이애옹·2023년 12월 8일
0
post-thumbnail
post-custom-banner

이미지 출처 : sjy5386.log_아임포트 일반결제 연동하기

사용자가 결제를 진행 한 뒤에,
관리자가 결제를 환불 처리 할 수 있는 기능도 필요 할 것 같아서 추가!!!

물론 아임포트 관리자 페이지내에서도 결제 취소를 직접 하는것도 가능하지만
버튼 하나만 누르면 해당 결제건이 환불되게 처리 하는것도 가능하다.

📝 결제 버튼 생성 후 처리하기

일단 각 결제 정보를 확인 할 수 있는 페이지 내에 버튼을 생성 해 주고,
해당 버튼을 누르면 이벤트가 진행 되도록 처리 해 뒀다.

 $('#paymentCancelBtn').on('click', function(){

        var params = {};

        params.MEMBER_ID = MEMBER_ID;

        if(confirm('환불 처리를 진행하시겠습니까?')){

             $.ajax({
                url: '/admin/paymentCancel',
                method: 'POST',
                data: params,
                success: function(data){
                    if(data.code == 'S00'){
                        alert('취소가 완료되었습니다.');
                        location.reload(true);
                    }else if(data.code == 'E99'){
                        alert(data.message);
                    }else{
                        alert('오류가 발생하였습니다.');
                    }
                }
            })
        }
    })

paymentCancelBtn 이라는 id의 버튼을 만들어주고,
해당 버튼 클릭 시 /admin/paymentCancel 라는 url로 이동하게 해줬다.

📝 결제 취소 로직 구현하기

const paymentCancel = async (req, res, next) => {
  const result = {};

  try {

      let params = {};

	  params.member_id = req.body.MEMBER_ID;
      
      //MERCHANT_UID값을 조회하기 위한 쿼리
      const paymentData = await oracle.selectPaymentInfo(params);

      var PAYMENT_KEY = paymentData[0].MERCHANT_UID;

      let cancelData = {};

	  cancelData.merchant_uid = PAYMENT_KEY;

	  // 인증 토큰 발급
      const getToken = await axios({
          url: 'https://api.iamport.kr/users/getToken',
          method: 'post',
          headers: {"Content-Type": "application/json"},
          data: {
            imp_key: imp_key 값,
            imp_secret: imp_secret 값
          }
      });

      const { access_token } = getToken.data.response;

	  // 결제 취소 진행
      let cancelResult = await axios({
          url: 'https://api.iamport.kr/payments/cancel',
          method: 'post',
          headers: { "Authorization": access_token },
          data: cancelData
      });

      if(cancelResult.data.code == 0){    // 취소 성공
          result.code = 'S00';
          result.message = '정상';
      }else{  // 취소 실패
          result.code = 'E99';
          result.message = cancelResult.data.message; // 실패 사유
      }

      
      return res.send(result); 
  } catch (e) {
    console.error(e);
    sendError(e);
    return next(e);
  }
};

결제 취소 구현 코드는 다음과 같다.

로직은 고유 결제 키 가져오기 -> 인증 토큰 발급 -> 결제 취소 진행로 보면 된다!!!

일단 사용자의 고유 결제키를 가져와야 해당 키로 환불을 진행 할 수 있기 때문에,
DB에서 merchant_uid값을 가져와줬다.

그리고 getToken을 통해 인증 토큰을 가져와 준 후,
인증 토큰값과 고유 결제키를 이용해서 결제 취소 로직인 cancelResult을 타도록 해 주면 된다.

여기서 cancelResult.data.code 가 0으로 떨어질 경우 결제 취소가 성공한거다 🧐

위 코드를 응용하면 꼭 관리자가 취소를 해 주는 것이 아닌,
사용자가 직접 환불 신청을 진행하는 기능도 구현이 가능 할 것 같다.

난 필요 없으니 패스 ~~~

profile
안녕하세요
post-custom-banner

0개의 댓글