[이슈해결] KakaoPay API 사용시 쿠키값의 증발..!

MinSeong Kang·2022년 9월 20일
0

이슈해결

목록 보기
8/12


카카오 페이 API 사용 시, 쿠키값이 사라져 다음과 에러를 마주했다.!!!

프로젝트 개발시, 사용자의 닉네임은 쿠키와 세션을 통해 관리된다.

UUID uuid = UUID.randomUUID();
Cookie cookie = new Cookie("customerLogin", uuid.toString());
response.addCookie(cookie);

HttpSession session = request.getSession(true);
session.setAttribute(uuid.toString(), customerCreateForm.getNickname());

다음과 같이 손님이 닉네임을 입력하였을 때, 쿠키에 customerLogin : uuid값으로 저장하고 세션에는 uuid값 : 사용자의 닉네임을 저장한다. 따라서 쿠키에 있는 값을 가져와 세션에 조회를 하면, 사용자의 닉네임을 모든 controller에서 가져올 수 있으며, 인증 유지를 시킬 수 있었다.

@GetMapping("/{storeSN}/cart")
public String showCart(@PathVariable String storeSN, Model model,
                       HttpServletRequest request, @CookieValue("customerLogin") String customerKey) {

    HttpSession session = request.getSession(true);
    String userNickname = session.getAttribute(customerKey).toString();
 	...   
}

다음은 쿠키값을 통해 사용자의 닉네임을 가져오는 예시이다.


이번에 간편 결제 서비스를 도입하기 위해서 카카오 페이의 API를 사용하였다.
아래와 같이 쿠키값을 유지하다가 결제 페이지로 갔을 때 쿠키값이 사라지는 경우가 나타났다. 따라서 결제 이후 사용자의 닉네임을 알 수 없어 이후 다른 사용자의 작업을 할 수 없었다.

따라서 다음과 같이 @PathVariable을 사용하여 다음과 같은 문제를 해결하였다.
현재 결제 페이지에서 Order 엔티티로 작업을 하고 있기 때문에, Order 엔티티 내에 저장되어 있는 사용자의 닉네임을 통해 이후 사용자의 작업을 수행시킬 수 있었다.

@GetMapping("/kakaopay/{orderId}")
public String kakaoPay(@PathVariable Long orderId) {

    return "redirect:" + kaKaoPayService.kakaoPayReady(orderId);
}

@GetMapping("/kakaoPaySuccess/{orderId}")
public String kakaoPaySuccess(@RequestParam("pg_token") String pg_token, Model model,
                              @PathVariable Long orderId) {

    Order order = orderService.findOrderById(orderId);
    cartService.changeIsOrdered(order);

    KakaoPaySuccessDto kakaoPaySuccessDto = orderService.getKakaoPaySuccessDto(order);
    model.addAttribute("kakaoPaySuccessDto", kakaoPaySuccessDto);
    return "pay/kakaoPaySuccess";
}

0개의 댓글