토스페이먼츠 테스트 파라미터로 전송하지 못하는 문제를 우회하는 방식으로 해결

박철현·2023년 7월 2일
0

문제해결

목록 보기
7/17

에러 : 파라미터를 찾을 수 없음

  • 컨트롤러단에서 이용권과 결제 금액 검증을 하려 했는데, 파라미터가 안들어오는 에러가 계속 발생
  • 아무래도 보내는 파라미터는 토스페이먼츠 script 태그로 포함 시킨 자바스크립트 내부 함수에 3개만 정의되어 있는 것 같음(JSon에 값 넣으면 같이 갈 줄..)

  • 심지어 orderName도 못감.. 수정 다했는데 아오

원인 : 토스페이먼츠 가져온 함수에 파라미터 3개만 보내는 듯함..?

  • orderName도 파라미터로 안가고 JSON 결과값으로 받는거 보니 못받는듯..
  • 지피티와 오랜 대화 끝에 토스페이먼츠 JSon 정의된거 아니면 얘가 알지 못하니 무시될 수 있다함

해결책 : 파라미터로 전달되는 orderId에 속성값을 집어 넣고 컨트롤러에서 파싱

  • 원초적 방법일 수도 있지만.. 진짜 계속 찾아봐도 없어서.. 이게 최선인듯..
  • 혹시 어떤 방법이 있다면 알려주세요..

  • orderName은 갈 것 같았는데, 파라미터로 못받네요 하하.. orderId로 수정
    • orderId 조건 : 6~64자 이하 문자열
    • Math.random 최대 17자정도라해서, 손으로 세가며 아 안넘치겠다! 하면서 하고..ㅋㅋ 주말 잘날렸다~
      토스페이먼츠 문서
@Contoroller 메서드
// "orderId":"gym-type-2-36600264572790997_2023-07-12" 이런 형태, -type- 다음 숫자가 이용권 종류
		String[] parts = orderId.split("-type-");
		String[] subParts = parts[1].split("-");
		String ticketNumberStr = subParts[0];
		int ticketType = Integer.parseInt(ticketNumberStr);

		// "orderId":"gym-type-2-36600264572790997_2023-07-12" 이런 형태, 마지막 부분이 시작일자를 나타냄
		String[] parts2 = orderId.split("_");
		String dateString = parts2[1];
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		LocalDate date = LocalDate.parse(dateString, formatter);
		LocalDateTime startDate = LocalDateTime.of(date, LocalTime.MIDNIGHT);

System.out.println("타입 : %d".formatted(ticketType));
		System.out.println("시작일 : %s".formatted(startDate));

잘 나옵니다 하하.. 이제 이거를 활용해서 이용권 타입의 금액과 실제 결제금액과 비교하여 검증 가능!

profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글