가상계좌 웹훅 문의드리려고합니다.
입금이 완료되어 DONE 상태가 되었을때의 서비스 로직은 완료했습니다.
결제 취소에 대한 로직을 구현하려고하는데,
1. 입금 전 취소
2. 입금 후 취소
이렇게 두가지 경우가 있는 것 같습니다.
입금 전 취소는 다른 결제와 같이 일반적인 상태변화감지 웹훅으로 CANCELED 를 보고 판단하면 될 것 같습니다.
입금 후 취소는 환불 계좌 정보가 필요하다고하는데, 환불계좌는 위젯에서 필수로 받게되어있는거같고, 그 정보를 저희는 DB에 저장하고있습니다.
일반 카드결제와 같이 상점관리자에서 취소할수 있는 것이 아닌이상 가상계좌는 저희 서비스에서 로직을 구현해서 취소 API 를 호출 해야하는 부분일까요?
35 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
네 가상계좌 취소도 일반적으로는 서비스에서 직접 구현하셔야 합니다.
한번 더 여쭤볼게있습니다.
입금을 완료했을때 반드시 STATUS 가 DONE 상태가 된다면
DONE 상태 로직을 수행하는 도중, 입금금액이 일치하지않아서 WAITING_FOR_DEPOSIT 상태로 돌아가게 된다면,
이 변화의 감지는 어떻게 할 수 있나요?
PG 에서도 입금후 바로 결과를 전달하지 않고 약간의 텀을 두는 설정이 있습니다.
이 설정이 되어있다면 감지가 안되실거에요
감지의 목적이
"올바른 결제완료건에대한 고객에게의 서비스 제공"
이라면 해당 설정이 되어있는지 확인하시면 될거같습니다
상점아이디 전달주시면 확인해볼게요
약간의 텀이 있다면,
db에 저장된 상태를 가지고 이전 이후를 판별해 로직을 구현해도 상관없는 것이겠죠?
엇 제가 말씀드리는것과 같은 내용인지 확인을 한번 하면 좋을거같네요
저는 입금 웹훅 수신에 대한 내용을 말씀드렸는데요
말씀하신경우 DONE 으로 웹훅이 간 이후에
WAITING_FOR_DEPOSIT 도 웹훅으로 전달 됩니다.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
저희가 DONE 상태의 로직을 처리하는데,
로직안에서
웹훅에서 제공받은 orderId 를 가지고 https://api.tosspayments.com/v1/payments/orders/${orderId}
이쪽으로 요청을 해서 payment 정보를 받아옵니다.
done상태의 로직을 처리하는 도중, 만약 이때 위의 api 를 호출하는 시점에서
금액오류로인해 waiting_for_deposit 상태가 변경되어서
조회한 주문정보의 STATUS가 일치하지 않아지는 일이 발생할 수 있을까요?
금액오류는 발생하지 않습니다.
"과납, 오납 체크" 기능이 활성화 되어있어요
입금금액이 오류였으면 DONE 으로 변경이 안돼요
그럼 웹훅으로
DONE 상태가들어오면 무조건 결제 제대로 완료된거고,
WAITING_FOR_DEPOSIT 상태가 들어오면
입금 오류: 두 번째는 WAITING_FOR_DEPOSIT으로 상태가 되돌아가는 경우로, 구매자가 입금할 때 오류가 발생했을 때의 상태 변화입니다. 웹훅이 전송됩니다.
이 경우인것인가요?
네 맞습니다.
하지만 상태가 되돌아간다고 적혀있는데, 금액이 얼마가 되었든 일단 들어오면
DONE 이 된다는 뜻 아닌가요?
DONE 이 되었다가 WAITING_FOR_DEPOSIT 로 변경되는 케이스가 있다는 의미입니다.
DONE 으로 끝나는 케이스가 대부분이긴 하지만요.
그런 케이스는 예를 들면 어떤 케이스인가요?
은행마다 다른데 은행에서는 입금처리를 시작할때 DONE 을 저희쪽으로 보내고 성공하면 아무것도 보내지 않지만 실패하면 WAITING_FOR_DEPOSIT 을 보내도록 되어 있습니다.
정확한 상황은 저희도 알수 없는데 가장 일반적인경우는 A은행에서 B 은행에 입금처리를 했는데 Timeout 이 발생했다거나 B 은행에서 처리중 오류가 생겨서 다시 돈을 돌려 보냈다거나 하는 경우로 알고 있어요.
그럼 개발자들이 판단하는 기준점을 잡기가 엄청 어렵지않은가요?
DONE 을 받아서 결제 완료가 확정된 상황에서 WAITING_FOR_DEPOSIT 이 넘어오면
다시 상태를 변경해야하는데..
어쨌든 이경우 는 정상적으로 입금이 안된거래건이라서 제품및 서비스를 제공하시면 안됩니다.
네 그런데 가상계좌 처리하는 은행의 동작이 이런식으로 되어 있어서 저희도 딱히 방법이 없습니다.
일반적으로 거의 발생은 안하는데 발생하게 되면 가맹점에 피해가 발생하는 부분이라 안내드리고 있어요.
보통은 DONE 이 오고 2분 내에 WAITING_FOR_DEPOSIT 이 전송됩니다.
그럼 일단 웹훅에서 WAITING_FOR_DEPOSIT 이 넘어오는경우는,
1. 입금오류
2. 위와같이 정말 특수한 케이스
이렇게 있다고 봐도 무방한 것이죠?
입금 오류일떄는 done -> waiting_for_deposit 이 아니라 처음부터 waiting_for_deposit 만 들어오는 경우 이고
이렇게 이해하면 될까요?
입금 오류일떄는 done -> waiting_for_deposit 입니다.
그럼 금액이 입금이되면 얼마이던지 간에 done 이 먼저 웹훅에 들어오고
waiting_for_deposit 이 한번 더 들어온다는 얘기인가요?
가상계좌 발급한 금액과 다른금액으로는 아예 입금이 안됩니다.
발급한 금액과 정확히 같은금액으로 입금이 되면 DONE 이 발생하고
이체 과정에서 뭔가 문제가 생겨서 최종적으로 이체가 실패하면 WAITING_FOR_DEPOSIT 이 전송되구요.
그러면 DONE 이 넘어오는 경우는 완전한 결제 성공이고
다른금액으로 입금이 되었을 경우에는 웹훅이 발생하지 않는다는 것인가요?
다른금액으로 입금이 되지 않습니다.
예를들어 5만원으로 발급된 가상계좌에는 2만원이나 4만 9천원을 입금하려고 하면 바로 에러가 발생합니다.
에러는 고객이 바로 보실수 있구요. 토스앱 등에서 입금하려고 하면 바로 에러가 보입니다.
이경우 웹훅은 전혀 전송되지 않습니다.
입금 오류: 두 번째는 WAITING_FOR_DEPOSIT으로 상태가 되돌아가는 경우로, 구매자가 입금할 때 오류가 발생했을 때의 상태 변화입니다. 웹훅이 전송됩니다.
그럼 이 문구는 어떤 상황을 이야기하는 것인가요?
정확한 금액을 입금했는데, 서버 이외에 은행의 문제같은 외부문제가 발생했을시에
웹훅이 전송된다는 건가요?
네 맞습니다.
구매자가 입금을 할 때 오류가 발생했을때 라고 적힌 문구가 오해가 있을 수 있을것같은데요
고객은 정확한 금액을 입금했는데, 그걸 처리하는 은행쪽에서 오류가 발생하는 경우입니다.
이부분은 자세하게 설명을 추가 할수 있을지 논의해 보겠습니다.
그부분은 저희 서비스에서 상태를 체크하는 것 외에는 할 수 있는게 없는거같은데, 보통의 해결프로세스가 있을까요?
DONE 이후에 WAITING_FOR_DEPOSIT 콜백을 받으시는경우 해당 주문을 완료상태에서 입금 대기 상태로 돌려주시고
제공된 서비스가 있는경우 회수하시고, 제품의 경우 배송준비 중이라면 배송을 중단해 주시면 될것 같습니다.
그럼 입금된 금액같은 경우에는 은행사에서 알아서 환불이 들어가는 구조일까요?
네 맞습니다.
고객 계좌에서 아예 빠져 나가지 않았거나 나갔더라도 다시 입금되셨을겁니다.
네 감사합니다. 완벽히 이해했습니다.
죄송합니다 하나 더 여쭤볼게요.
그럼 은행사에서 알아서 환불이되고
WAITING_FOR_DEPOSIT 상태로 돌아가면,
가상계좌는 유지가되어서 다시 입금하면 결제가 되는 구조일까요?
네 맞습니다. 고객이 다시 입금할 수 있습니다.
웹훅 이벤트 | 토스페이먼츠 개발자센터
토스페이먼츠에서 제공하는 웹훅 이벤트 목록입니다.