프로젝트 코드리뷰/Travel Maker

Travel Maker - 결제API (PortOne)

SooHw 2023. 8. 25. 09:32
<form action="Paytest.jsp">

    <!-- 모달창 -->
    <div id="popupModal" style="display: none;">
        <div id="modalBody">
            <span id="closeBtn">&times;</span>
            <!-- 모달창안 -->

            <div class="div_modal">
                <h1>Add cash💵</h1>
                <br>
                <p>
                    <input type="radio" name="charge" value="5000" onclick="hideCustomInput()"> 5000원
                </p>
                <p>
                    <input type="radio" name="charge" value="10000" onclick="hideCustomInput()"> 10000원
                </p>
                <p>
                    <input type="radio" name="charge" value="30000" onclick="hideCustomInput()"> 30000원
                </p>
                <p>
                    <input type="radio" name="charge" value="50000" onclick="hideCustomInput()"> 50000원
                </p>
                <input type="radio" name="charge" id="customInputRadio" onclick="showCustomInput()"> 직접입력
                <!-- 숨겨진 직접입력 값 입력 공간 -->
                <input type="number" id="customInput" style="display: none;">
                <!-- 값을 보내는 버튼 -->
                <div class="modal_btn">
                    <input type="button" value="선택완료" onclick="sendChargeValue()" class="cash_input">
                </div>
            </div>
        </div>
    </div>
</form>

 

 

Paytest.jsp

<body>

    <% 
    int charge=Integer.parseInt(request.getParameter("charge")); 
    UserDTO udto=(UserDTO) session.getAttribute("info");
    String user_id=udto.getUser_id(); 
    String user_name=udto.getUser_name(); 
    String merchant_uid=UUID.randomUUID().toString(); 
    %>


        <button id="iamportPayment" type="button">결제하기</button>

        <!-- <script src="js/PaymentAPI.js"></script> -->
        <script>
            //문서가 준비되면 제일 먼저 실행
            $(document).ready(function () {
                $("#iamportPayment").click(function () {
                    payment(); //버튼 클릭하면 호출 
                });
            })

            //버튼 클릭하면 실행
            function payment(data) {
                IMP.init('imp**');//아임포트 관리자 콘솔에서 확인한 '가맹점 식별코드' 입력
                IMP.request_pay({// param
                    pg: "kakaopay.TC0ONETIME", //pg사명 or pg사명.CID (잘못 입력할 경우, 기본 PG사가 띄워짐)
                    pay_method: "card", //지불 방법
                    merchant_uid: "<%=merchant_uid%>", //가맹점 주문번호 (아임포트를 사용하는 가맹점에서 중복되지 않은 임의의 문자열을 입력)
                    name: "여행을 만들다", //결제창에 노출될 상품명
                    amount: <%=charge%>, //금액
                    buyer_id : "<%=user_id%>",
                    buyer_name : "<%=user_name%>"
			},
            function(rsp) { // callback
                if (rsp.success) {
                    alert("완료 -> imp_uid : " + rsp.imp_uid + " / merchant_uid(orderKey) : " + rsp.merchant_uid);
                    window.location.href = "PayCon.do?charge=<%=charge%>&user_id=<%=user_id%>";
                } else {
                    alert("실패 메세지");
                }
            });
		}
        </script>
</body>

 

 

PayCon

package controller;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import command.Command;
import model.CashDTO;
import model.UserDAO;
import model.UserDTO;

@WebServlet("/PayCon")
public class PayCon implements Command {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("페이콘 진입");

		String user_id = request.getParameter("user_id");

		UserDAO udao = new UserDAO();
		UserDTO user_info = udao.userInfo(user_id);

		int cash = user_info.getUser_cash();

		int charge = Integer.parseInt(request.getParameter("charge")) + cash;
		System.out.println("충전된 금액 : " + charge);

		int row = udao.chargeCash(new CashDTO(user_id, charge));
		String moveURL;
		
		if (row > 0) {
			System.out.println("입금성공");
			moveURL = "MyPage_normal.jsp";
		}else {
			System.out.println("입금실패");
			moveURL = "Mypage_normal.jsp";
		}
		
		UserDTO info = udao.userInfo(user_id);
		HttpSession session = request.getSession();
		session.setAttribute("info", info);
		
		

		return moveURL;
	}

}

 

 

DAO, Mapper

public int chargeCash(CashDTO cdto) {
	SqlSession session = sqlSessionFactory.openSession(true);
	int row = session.update("chargeCash", cdto);
	session.close();
	
	return row;
}


<update id="chargeCash" parameterType="CashDTO" >
	update user_info set user_cash = #{charge} where user_id = #{user_id}
</update>