0
017mo ago

결제 요청시 중복으로 응답됨

안녕하세요. 결제 성공 시 성공 콜백이 두 번 옵니다. 로컬, 개발서버에선 콜백이 정상적으로 한번 호출되는데, 클라우드 실 서버에선 두 번 호출됩니다. 어떤 부분을 확인해 봐야 하는지 알고 싶습니다.
36 Replies
today.lastday
today.lastday17mo ago
두번 호출된 주문번호 전달해주세요.
0
0OP17mo ago
202309190004628 입니다.
OMG
OMG17mo ago
위 주문번호가 2번 호출된건가요? 실 서버라고 하셨는데, 실서버에서 저희쪽 테스트키로 결제 테스트 하신것도 맞으실까요?
today.lastday
today.lastday17mo ago
ngrok으로 여러건 주소를 등록하시건으로 보여요 다른 주소로 결과들이 발송되었습니다.
0
0OP17mo ago
ngrok으로 여러건 주소등록을 했던 것은 다 local 이고 실서버주소는 하나만 셋팅이 되어있습니다.
today.lastday
today.lastday17mo ago
보내주신 주문번호가 라이브 mid에서 진행하신 건가요?
0
0OP17mo ago
아니요 테스트입니다 라이브로 하기전에 실서버에서 테스트키로 선작업 중이였습니다.
OMG
OMG17mo ago
네, 해당 테스트키로 다수의 웹훅 URL이 등록되어 있다고 말씀드린거네요. 한번 개발자센터 들어가보셔서 확인해보시겠어요?
0
0OP17mo ago
다수의 웹훅 URL이 등록되어 있는 것은 맞는데 해당 실서버 returnUrl 주소는 하나만 등록되어 있는데도 연관이 있는걸까요? 웹훅 응답이 아닌 결제요청 응답이 두 번 중복되어 옵니다.
OMG
OMG17mo ago
웹훅 응답이 아니라 API 응답이시라는거죠? 잠시만요 /v1/payments/confirm 을 2번 호출했습니다. 17:32:54.366 17:32:54.765 동일 paymentKey 로 중복요청이 들어오고 있는것으로 보이네요. 이 부분을 확인해보셔야 할 것 같아요. 그래서 첫번째 요청은 성공, 두번째 요청은 이미 처리된 결제 응답이 나갔습니다.
0
0OP17mo ago
결제요청의 successUrl 내에서 /v1/payments/confirm를 호출하도록 되어있는데, successUrl 이 두번 호출되어 중복요청이 발생되고있습닏.
OMG
OMG17mo ago
단순 새로고침이나 뒤로가기 등으로 successUrl 이 2번 호출되는 경우가 많아서요. 이 경우도 한번 염두에 두고 한번 다시 진행 해보시겠어요?
0
0OP17mo ago
단순 새로고침이나 뒤로가기는 없었고 결제요청뿐만 아니라 결제취소 등 콜백url이 모두 2번 호출되고있습니다..
김차장
김차장17mo ago
경험하신 케이스는 실제로 두번 호출하셨을 확률이 높습니다. 결제승인요청하는 소스에 라인별로 로그를 찍어서 분석하시면 도움이 되실거에요
0
0OP17mo ago
말씀하신 결제승인요청이 /v1/payments/confirm 으로 보내는 프로세스 말씀하시는 걸까요?
Kimoon Lee
Kimoon Lee17mo ago
네 모든 API 호출이 2번씩 되고 있다면 코드가 중복 수행되는 형태는 아닌지 확인부탁드립니다.
0
0OP17mo ago
로컬, 개발서버에선 콜백이 정상적으로 한 번 호출되는데 N클라우드에서 진행하였을 땐 위와 같은 문제가 발생됩니다. 코드 중복 수행은 아닌 것 같습니다.
Kimoon Lee
Kimoon Lee17mo ago
그럼 N 클라우드 쪽 설정 등을 확인해 보시기 바랍니다(N클라우드 관련 내용을 알지 못해서 어디를 봐야 할지 가이드 드리지 못하는점 양해 부탁드립니다) 저희가 특정 환경에서 오는 요청을 중복으로 처리하거나 하지는 않습니다.
0
0OP17mo ago
그러면 결제 요청이 두 번 된 건지 확인이 가능할까요? 주문번호: 202309200005010 입니다
Kimoon Lee
Kimoon Lee17mo ago
승인 API 이신건가요? 승인 API 기준으로 10시 20분 22.348, 10시 20분 22.656 으로 0.3초 간격으로 요청이 두번 왔습니다.
0
0OP17mo ago
/v1/payments/confirm이 아닌 결제위젯(javascript)으로 결제완료 시 보낸 요청입니다.
김차장
김차장17mo ago
결제창은 1번 생성되었어요 문의 내용을 이렇게 생각하면 될까요? 간략하게는 이렇게 결제가 진행되는데요 1. 결제위젯에서는 결제창 생성을 하고 2. 결제창에서 인증을 마치고 3. 전달된 paymentKey 로 승인요청 여기에서 1. 결제창생성 이 두번 되었는지? 를 물어보신것으로 이해했어요
0
0OP17mo ago
2번이요
김차장
김차장17mo ago
결제창 생성이 한번되었고 인증결과도 한번 드렸어요 두번 받으신 로그가 있으신가요? get method 로 들어오는 input 를 찍으시면 보이실거에요
0
0OP17mo ago
2023-09-20 10:20:22.047 INFO 2867418 --- [0.0-8009-exec-8] c.h.s.i.HttpInterceptor : 요청 URL : https://regs.gijangcmc.or.kr/gijang/rsv/returnSuc response :{"mId":"tvivarepublica","lastTransactionKey":"42967DBF7BF7B121948A88CF5C859C21","paymentKey":"k0A2Ga1QqXjExPeJWYVQpyA0n7AB9g349R5gvNLdzZwO6oKl","orderId":"202309200005010","orderName":"자유수영_테스트-1","taxExemptionAmount":0,"status":"DONE","requestedAt":"2023-09-20T10:19:39+09:00","approvedAt":"2023-09-20T10:20:22+09:00","useEscrow":false,"cultureExpense":false,"card":{"issuerCode":"71","acquirerCode":"71","number":"48897200**691*","installmentPlanMonths":0,"isInterestFree":false,"interestPayer":null,"approveNo":"00000000","useCardPoint":false,"cardType":"신용","ownerType":"개인","acquireStatus":"READY","amount":50000},"virtualAccount":null,"transfer":null,"mobilePhone":null,"giftCertificate":null,"cashReceipt":null,"cashReceipts":null,"discount":null,"cancels":null,"secret":"ps_kYG57Eba3Gpv7qdNkOkQVpWDOxmA","type":"NORMAL","easyPay":null,"country":"KR","failure":null,"isPartialCancelable":true,"receipt":{"url":"https://dashboard.tosspayments.com/receipt/redirection?transactionId=tviva20230920102022h6ap9&ref=PX"},"checkout":{"url":"https://api.tosspayments.com/v1/payments/k0A2Ga1QqXjExPeJWYVQpyA0n7AB9g349R5gvNLdzZwO6oKl/checkout"},"currency":"KRW","totalAmount":50000,"balanceAmount":50000,"suppliedAmount":45455,"vat":4545,"taxFreeAmount":0,"method":"카드","version":"2022-11-16"} 2023-09-20 10:20:22.452 INFO 2867418 --- [.0-8009-exec-11] c.h.s.i.HttpInterceptor : [preHandle] 2023-09-20 10:20:22.452 INFO 2867418 --- [.0-8009-exec-11] c.h.s.i.HttpInterceptor : 요청 URL : https://regs.gijangcmc.or.kr/gijang/rsv/returnSuc response :{"code":"ALREADY_PROCESSED_PAYMENT","message":"이미 처리된 결제 입니다."}
김차장
김차장17mo ago
첫번째 요청에서 승인결과를 {"mId":"tvivarepublica","lastTransactionKey":"42967DBF7BF7B121948A88CF5C859C21","paymentKey":"k0A2Ga1QqXjExPeJWYVQpyA0n7AB9g349R5gvNLdzZwO6o(이하생략) 이렇게 받으셨구요 동일한 요청을 한번 더 보내셔서 response :{"code":"ALREADY_PROCESSED_PAYMENT","message":"이미 처리된 결제 입니다."} 이렇게 받으셨어요 confirm 을 두번 호출하면 이렇게 나오거든요
0
0OP17mo ago
returnSuc호출 시 confirm을 호출하게 되어있거든요 근데 returnSuc가 왜 두 번 호출 되었는지 의문입니다.
김차장
김차장17mo ago
음... 저희가 한번 드렸는데 두번 호출된거면.. 혹시 returnSuc 로 get data 가 전달되었을때 Http 응답코드를 200 으로 주실까요? 검토가 좀 필요해서 취소선처리해놓을게요 returnSuc 호출 내에 confirm 이 있으면 200 코드를 못받았다고 생각해서 다시 호출될 수 있을거같다는 생각이 듭니다. confirm 호출은 단일 method 나 function 으로 구성하셔서 별도 통신을 하셔야해요 검토가 필요해서 취소선처리 해놓을게요
Kimoon Lee
Kimoon Lee17mo ago
https://regs.gijangcmc.or.kr/gijang/rsv/returnSuc 이부분이 2번 호출된게 이슈인것 같구요.
0
0OP17mo ago
Kimoon Lee
Kimoon Lee17mo ago
보통은 refresh 등으로 2번 호출이 되는 경우가 가장 많긴 합니다. 모든 결제가 다 저렇게 2번씩 호출이 되시는 건가요?
0
0OP17mo ago
네 결제 및 취소 2번씩 호출됩니다.
김차장
김차장17mo ago
returnSrc 로 paymentKey, amount, orderId 가 들어온 후 confirm 을 어떻게 처리하시는지 소스코드를 전달주실 수 있으실까요? techsupport@tosspayments.com 으로 보내주시면 됩니다.
0
0OP17mo ago
내부적으로 확인해보고 다시 말씀드리겠습니다. 감사합니다 🙂
김차장
김차장17mo ago
넵, 원인파악이나 내용 업데이트 되셨을때 다시 들려주시면 감사하겠습니다. 🙏
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.

Did you find this page helpful?