가상계좌 에스크로 문의
안녕하세요 가상계좌를 이용할 때는 에스크로를 사용해야 한다고 해서, 설정을 연결 했습니다.
가상계좌를 진행하면 저 이미지가 나오고 '이용하고 결제하기'를 누르면 최종 결제가 완료되는데 이후에 따른 작업들이 필요할까요?
찾아보니 배송지 등 정보들을 입력해야 된다는 글들이 보여서 여쭤봅니다.

137 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(문제가 발생한 이미지나 전체 결제흐름 동영상을 첨부해주시면 빠른 분석을 받으실 수 있습니다.)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
에스크로 이용 시 배송 정보를 등록하고
배송이 완료되고 구매확정이 되어야 정산 보류가 풀리는 시스템입니다.
api 문서를 찾아봣을 때 보이지 않아서 배송 정보를 어떻게 등록할까요?
Google Docs
XPAY[기타]에스크로_v.2.1.docx
Xpay-기타-에스크로 Protocol and Core Function Specification Version 2.1 2025.05 목차 에스크로 서비스의 개요 3 연동 샘플 파일 구조 4 API를 통한 배송정보 등록 및 배송완료 등록 4 API URL 4 배송정보 등록 요청 파라미터 5 배송완료 등록 요청 파라미터 6 ▪ 배송정보 ...
궁금한것이 있습니다.
첫번째로는 첨부파일 이미지를 보면 구매확정요청(배송받았는지 여부) 을 보내는데 제가 먼 처음 에스크로에 이메일이나, 휴대폰 번호가 없어서 입력을 하지 않았다면 구매확정 요청을 어떻게 받을까요?
두번째로는 이메일을 통해서 보낸다고 되어 있는데 구매확정 요청이나, 구매취소 이거를 이메일을 보내지 않고, 사용하고 잇는 앱(ex 쇼핑몰 앱) 이 있으면 여기서 처리를 할 수 있을까요? [구매확인 누름. 구매취소 누름 등등]

이메일 주소가 없다면 구매확정 메일은 발송되지 않습니다. 배송완료 후 +3영업일뒤 강제 구매확정처리됩니다.
사용하고 있는 앱에서는 구매확정이나 구매취소를 하실 수 없습니다. 고객이 이메일을 받지 않았다면 상점관리자에서 수기로 처리하실 수 있습니다.
아래 문서가 에스크로를 이해하는데 좀 더 도움이 되실 것 같아요.
https://www.notion.so/f8c3db0b527341919169c3ade12a8f90?source=copy_link
tosspublic on Notion
에스크로 | Notion
한번 더 확인이 필요합니다.
이메일이 없으면 구매확정 메일이 가지 않고, 쇼핑몰/상점관리자(관리자)가 구매확정이나, 구매취소를 할 수 없다는것이죠?
그러면 만약에 상대방이 구매확정을 누르거나, 구매취소를 눌렀을 때 api 쪽으로 혹은 웹훅으로 요청을 받을 수 있나요?
저희 쇼핑몰 앱에서는 위와 같은 구매확정, 취소(부분취소 기능)[여기서는 배송이 완료됐기 때문에 반품]기능이 있는데 연동이 되야 해서 여쭤봅니다.
그리고 저 구매완료 날짜를 늘릴 수 있나요? [저희 앱 기준으로 7일 이여서 여쭤봅니다]
구매확정이나 구매취소를 하면 콜백으로 서버에서 결과 수신할 수 있습니다.
https://docs.google.com/document/d/1N8oe5uzUcAbds-xADKquz2aFJld-yzhk/edit
해당 문서의 "처리결과 수신"을 보시면 됩니다.
Google Docs
XPAY[기타]에스크로_v.2.1.docx
Xpay-기타-에스크로 Protocol and Core Function Specification Version 2.1 2025.05 목차 에스크로 서비스의 개요 3 연동 샘플 파일 구조 4 API를 통한 배송정보 등록 및 배송완료 등록 4 API URL 4 배송정보 등록 요청 파라미터 5 배송완료 등록 요청 파라미터 6 ▪ 배송정보 ...
구매확정일은 3일 기본 설정이며 변경여부는 1544-7772로 문의해보셔야 합니다.
이메일이 없으면 구매확정 메일은 발송되지 않고, 상점관리자에서 구매확정, 구매취소를 할수는 있습니다.
1. 이메일을 보내지 않고 자동 구매확정이 될때 이것도 받는게 가능할까요?
2. 상점관리자에서 구매확정, 구매취소를 할수는 있습니다. 이때도 받는게 가능할까요?
네 웹훅은 두경우 모두 발송됩니다.
에스크로 결제건에 대한 취소 정책
에스크로 결제건은 배송정보와 연계 되기 때문에 거래가 진행되는 중간(결제 완료시 부터 구매확정 까지) 부분취소가 불가능합니다. 그렇기 때문에 결제후 부분취소가 필요하다면
1. 언제든 전체 취소를 하고, 남은 금액을 재결제 하시거나
2. 구매 확정까지 완료하여 에스크로 프로세스를 완결한후 부분취소를 하는
방법을 사용하실 수 있습니다.
라고 되어있습니다.
그러면 부분 취소가 필요한데, 위 이미지에처럼 구매취소를 누르면 여기서 부분취소가 가능한 부분일까요?
제가 이해한거로는 구매확정을 누르면 2~3일 안에 쇼핑몰 쪽으로 돈이 넘어간다고 이해를 햇습니다. 그렇게 되면 구매확정 이후에 취소나, 환불을 했을 때, 쇼핑몰 쪽에서 환불계좌로 직접 처리를 해야하는 것일까요? 그렇게 되면 이거는 무리라고 생각이 되서 물어봅니다.

지금 보내주시는 거는 고객이 구매를 취소요청을 하는 겁니다. 이후에 가맹점에서 취소 동의를 해야 최종적으로 취소되구요.
구매 확정 이후에취소하면 저희가 취소 처리 해드리구요.
그래서 일반적으로는 취소 하더라고 일단 구매 확정한 후에 취소를 진행하는경우가 많습니다.
제가 보낸거 이미지가 [배송완료 시점] 구매확정 요청 이메일이 오는건데
이때 구매확정을 누르면 돈이 쇼핑몰 쪽으로 넘어가는게 아닌가요?
그렇게 되면 이후에 취소를 [앱에서 하거나] 할 때 돈을 쇼핑몰쪽에서 직접 환불 계좌로 넣어줘야 하는게 아닌가 해서 여쭤본겁니다
제가 이해를 잘못한걸까요?
쇼핑몰로 넘어가고 이후에 취소를 하면 해당 쇼핑몰에서 이후에 발생한 결제 금액을 가지고 저희가 환불해주고 차감된금액을 가맹점에 정산해 드립니다.
아 감사합니다. 돈이 바로 넘어가는게 아니라 정산일에 돈이 처리가 되는거군요? [결국 구매확정을 - 이메일에서 진행을 해도 환불처리가 가능하다는 말씀이죠?]
그러면 저 구매확정 기간을 줄이거나, 이메일을 아예 안 보내게 할 수 있나요? 쇼핑몰 앱에서 구매확정이 있는데 이거는 누르는 순간 반품 및 취소가 되지 않습니다.
문제가 이메일쪽은 무시해도 상관이 없는데, 쇼핑몰 앱쪽에서 구매확정을 누르고, 이메일에서는 취소를 했을 경우 입니다.
에스크로를 사용하면 배송 완료 되는 순간 이메일이 보내지고, 저희 쪽 앱에서도 배송완료가 되면서, 구매확정 하는 기능이 생깁니다.
위에도 설명 드렸지만 이메일에서 취소버튼을 누르더라도 바로 취소되는게 아닙니다. 상점관리자에서 최종 취소 동의를 클릭해야 취소되는 것이에요. 이 부분은 발생시 cs로 처리하시면 될 것 같습니다.
이메일에서 구매 취소는 전부 취소인가요?
네,
감사합니다
혹시 이 부분은 api로 요청을 할 수 있나요? 상점관리자에서 직접 누르는 것이 아니라 api 요청으로 처리흘 할 수 있을까요?

아뇨 구매 취소를 받아주는건 상점관리자에서만 가능합니다.
그러면 상점관리자가 구매취소를 승인했을 때도 웹훅으로 받을 수 있을까요?
네 맞습니다.
아 감사합니다.
전에 주신 https://docs.google.com/document/d/1N8oe5uzUcAbds-xADKquz2aFJld-yzhk/edit 를 보고 처리결과 수신 쪽에서
techsupport@tosspayments.com 로 문의를 하려고 합니다.
"수신받기 원하는 결과의 종류와 URL 을 알려주시면 URL등록을 진행해드립니다. URL 은 하나만 설정가능하며, 등록된 URL 로 각 이벤트의 파라미터가 전송됩니다."
라고 되어 있어서 웹훅을 받는 부분을 http://115~~~ 이런 식으로 되어 있는 포워딩 된 로컬 서버쪽에서 테스트를 하고, 실제 라이브 서버에서 할 때는 다른 url 로 할 수 있을까요?
Google Docs
XPAY[기타]에스크로_v.2.1.docx
Xpay-기타-에스크로 Protocol and Core Function Specification Version 2.1 2025.05 목차 에스크로 서비스의 개요 3 연동 샘플 파일 구조 4 API를 통한 배송정보 등록 및 배송완료 등록 4 API URL 4 배송정보 등록 요청 파라미터 5 배송완료 등록 요청 파라미터 6 ▪ 배송정보 ...
아니면 에스크로는 실제 서버에서만 가능한걸까요?
메일을 드렸는데 답장이 없는데 웹 훅 요청을 따로 하는 페이지가 있는건가요?
에스크로 구매확정/구매취소 이메일이 오는데 구매 취소 요청을 했을 때, 상점관리자[취소 요청이 옮 - 이거를 무시하고]가 아닌 쇼핑몰 앱을 통해서 토스페이먼츠 취소 api 사용, 부분 취소를 할 수 있을까요?
네 테스트 할수 있습니다. 메일주셔서 MID 알려주시도록 회신 드렸습니다.
구매 취소 요청을 했을 때는 상점관리자 통해서 만 취소가 가능합니다.
감사합니다. 아 그러면 구매 취소 요청을 햇을 때 api에서 /cancel 요청을 하면 취소가 되는데, 이거는 취소 처리가 되지 않는건가요?
MID 도 적어서 메일 보냇습니다.
구매 취소 요청을 고객이 했을때는 API 로도 전체취소만 가능합니다.
구매 취소에 대한 승인은 상점관리자만 가능하구요.
부분취소는 불가합니다.
아 네 전체 취소가 되는거면 상관 없습니다.
이런 상황이면 가능하다는 거죠?
소비자가 (배송완료)이메일을 받고, 구매취소를 요청했을 때, 상점관리자 쪽은 건드리지 않고,
앱 혹은 웹에서 주문 취소(전체) api 를 이용해서 주문 취소가 가능하다는 거죠?
네 가능합니다.
네 감사합니다. 혹시 이메일은 아예 강제로 안 보내게도 할 수 있을까요?
고객이 email 주소를 넣으셨다면 무조건 보내게 됩니다.
아 알겠습니다. 감사합니다.
(https://docs.google.com/document/d/1N8oe5uzUcAbds-xADKquz2aFJld-yzhk/edit)
['API를 통한 배송정보 등록 및 배송완료 등록'] 이렇게 설명되어 있는데
테스트 : https://pgweb.tosspayments.com:9091/pg/wmp/testadmin/jsp/escrow/rcvdlvinfo.jsp
어떻게 보내는지 예시가 있을까요?
배송완료 했을 때 [굿스플로 쪽에서 정보를 받음] 보내주려고 합니다.
Google Docs
XPAY[기타]에스크로_v.2.1.docx
Xpay-기타-에스크로 Protocol and Core Function Specification Version 2.1 2025.05 목차 에스크로 서비스의 개요 3 연동 샘플 파일 구조 4 API를 통한 배송정보 등록 및 배송완료 등록 4 API URL 4 배송정보 등록 요청 파라미터 5 배송완료 등록 요청 파라미터 6 ▪ 배송정보 ...
근데 배송을 직접 하시나요?
원래 해당 문서에 나열된 제휴 택배사는
택배사가 배송완료 통보를 해주면 자동으로 배송완료처리가 됩니다.
배송 정보 넣으시면 저희가 자동으로 배송완료 처리 합니다.
그리고 보내주신주소가 IP 에 3340 포트 사용하시는데요.
1. 포트를 443으로 변경해 주시기 바랍니다.
그게 아니면 8443으로 해주세요.
그리고 IP 가 외부에서 접속가능한지도 확인부탁드립니다.
네 포트번호 확인하고 변경하겟습니다
포트번호 변경했습니다.
제가 전에 토스페이먼츠 웹훅으로 설정한거를 그대로 적었나 봅니다.
http://115.178.66.99:8443/api/NHWONDERMALL/tossPaymentWebhook 으로 변경했습니다.
가끔식 내부 아이피 주소가 변경되서 연결이 안 될 수 있는데 외부에서 접속은 가능합니다.
인바운드 방화벽은 열어두신거죠?
포트 포워드 했을 때 api 요청이나 이런것들은 잘 됐었습니다.
토스페이 웹훅도 내부 포트 번호는 같은데 잘 됐었습니다
배송정보를 그냥 post 형식으로 해서 데이터를 보내 주면 되는건가요?
여기에 대해서 어떻게 보내는지 형식을 알 수 없어서요
get 으로 queryparam으로 보내주시면 됩니다.
아 지금 확인해 봤는데 에스크로 웹훅은 443 만 지원한다고 합니다. 443 으로 포트 변경 가능하신가요?
넵 잠시만요
변경했습니다
네 감사합니다. 설정해 드릴께요.
넵
http로 보내주셨는데
https 아닌가요/
아 이게 테스트 계정은 포트포워딩 해서 http 입니다
https 가 필요한걸까요?
http 면 기본포트가 80이라서요.. 죄송한데 포트 번호 다시 변경 부탁드립니다.
알겠습니다
https 인줄 알았네요.
외부 접속 포트 번호를 80으로 하면 되는거죠?
변경했습니다
넵
이게 내부적으로 조금 이슈가 있어서 시간이 걸리네요. 설정하고 공유 드릴께요.
네 알겠습니다 감사합니다
적용했습니다. 확인부탁드립니다.
네 그러면 테스트 계정일 경우에는 'get 으로 queryparam으로 보내주시면 됩니다.' 요청을 해야 할까요?
테스트를 어떻게 해야 할까요?
테스트는 테스트 쪽에서 결제를 생성하신후에 mid 앞에 t 를 붙여서 요청 주시면 됩니다.
endpoint 도 테스트 쪽으로 하시구요.
네 배송완료를 보내주면 된다는 말씀이시죠?
만약 제휴된 택배사 인데도
"▪ 배송완료 등록 요청 파라미터
Appendix 에 명시되지 않은 택배사 (ex: 퀵서비스, 자체배송,구매자 직접수령등) 의 배송정보를 등록시 dlvtype = 01 로 요청합니다. 별도의 택배사 코드 및 운송장 정보 등록은 없으며, 수령인 정보를 입력합니다."
이렇게 처리해도 상관 없을까요?
그리고 문서를 살펴보니깐 mertkey 라는게 있는데 mid: nhwondn18j 에서 api 키 머드키 이용하면 될까요?
그러면 안됩니다.
네 맞아요 결제하신 MID에 맞는 머트키 써주세요
이게 굿스플로로 받는데 제휴되어 잇는게 있고 없는게 있어서 그렇습니다.
그러면 일일이 구분을 해서 세팅을 해야 하는 걸까요?
제가 생각한거는 현재 굿스플로를 이용하는데 배송완료 됏을 때 웹훅으로 정보를 받습니다.
이때 배송등록을 하려고 합니다. 이때 제휴된것은 명시된 택배사를 해야하고 제휴되지 않은 택배사는 명시되지 않은 택배사를 사용해야 한다는 말씀이시죠?
아 그러면 그냥 싹 다 제휴되지 않은 택배사로 간주하고
배송정보 등록 요청 파라미터 하지말고
배송완료되면
배송완료 등록 요청 파라미터 보내주세요
아 알겠습니다. 그렇게 하면 되는거죠? 감사합니다
▪ 배송완료 등록 요청 파라미터
Appendix 에 명시되지 않은 택배사 (ex: 퀵서비스, 자체배송,구매자 직접수령등) 의 배송정보를 등록시 dlvtype = 01 로 요청합니다. 별도의 택배사 코드 및 운송장 정보 등록은 없으며, 수령인 정보를 입력합니다.
이거를 사용하면 되는거죠? mid는 t를 붙이라고 하셨으니깐
테스트는 https://pgweb.tosspayments.com:9091/pg/wmp/testadmin/jsp/escrow/rcvdlvinfo.jsp?tmid=~~~&oid=~~&dlvtype='01' 이런식으로 하면 되는거죠?
아 감사합니다. ^^
로 하셔야 합니다. 실제 사용하시는 MID 앞에 t 를 붙여주세요.
넵
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
한가지 더 문의를 해도 될까요?
https://pgweb.tosspayments.com:9091/pg/wmp/testadmin/jsp/escrow/rcvdlvinfo.jsp?mid=tnhwondn18j&oid=251128123913-M-0004&dlvtype=01&rcvdate=202511281301&rcvname=%EB%A5%98%EB%B3%91%EC%9A%B1&rcvrelation=%EB%B3%B8%EC%9D%B8&hashdata=4e75b525f783a562aecab57cd67a7dd1
[TOSS RESPONSE] FAIL : ���� > ��ǰ��ȣ ����(productid)==251128123913-M-0004FAIL : hashdata ����ġ >hashdata : -4e75b525f783a562aecab57cd67a7dd1- >hashdata2 : -d35f7805bbe63e20f96f60631a835576- >hashdata3 : tnhwondn18j;251128123913-M-0004;01;202511281301;
햇을 때 에러가 발생하는데 글자가 깨져서 무슨 에러인지 알 수 가 없습니다.
EUC-KR로 데이터를 주고 받고 있으니
EUC-KR로 데이터를 주시고 EUC-KR로 응답을 읽어주세요.
네 알겠습니다
배송완료 api 는 성공을 햇습니다. 이때 전에 등록해주신 http://115.178.66.99/api/NHWONDERMALL/tossPaymentWebhook 에 요청이 오지 않는데
[post형식] 발송이 됏는지 알 수 잇을까요? 이메일도 오지 않습니다.
아 죄송합니다. 혹시
http://115.178.66.99/api/NHWONDERMALL/tossPaymentEscrowWebhook
로 바꿔주실 수 있을까요?
tossPaymentWebhook -> tossPaymentEscrowWebhook 입니다.
죄송합니다
수정되면 공유 드릴께요.
넵
죄송합니다만 언제쯤 되는지 알수 있를까요?
cc @냥과장
오전에 회신 드렸습니다. 적용되었어요.
넵 감사합니다.
설정 이후인것 같은데
요청이 info: 74.7.242.17 - GET /api/NHWONDERMALL/tossPaymentWebhook/~~ 이런 형식으로 옵니다.
ex) info: 74.7.242.17 - GET /api/NHWONDERMALL/tossPaymentWebhook/components_pc/~
제가 요청한거 http://115.178.66.99/api/NHWONDERMALL/tossPaymentEscrowWebhook 인데 한번 확인해 주실 수 있을까요?
요청이 거의 2~3초마다 반복되는것 같습니다.
그리고 혹시 포트번호를 따로 달수 있을까요? ex) http://115.178.66.99:5546/~
1. 기존에 발생한 거래는 기존 웹훅 URL로 계속 전송됩니다.
전송에 실패했기 때문에, 재전송 정책에 따라서 계속 보내질거에요.
2. 포트번호 관련은 이미 설명드렸습니다.
에스크로 웹훅은 80, 443만 지원합니다.
알겠습니다.
확인했었는데 이게 80번 포트로[기본] 열어서 계속 get 요청이 오나 하고 여쭤봤습니다.
전송 받았을 때는 그냥 return으로 해서 처리해주기만 하면 되는 걸까요? 따로 보내줘야 하는 방식이 잇을까요?
근데 지금 보니까 80번 포트로 들어가니 Synology NAS 404가 나고있는데
그것때문에 재전송이 날거같습니다.
200 status code에 “OK” 라고 두글자만 딱 보내주셔야 합니다.
html 태그나 그런것 없이, 텍스트 포맷으로 ”OK” 두글자입니다.
return res.status(200).json({"OK"}); 이렇게 보내 드립면 되는건가요?
아니면 return "OK"; 이렇게 인가요?
return res.status(200).send(“OK”) 로 설명드리는 것이 적합할 것 같네요.
json도 아니고 그냥 텍스트만 달랑 주시면 됩니다.
감사합니다.
일단 OK 처리를 했는데 계속 이런식으로 특정 IP에서 요청이 옵니다.
OK 라는 값만 보내주시면 됩니다.
if (req.method === 'GET') {
const body = req.method === 'POST' ? req.body : req.query;
console.log("isMethod : "+req.method);
console.log(body);
return res.status(200).send("OK");
}
return res.status(200).send("OK");
OK 처리를 하지 않으면 계속 요청이 발생한다고 하셔서 이런식으로 OK 처리를 했습니다.
그래도 특정 IP에서 요청이 '74.7.242.17' 계속 넘어오길래 토스쪽에서 세팅을 해서 넘어오는것인가 하고 여쭤봅니다.
혹시 토스쪽이 아니면 차단을 하려고 합니다.
74.7.x.x.는 토스페이먼츠 ip는 아닙니다.
네 알겠습니다. 감사합니다
>> insertDeliveryInfoToss
[TOSS RESPONSE] OK
2025-12-01T12:20:10+09:00 - info: 192.168.0.124 - POST
/api/NHWONDERMALL/insertDeliveryInfoToss HTTP/1.1 200 28 - 408.313 ms
>> tossPaymentEscrowWebhook
isMethod : GET
{}
2025-12-01T12:21:03+09:00 - info: 192.168.0.1 - GET /api/NHWONDERMALL/tossPaymentEscrowWebhook HTTP/1.1 200 2 - 0.647 ms
요청 로그 입니다. 현재 저 ">> tossPaymentEscrowWebhook" 요청['외부 아이피 통해서 들어오는지 확인여부']은 제가 보낸 것인데, 배송 등록 완료를 하고도 약 5분이 지났는데도 웹훅에 요청이 오지 않습니다.
'웹훅'으로 보내줬는지 확인이 가능할까요?
에스크로 테스트모드 tid는 tnhwo20251201114447tS971 입니다.
12시 20분에 배송완료 API 를 호출하신건가요/
호출하신 정보 공유 부탁드립니다.
넵 호출하신 정보는 어떤것을 말씀하시는 걸까요?
tid: tnhwo20251201114447tS971, oid: 251201114448-M-0004 입니다.
말씀하신대로 약 12:20분쯤 등록[배송완료API호출]을 햇습니다.
배송완료하기 위해서 파라미터에 정보를 넣어서 보내셨을텐데 그 전체 값을 문의드린거에요.
oid: 251201114448-M-0004, rcvname: 류병욱, dlvtype: 01, rcvdate: "202512011220" rcvrelation: 본인, hashdata:"이거는 모르겠습니다."
이렇게 입력했습니다.
네 감사합니다.
dlvtype: 01, rcvdate: "202512011220"
이내용도 추가했습니다.
아 01 로 보내주신거군요.. 배송완료 API 를 사용하시는 경우 웹훅이 전달되지 않습니다.
해당 건에 대해서 구매 확정 메일은 받아 보셨나요?
그러면 현재 이메일[구매확정, 취소요청]도 보내지지 않는데
아 이거 요청하면 메일은 오는건가요?
혹시 몰라서 스팸함도 찾아봤는데 오지 않았습니다.
메일 주소 적어드려도 될까요? 회사메일로 에스크로에 설정을 했는데 오지 않았습니다.
네 메일주소 보내주세요.
bwryu@mccaai.com 이렇게 에스크로에 적었습니다.
뭐가 문제일까요? ㅠ
늦어져서 죄송합니다. 이거 이메일은 발송되었는지 확인후 공유 드릴께요.
@BW 님 지금 에스크로 샌드박스 환경에 이슈가 있다고 하네요. 전체적인테스트는 라이브에서 진행해주셔야 할것 같습니다.
감사합니다. 그러면 실제 결제가 되는 상황에서 진행을해야하는건가요?
네 지금은 그렇게 테스트를 하셔야 할것 같아요
@냥과장 안녕하세요 실제 환경에서 해보라고 하셔서 실제 환경에서 테스트를 해봤는데 이번에도 요청이 오지 않습니다. [http://115.178.66.99/api/NHWONDERMALL/tossPaymentEscrowWebhook ]
배송완료 URL 주소는 [TOSS ESCROW URL] https://pgweb.tosspayments.com/pg/wmp/mertadmin/jsp/escrow/rcvdlvinfo.jsp?mid=nhwondn18j&oid=251202104951-M-0004&dlvtype=01&rcvdate=202512021101&rcvname=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD&rcvrelation=%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD&hashdata=cb3bdb932a7a217df8d4d38c484e1560
입니다.
이메일은 오는 것 확인했습니다.
이메일에서 구매취소를 눌렀을 때 [http://115.178.66.99/api/NHWONDERMALL/tossPaymentEscrowWebhook] 로 요청이 들어왔는데
const body = req.method === 'POST' ? req.body : req.query;
console.log("isMethod : "+req.method);
console.log(body);
아무런 값이 들어오지 않았습니다.
>> tossPaymentEscrowWebhook
isMethod : GET
{}
[이렇게만 들어왔습니다]
혹시 위 이미지에 있는 이벤트, 처리결과 전송 파라미터를 어떻게 받는지, 어떤 형식으로 들어오는지 알려주실 수 있나요?

아 잠시만요.. 이거 라이브 환경에는 웹훅 등록이 안되어 있을겁니다.
일단 값은 들어오기는 했는데, 이벤트 설정이 안되어 있나는 말씀이신가요?
정확히는 값이 아니라 요청은 들어온것 같습니다
웹훅을 받으셨다는 건가요?
GET 에 queryparam 으로 들어가긴합니다.
받으신 queryparam 을 확인해 보세요.
네 웹훅을 받았습니다.
const body = req.method === 'POST' ? req.body : req.query;
이렇게 설정되어 있어서 쿼리파라미터로 들어오면 값이 있어야 하는데 값이 들어오지 않아서 다른 방식으로 받아야 하나 여쭤봤습니다.
제가 테스트 했을 때 [postman] http://115.178.66.99/api/NHWONDERMALL/tossPaymentEscrowWebhook?id=123123
이렇게 요청을 보내면
>> tossPaymentEscrowWebhook
isMethod : GET
{ id: '123123' }
이렇게 들어옵니다.
그런데 취소요청을 했을 때 아예 {} 로 들어와서 여쭤봅니다
info: 35.196.132.85 - GET /api/NHWONDERMALL/tossPaymentEscrowWebhook HTTP/1.1 200 2 - - ms
이게 토스에서 보내준것 같은데 뒤에 아무런 파라미터가 없습니다
35.196.132.85 이건 저희가 사용하는 IP 가 아니에요.
일단 한번 더 구매확정으로 테스트 해볼께요
잠시만요..
제가 로그를 지운것일수도 있어서
저희쪽 라이브에 설정확인해 보고 말씀드릴께요.
네 감사합니다.
@BW 님 지금 다시 확인부탁드립니다.
넵
아 한가지 더 여쭤볼께 잇는데 이메일 받고 아무런 조치를 하지 않으면 3일 후에 구매확정이 되잖아요?
이때 구매취소 요청을 하면 3일 후 자동으로 구매확정이 안 되나요?
네 맞습니다.
넵 감사합니다.
다시 에스크로 요청 보내보겠습니다.
지금 현재는 배송완료를 했을 때 웹훅으로 요청이 안 오는 상황인거죠?
약 11:52 배송완료를 했는데 현재 요청이랑, 이메일은 오지 않는 상황입니다.
배송 완료 처리하셨으면 웹훅은 안나갑니다. 이메일은 잠시후에 받으실거에요.
주문번호 좀 공유해주세요.
251202115001-M-0004 입니다.
아 방금 뭔가 꼬여서 그런지 전에 보냈던게 왔네요
이메일이 2개가 왔습니다.
일단 최근 껄로 확인해볼께요
>> tossPaymentEscrowWebhook
isMethod : POST
{
mid: 'nhwondn18j',
hashdata: '51a63255235744ea524069f3d7703494',
ssn: '.',
tid: 'nhwon20251202115001Edir5',
oid: '251202115001-M-0004',
ip: '.',
mac: '.',
rescode: '0000',
resdate: '20251202120820',
temp: '',
txtype: 'R',
productid: '251202115001-M-0004'
}
요청이 왔는데 post 형식으로 온것 같습니다.
post 형식이라고 생각하면 될까요?
네 POST 가 맞습니다. txtype: 'R', 으로 어떤 이벤트인지 보시면 되구요.
알겠습니다. 모든 요청은 POST 로 온다고 생각하고 하겠습니다. 감사합니다.
아 한가지 더 궁금한게 잇는데 배송완료 할 때 productId 를 입력을 하지 않으면 배송완료 쪽으로 넘어가는데 productId 를 입력하면 배송중 상태가 되고 추가로 배송완료 쪽이 등록되지 않더라고요?
문서를 읽어보니 "결제파라미터 중 에스크로상품번호, 상품이 1개일 경우 혹은 한번에 여러 개의 상품을 동일한 발송정보로 등록할 때 생략 가능" 되어 있는데, 이거를 어떻게 구분을 하는지 알고 싶습니다.
그리고 productId 를 임의로 변경해서 추가 요청을 보내도 oid 가 같으면 이미 중복된 주문번호라고 하면서 에러가 발생하더라고요? 이거는 어떻게 처리해야할까요?
product id 는 결제 생성할때 보내주셔야 하고. 그값을 배송완료시에 보내주시는겁니다.
한주문건에 여러 배송이 있는게 아니라면 productid 는 쓰실필요가 없어요
tossPayment.requestPayment 할 때 input [escrowProducts] 으로 넣어야 한다는 말씀이시죠?
감사합니다
네 맞습니다. 거기에 productid 가 들어가야 배송 완료시에도 productid 로 처리하실수 있어요.
넵
혹시 이메일도 왔다 안왔다 하는건가요 ?
주문번호 : 251202145922-M-0004, 15:01 쯤에 배송완료를 햇는데 아직 오지 않네요?
시간이 좀 걸릴겁니다.
아 알겠습니다 감사합니다
@BW 라이브 쪽 변경해드리면 될까요?
라이브에 변경해두었어요.
해당 주소는 삭제해주셔도 됩니다.
감사합니다
궁금한게 있습니다. 토스 에스크로를 이용했을 때 이메일에서 구매 취소를 누르면 [소비자 과실 일 때 배송비], 토스 쪽에 요청이 오는데 이때 수락하면 배송비를 제외할 수 있나요?
아니면 교환 같은 경우에는 에스크로를 사용하지 않아도 되나요?
실제 상품이 있는데 배송비만 든다고 했을 경우에 입니다.
이경우에는 별도로 배송비를 따로 결제 받으시거나
아니면 구매 취소 하지말고 구매 확정 으로 처리하신다음 배송비 제외하고 부분취소 해주시면 됩니다.
소비자가 구매 취소를 요청했을 때 구매 확정으로 강제적으로 할 수가 있나요?
그리고 교환 같은 경우에는 에스크로를 사용하지 않아도 되나요?
-> 교환 신청 시 소비자 과실로 인한 배송비만 지불
이때는 가상계좌여도 에스크로를 사용하지 않아도 될까요?
배송비 지불이므로 (배송이 없어서) 에스크로 사용안하셔도 무방합니다.
소비자가 구매 취소를 요청했을 때 구매 확정으로 강제적으로 할 수가 있나요?이건 별도로 저희쪽에 요청해 주셔야 할거에요.
확인했습니다.
아 제가 말한거는 교환 했을 때 상품이 재배송 되잖아요?
이때 상품에 대한 비용지불은 없는데 배송비만 든다고 했을 때[택배는 발송 중]에스크로를 사용해야 되는지 여부 였습니다
이럴경우에는 안 사용해도 될까요?
흠.. 조금 애매하긴 한데요. 원래 주문의 에스크로를 구매 확정 안하시면 되지 않을까 싶습니다.
일단은 원래 주문은 이미 구매 확정이 된 상태이고, 이때 소비자가 받았을 때 맘에 들지 않던가 어떠한 이유로 인해서 교환을 했을 때 이야기 입니다.
즉 교환 신청을 했을 때 발생한 비용 배송비[소비자 과책일 경우]를 가상계좌로 결제를 하면, 이때도 에스크로가 의무인지 확인이 필요해서 물어봅니다.
아 '배송비만 든다고 했을 때[택배는 발송 중'] 여기서 택배는 교환되서 다시 오는 택배입니다
그러면 배송비에 대한 부분이라 에스크로의무가 아닐것 같은데요. 정확한건 내부 리걸팀과 논의해 주셔야 할것 같네요.
알겠습니다 감사합니다