가상계좌 결제 시 웹훅 문의
가상 계좌에서 금액이 입금되어 상태가 DONE 이 된 상태에서도 PAYMENT_STATUS_CHANGED 가 호출되는데,
DEPOSIT_CALLBACK 웹훅을 사용해야 하는 이유가 있을까요?
그리고 보통 결제 구현을 할때, 어떤 방식이 일반적일까요?
1. 웹훅에서 변경된 결제 상태를 받아서 내부의 상태를 변경
2. 매번 조회 API 를 호출해서 결제 상태 변경을 확인하고 내부의 상태를 변경
25 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
다른결제 수단과 달리 가상계좌는 결제 상태가 2단계로 나뉘기 때문입니다.
가상계좌 발급과 입금완료 상태가 있는데, 고객이 입금 후 상점에서 바로 뭔가 처리를 하기위해 웹훅 수신을 받아야 합니다.
그래서 가상계좌는 웹훅이 별도로 있는 것입니다.
가상계좌는 웹훅을 받는게 일반적이며, 다른 결제수단은 결제 완료 후 응답값을 사용하셔도 됩니다.
이외에는 가맹점 로직에 맞게 웹훅 사용해주시면 됩니다.
그리고 거래대사와 정산대사를 이용하여 가맹점과 토스페이먼츠간 결제 정합성을 맞춰주시면 됩니다.
그럼
보통 결제 구현을 할때, 어떤 방식이 일반적일까요?
1. 웹훅에서 변경된 결제 상태를 받아서 내부의 상태를 변경
2. 매번 조회 API 를 호출해서 결제 상태 변경을 확인하고 내부의 상태를 변경
이 질문에서는 둘다 일반적으로 사용되는 로직 흐름일까요?
1번이 일반적인 로직입니다.
넵 감사합니다~!
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
다시 로직을 보다보니 아직 이해가 완벽히 덜 된거 같아서 다시 문의 남깁니다.
가상 계좌에서 금액이 입금되어 상태가 DONE 이 된 상태에서도 PAYMENT_STATUS_CHANGED 가 호출되는데,
DEPOSIT_CALLBACK 웹훅을 사용해야 하는 이유가 있을까요?
PAYMENT_STATUS_CHANGED 웹훅을 사용하고 있으면 DEPOSIT_CALLBACK 웹훅을 사용하지 않아도 될거 같아서요.
secret 으로 정합성을 맞추기 위해서 인가요?
PAYMENT_STATUS_CHANGED 는 모든 결제수단에 대한 결제상태 변경 이벤트를 받는 용도이고,
DEPOSIT_CALLBACK 은 가상계좌 관련 상태를 받게 됩니다.
가맹점에 따라 모든 결제수단의 웹훅을 원하는 곳도 있지만 그렇지 않은 경우도 있습니다.
그러면 PAYMENT_STATUS_CHANGED 하나만 사용하고, 구지 DEPOSIT_CALLBACK 에서 오는 secret 정합성은 안맞춰도 되나요?
가상계좌는 따로 구분이 되어 있는 이유는 가상계좌 입금 취소가 있기 때문에 가상계좌 콜백을 사용해주세요.
가상계좌 입금 취소는 어떨때 호출이 되는건가요?
가상계좌 입금 취소 API 를 호출 했을 경우 콜백이 오는건가요?
아 위에서 말씀 드린 입금취소 는 가맹점에서 취소 요청에 대한 응답을 의미하는 것은 아니고요.
구매자가 정상적으로 할당된 계좌에 입금을 처리하였지만 은행에서 사용자의 계좌 이슈로 인해 입금 후 다시 입금취소를 하는 경우에 해당합니다.
이 경우에는 은행에서 입금을 취소처리 하기 때문에 결제가 완료되지 않은것으로 판단해 주시면 됩니다.
아.. 그 경우가 DONE 이었다가 WAITING_FOR_DEPOSIT 으로 되서 입금 오류가 되는 케이스 인가요?
네 은행에서 망취소하는 것이라고 보시면 됩니다. 아래와 같이 상태가 바뀌게 됩니다.
WAITING_FOR_DEPOSIT -> DONE -> WAITING_FOR_DEPOSIT
다시 입금 대기상태로 돌아가고 사용자가 정상적인 계좌에서 다시 할당계좌에 입금 처리를 하게 되면 DONE 으로 바뀌게 됩니다.
CANCELD 나 PARTIAL_CANCELED 가 정상적인 취소요청으로 취소 완료된 경우의 상태를 의미합니다.
그러면 다시 입금 대기 상태로 돌아갈때 PAYMENT_STATUS_CHANGED 도 같이 호출 되나요?
아니면 저 케이스는 DEPOSIT_CALLBACK 만 호출 되는건가요?
둘다 웹훅이 발생합니다. 원래는 가상계좌 콜백만 존재했는데, 나중에 가맹점들의 니즈가 있어서 PAYMENT_STATUS_CHANGED 가 추가되었습니다.
그러면 그 상황도 구지 DEPOSIT_CALLBACK 을 사용하지 않고 PAYMENT_STATUS_CHANGED 로 받으면 되는건가요?

이 흐름대로 동작하는건 이해 했는데, webhook 이 두가지로 나누어져 있는게 잘 이해가 안되서 계속 질문을 드리는거 같습니다.
deposit_callback 이 오는 상황에서 payment_status_changed 도 동시에 오게끔 되어있다면 구지 deposit_callback 처리를 안해도 될거 같아서요.
그리고 deposit_callback 에 secret 도 무조건 정합성을 맞추는 작업을 진행해야 하나도 궁금하구요.
보통은 가상계좌 때문에 웹훅을 많이 사용하고 있습니다. 가상계좌는 입금완료를 실시간으로 처리하려면 웹훅을 받아야하기 때문입니다. secret 체크는 맞춰주셔야 하구요.
일반적으로 가상계좌 웹훅과 일반 웹훅은 주소를 달리하여 구현합니다.
payment_status_changed 에도 응답이 오니까 입금완료 실시간 처리는 여기서도 되지 않나요?
deposit_callback 을 사용하는 의미가 secret 체크 말고는 없는거 같아서요.
네, payment_status_changed로만 사용하셔도 됩니다.
그럼 deposit_callback 에서 secret 체크를 하지 않으면 발생할만한 문제는 없을까요?
위에 설명드린것 처럼 처음에는 DEPOSIT_CALLBACK 이벤트만 존재했어요. 다른 가맹점들의 니즈를 반영하여 PAYMENT_STATUS_CHANGED 가 추가 되었습니다. PAYMENT_STATUS_CHANGED 가 추가되었다고 해서 기존 사용중인 DEPOSIT_CALLBACK 을 제거할 수는 없습니다.
따라서 payment 객체의 상태 변경 값은 PAYMENT_STATUS_CHANGED 이벤트를 통해 모두 확인이 가능하기 때문에 상태 체크만을 목적으로 하신다면 PAYMENT_STATUS_CHANGED 만 사용하셔도 됩니다.
가상계좌의 웹훅이 정상적인 요청인지 유효성까지 체크하시려는 목적이라면 DEPOSIT_CALLBACK 를 통해 secret 과 orderId, status 를 함께 체크하시면 됩니다.
그래서 일반적으로 가상계좌는 DEPOSIT_CALLBACK 이벤트를 처리하시도록 안내하고 있습니다.
히스토리가 그렇게 되는 거였군요~!
설명해주신 분들 모두 감사합니다~!!