결제 취소 요청을 빠르게 연달아 보내면 FORBIDDEN_CONSECUTIVE_REQUEST 에러 발생
같은
paymentKey
에 대해 결제 취소 요청을 빠르게 연달아 보내면 FORBIDDEN_CONSECUTIVE_REQUEST
에러가 발생합니다. 예를들어 10,000
원 결제건에 3,000
원 취소, 7,000
원 취소 요청을 거의 동시에 보내면 에러가 발생합니다. 혹시나 해서 멱등키를 사용해봤지만 결과는 같았습니다. 일단은 두 취소 요청 사이에 1초의 딜레이를 주었더니 정상적으로 처리되었는데요, 혹시 더 나은 해결 방법이 있을까요?9 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
동시에 취소요청하시는 특별한 이유가 있으실까요?
어뷰징이나 데이터 중복처리를 방지하기 위해 1초이상 텀을 주고 발송해주셔야합니다.
추가 설명 드리자면 3000원 취소가 진행되고 있는중에 7000원을 취소 하는 경우 상황에 따라 7천원이 먼저 취소 되는 경우가 있을수 있습니다. 그래서 이부분을 막고자 취소 요청이나 조회 요청시에 1초동안 lock 이 걸리고 lock 걸린 주문에 대해 조회, 취소 등을 요청할시에 FORBIDDEN_CONSECUTIVE_REQUEST 이 에러가 응답됩니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
저희 시스템이 일반적인 쇼핑몰 처럼 한 번의 결제로 여러 개의 상품을 구매할 수 있게 되어 있습니다. 또 각각의 상품별로 부분 취소가 가능해야 하는데요. 어드민 페이지에서 각 상품을 체크박스로 선택해서 여러개의 상품을 한 번에 취소하려고 할 때, 각각의 상품을 살펴보고 같은 결제건에 묶인 것인지 확인해서 취소요청을 보내기에는 번거롭기도 하고 error-prone 인것 같아서 그냥 개별로 취소요청을 보내는 것으로 결정했습니다.
그런데 각 취소요청을 Node.js 환경에서
await
로 기다리면서 순차적으로 처리하려고 해도 FORBIDDEN_CONSECUTIVE_REQUEST
에러가 발생합니다. 그래서 하는 수 없이 1초의 딜레이를 주었던 것입니다.
문제는 이 에러가 한 번 발생하면 한참 기다린 후에 다시 취소 요청을 보내도 계속 같은 에러를 발생시킨다는 것입니다. 그렇다면 1초의 딜레이를 주는 것으로 충분한 걸까요? 몇초를 기다려야 이 에러가 발생하지 않는 것이 보장될까요?1초이상으로 딜레이를 주시면됩니다. 다만 해당 lock 은 취소 API 와 조회 API 에 공통으로 적용됩니다.
그래서 취소 -> 조회 -> 취소 순으로 한다면 그 사이사이에 1초 딜레이를 주셔야 합니다.
아하 그러면 일단 1.x 초 딜레이를 주면 안전하겠군요. 늦은 시간에 답변 감사합니다. 혹시 이 내용을 개발자센터에서 확인할 수 있는 페이지가 있을까요?
현재는 별도로 없습니다!
네 정말 감사합니다아~ 😆