이 문서에 대한 내용에 대한 문의는 토스페이먼츠 디스코드 사이트(https://discord.gg/44w6tQkw8N) 를 통해 언제든 가능합니다.
가상계좌 결제는 토스페이먼츠가 은행으로부터 발급받아 보유하고 있는 각 은행별 가상계좌를 고객에게 발급하고 고객은 발급된 가상계좌로 거래 금액을 송금하여 결제를 완료하는 결제방식을 의미합니다. 주문자와 입금자가 달라도 입금할 수 있지만, 주문금액과 입금금액이 같아야 입금이 가능합니다. - [링크]
다른 말로는 무통장 입금이라고도 불립니다.
가상계좌는 고객에게 발급(활성화) 되지 않으면 해당 가상계좌 번호를 알고 있다고 해도 입금이 되지 않습니다. 가상계좌를 발급 요청 할 때 입금 마감시간을 정할 수 있어서 해당 시간이 지나면 발급된 가상계좌에 더 이상 입금이 불가능합니다. 반납된 가상계좌번호는 다시 토스페이먼츠의 가상계좌 Pool (발급되지 않은 상태의 가상계좌번호 리스트)에 들어가게 되고 이후 다른 가상계좌 결제 건이 요청되면 발급 될 수 있습니다. 즉, 개별적인 다른 거래 건으로 가상계좌를 요청했을 때 앞서 사용되었던 가상계좌번호가 재발급이 될 수 있습니다.
가상계좌는 발급 받을 때 입금 가능 금액을 명시해서 발급하게 되는데, 고객이 입금할 때 이 입금 가능 금액에 맞추어 한번에 입금을 하셔야 합니다. 다른 금액의 경우에는 입금 자체가 되지 않기 때문에 15000원 입금을 위해 10000원, 5000원 이렇게 2번 입금하는 것은 불가능합니다. 무조건 한번에 15000원을 입금해야 합니다.
가상계좌 결제의 프로세스 중 다른 결제수단과 다른 가장 큰 특징은 결제 요청을 했을 때 실제 결제가 발생하지 않고 단순히 가상계좌만 발급된다는 점입니다. 카드나 휴대폰 등 다른 결제는 결제 요청 API 를 호출하면 그 응답으로 결제의 성공/실패 여부가 바로 전달되지만, 가상계좌는 결제요청 API 를 호출했을 때 그 결과로 가상계좌가 발급됩니다. 즉, 가상계좌 결제 flow 에서 구매자의 액션은 2가지 단계로 구분이 됩니다. 1번째는 가상계좌 결제 요청하여 계좌를 발급 받는 액션과, 2번째로 발급된 계좌에 입금을 하는 액션으로 나뉘게 됩니다.
가상계좌가 발급되면 초기 주문번호의 status 는 WAITING_FOR_DEPOSIT 이 됩니다. 그리고 실제 결제는 고객이 발급된 가상계좌에 정해진 금액을 입금해야 결제가 완료(status = DONE) 됩니다.
고객이 발급된 가상계좌에 언제 금액을 입금할지 PG사도 가맹점도 알 수가 없습니다. 이 때문에 가상계좌 발급요청시 입금 이벤트를 안내 받을 수 있는 가맹점 서버의 URL 을 전달해주어야 합니다. 이를 입금 통보 URL이라고 합니다. 입금이 되면 PG사는 은행으로 부터 입금 통지를 받게 되고, 수신한 입금 통지를 앞서 설정한 고객사 통보 수신 URL 로 계좌 상태(입금완료) 정보를 전달합니다. 가맹점에서는 이 이벤트 정보를 받아서 주문 건에 대해 결제 완료를 처리하고 서비스 또는 물품을 구매자에게 제공하면 됩니다. 입금이 완료 되어야 해당 주문번호의 status가 DONE 으로 변경된다는 사실이 다른 결제수단과의 차이점 입니다.
가상계좌에 고객이 입금을 하시게 되면
즉 가상계좌 입금 통보는 토스페이먼츠 서버에서 가맹점 서버를 호출하는 방식으로 동작하므로, 가상계좌 입금 통보 URL 은 토스페이먼츠 서버에서 접속 가능한 public IP나 도메인을 사용하는 URL 이어야 합니다.
127.0.0.1, localhost, 그리고 내부망(10.x.x.x, 192.x.x.x, 172.x.x.x) IP 등 인터넷을 통해 접근이 불가능한 URL 은 토스페이먼츠 서버에서 호출이 불가능하므로 사용하실 수 없습니다.