포인트 기능 넣기 2 카카오페이 api로 포인트 충전

포인트 적립 뿐만 아니라 충전할 수 있는 기능도 넣고 싶다.

해야 할 일
1. 아임포트 가입 후 키 발급받기

  1. jsp에서 사용하기
<script type="text/javascript" src="https://cdn.iamport.kr/js/iamport.payment-1.1.5.js"></script>

<script>
  var IMP = window.IMP; 
  IMP.init('imp45182196'); // 아임포트 가맹점 식별코드
    function requestPay1() {
      // IMP.request_pay(param, callback) 결제창 호출
      IMP.request_pay({ // param
          pg: "kakao",
          pay_method: "card",
          merchant_uid: 'merchant_' + new Date().getTime(),
          name: "포인트 충전",
          amount: 1000,
          buyer_email: "[email protected]",
          buyer_name: "박씨",
      }, function (rsp) { // callback
          if (rsp.success) {
        	  var msg = '결제가 완료되었습니다.';
        	  updatePoint1.submit();
              //결제가 완료되면 처리될 함수
          } else {
        	  var msg = '결제에 실패하였습니다.';  
          }
      alert(msg);
      });
    }
</script>

<body>
<div class="btn-group" >
<form action="/member/pointCharge1" method="post" name="updatePoint1">
<input type="hidden" name="m_id"  value="${sessionScope.loginId}"> 
<input type="hidden" name="m_point" value="1000">
<button class="btn btn-outline-danger" type="button" onclick="requestPay1()"> 1000p 충전</button>
</form>
</body>

여기서 계속 오류가 나서 애가 먹었다.
그 이유는 내 가맹점 식별 코드 ('imp45182196')를
(' imp45182196 ')이렇게 썼기 때문에... 띄어쓰기 같은건 절대로 하지말자!

  1. controller
@RequestMapping(value = "pointCharge1", method = RequestMethod.POST)
	public String pointCharge1(@RequestParam ("m_id") String m_id, @RequestParam ("m_point") int m_point) {	
		System.out.println(m_id +"어디갔니?"+m_point);
		ms.pointCharge(m_id,m_point); 
		return "redirect:/member/pointView?m_id="+m_id;
	}
  1. service Impl
@Override
	public void pointCharge(String m_id, int m_point) {
		mr.pointCharge(m_id,m_point);
		mr.memberPointCharge(m_id,m_point,"포인트 충전");
	}
   
  1. repository
// 회원 포인트 저장
public void pointCharge(String m_id, int m_point) {
  Map<String, Object> map = new HashMap<String, Object>();
    map.put("m_id", m_id);
    map.put("m_point", m_point);
      sql.update ("Member.pointCharge",map);
		}
	
//이력 저장
public void memberPointCharge(String m_id, int p_point, String p_type) {
  Map<String, Object> map = new HashMap<String, Object>();
    map.put("m_id", m_id);
    map.put("p_point", p_point);
    map.put("p_type", p_type);
      sql.insert("point.pointSave", map);
		    }

6.mapper : 포인트 적립과 똑같음

해보고 아쉬운 점 - 함수 이름이 구분이 잘 안가게 지어버림, ajax를 더 익혀 1000p 5000p 10000p로 amount가 바뀌어도 한 함수로 할 수 있도록 코드를 줄이고 싶음.(지금은 값을 아예 넣어버림ㅠ) 구매자 이메일, 이름도 받아오도록 수정해야함

좋은 웹페이지 즐겨찾기