전임자의 success url 에 큰 의문이 있습니다.
전임자가 퇴사하여 인수인계받게 된 코드입니다. 토스 결제 관련 확인할 것이 있어 코드를 살펴보았는데요
프론트단에서 successUrl 호출하면 {{origin}}/success?orderId={ORDER_ID}&paymentKey={PAYMENT_KEY}&amount={AMOUNT} 으로 결제 정보가 들어오는 것까진 확인했습니다.
그 후가 문제인데, successUrl 의 내용이 현재 아래와 같이 개발되어 있습니다(스프링부트 controller 쪽입니다).
(전략)
String encodedAuthHeader = Base64.getEncoder().encodeToString(SECRET_KEY.getBytes());
HttpClient client = HttpClientBuilder.create().build();
HttpPost postRequest = new HttpPost("https://api.tosspayments.com/v1/payments/" + paymentKey); //POST 메소드 URL 생성
postRequest.setHeader("Content-Type", "application/json");
postRequest.addHeader("Authorization", "Basic " + encodedAuthHeader); // token 이용시
postRequest.setEntity(new StringEntity("{"amount":" + amount + ","orderId":"" + orderId + ""}")); //json 메시지 입력
HttpResponse response = client.execute(postRequest);
(후략)
succeessUrl 에서는 v1/payments/confirm 을 호출하여 결제 승인을 내야 한다고 알고 있습니다. 저 API는 get방식일 경우 결제 정보를 받아오는 것이고 post 는 API 문서 상 없는 것 같은데, 지금까지 successUrl 에서 v1/payments/confirm 을 전혀 호출하고 있지 않았음에도 불구하고 결제가 성공적으로 이루어지고 돈까지 정산받았다고 합니다.
이대로 둬도 상관없는 부분인가요, confirm 을 호출해야 하나요. 물론 이대로 두면 안 될 것 같긴 한데, 결제가 지금까지(한 1년 된 것 같습니다) 정상적으로 이루어진 것이 큰 의문입니다.
24 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
mid가 어떻게되세요?
link_classtool 입니다.
링크페이 mid쓰시나요?
기획자가 퇴근해서 확인이 힘든데, 일부 링크를 받아 판매하는 상품도 있고, 저희 페이지 내에서 직접 결제창을 열어서 결제하는 식도 있습니다.
정확히 어떤 걸 확인해 드려야 할까요?
link_classtool이건 링크를 받아 결제하는데 사용되는 mid에요.
말씀하신대로 진짜로 승인API를 호출하지 않았는데 결제가 된건지 로그를 확인해보고자 Mid를 요청드렸습니다.
아래 케이스 주문건의 주문번호(orderId)및 mid전달주시면 확인해볼게요
succeessUrl 에서는 v1/payments/confirm 을 호출하여 결제 승인을 내야 한다고 알고 있습니다. 저 API는 get방식일 경우 결제 정보를 받아오는 것이고 post 는 API 문서 상 없는 것 같은데, 지금까지 successUrl 에서 v1/payments/confirm 을 전혀 호출하고 있지 않았음에도 불구하고 결제가 성공적으로 이루어지고 돈까지 정산받았다고 합니다.
네 확인하였습니다.. 만, 전임자의 환상적인 코딩으로 인하여 운영DB에 단 한건의 리턴 데이터가 쌓이지 않았고, 로그에 남은 orderId 및 개발DB에 있는 mid 정도만 전달드릴 수 있을 것 같습니다.
mId: tlink_classtool
orderId: jhhhh526_1751844713397_Z95S2848, didxpfptk_1751584465697_QFBIQNYS
ㅎㅎ 저희 꽤 오래 사용해오신 것으로 아는데
확인해보고 공유드릴게요
이게 맞는지 모르겠네요.
넵 감사합니다
승인api는 호출하고 계세요
네 확인했습니다.
넵 추가로 확인 필요한거 있음 알려주세요
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
"https://api.tosspayments.com/v1/payments/" + paymentKey"
어제 이거 여쭤보는 걸 깜빡했는데, 이 API는 post 로 날리면 무슨 역할을 하나요?
API 문서상엔 get 방식밖에 없는 것 같습니다.
이게 실질적인 승인요청입니다.
저희 결제는 인증/승인이 분리되어 있습니다. 그래서
* 결제창 내에서 인증이 성공하면 successUrl 로 리다이렉트 . 승인요청을 위한 paymentKey 전달
결제창 내에서 인증이 실패하거나 결제창 내 인증을 중단할경우 => failUrl로 리다이렉트
successUrl에서 응답받은 paymetKey를 가지고 "https://api.tosspayments.com/v1/payments/" + paymentKey" 로 httpClient 를 통한 요청을 올려야 합니다. 이후 요청결과로 승인응답이 JSON으로 수신됩니다.
*
https://docs.tosspayments.com/guides/v2/get-started/payment-flow
여기를 한번 참고하시면 도움이 되실것 같습니다.
결제 흐름 이해하기 | 토스페이먼츠 개발자센터
카드 결제 과정의 세 가지 핵심 단계인 요청, 인증, 승인을 이해하고 결제 정보를 검증하는 방법을 알아보세요.
네 감사합니다
confirm 은 프론트에서 호출하는 것 같아 확인요청 한 상태입니다.
그게 승인 api에여
옛날 스펙입니다.
옛날에 만들어진 코드가 맞습니다
ㅈㅣ금은 paymentKey를 requestBody에 보내는걸로 문서가 있는데
예전엔 getParam에 넣어 post로 보냈어요
https://docs.tosspayments.com/reference#결제-승인 이거랑 동일한거라 보심 됩니다
코어 API | 토스페이먼츠 개발자센터
토스페이먼츠 API 엔드포인트(Endpoint)와 객체 정보, 파라미터, 요청 및 응답 예제를 살펴보세요.
오류가 안 나는 거 보니 아직 옛날 스펙 API가 삭제가 안 됐나 보네요.
삭제 될 가능성이 있겠죠?
없습니다
그런데 나중을 위해서 이번에 수정하실 때 수정해주셔도 좋을 것 같네요
간단한 수정이어서요
네 알겠습니다.