김태현
김태현2mo ago

웹훅 지급대행 검증

안녕하세요. 토스페이먼츠 지급대행을 이용중인데, https://docs.tosspayments.com/reference/using-api/webhook-events 검증을 해보려고 합니다. 그런데, 여러 방식으로 입력해보아도 검증값이 다르게 나와서요. 우선 제가 검증해본 것은 이렇습니다. 개발자 센터 - 웹훅 이벤트 페이지의 이벤트 발생시간의 payload를 가져오고 기존에 웹훅 이벤트를 받았을때의 tosspayments-webhook-transmission-time 헤더값을 가져옵니다. payload를 json으로 직렬화 한 후 HMACSHA256(payload:tosspayments-webhook-transmission-time) == base64.decode(signature v1 값 2개 순회) 위의 예시 해싱하는 데이터예시는 (일부 데이터 숨김, 날짜데이터는 정확) "{"eventType":"payout.changed","createdAt":"2024-12-02T12:15:20+09:00","version":"2022-11-16","eventId":"eventId","entityType":"payout","entityBody":{"id":"id","refPayoutId":"regPayId","destination":"destination","scheduleType":"EXPRESS","payoutDate":"2024-12-02","amount":{"currency":"KRW","value":1111},"transactionDescription":"대금지급","requestedAt":"2024-12-02T10:35:02+09:00","status":"COMPLETED","error":null,"metadata":null}}:2024-12-03T11:00:38+09:00" 의 문자열입니다. 혹시나 해서 뒤의 시간부분을 {"2024-12-03T11:00:38+09:00"}, {2024-12-03T11:00:38+09:00} 으로도 진행해보았습니다. 혹시 처리 잘못된 값이 있을까요??
웹훅 이벤트 | 토스페이먼츠 개발자센터
토스페이먼츠에서 제공하는 웹훅 이벤트 목록입니다.
53 Replies
토스페이먼츠 BOT
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) : - 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요. * 주말/공휴일에는 답변이 늦을 수 있어요.
OMG
OMG2mo ago
수신한 payload 의 웹훅 발송시간인 createdAt 을 사용해주세요 {payload}:{tosspayments-webhook-transmission-time} 로 생성해주세요
토스페이먼츠 BOT
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
김태현
김태현OP2mo ago
말씀하신데로 원본 Json:{createdAt}로 작성하였는데, 동작하지 않네요. 매번 웹훅 요청시마다 tosspayments-webhook-transmission-time 헤더값, tosspayments-webhook-signature 헤더값이 변경되는데 이거는 상관없는 걸까요?
OMG
OMG2mo ago
상점ID의 보안키를 hmac 비밀키로 byte 형식으로 변환하고, Json:{tosspayments-webhook-transmission-time} <-- 이것도 바이트로 변환 하신거 맞으실까요? 웹훅 을 받으셨으면 받은 웹훅의 payload 에 있는 createdAt 를 가져다가 검증하시는거구요. tosspayments-webhook-signature 값은 여러개가 될 수 있는데 이 중에 어느 한개와도 일치하면 검증되었다고 판단하시면 됩니다.
김태현
김태현OP2mo ago
HMACSHA256 시크릿키로 상점 보안키를 바이트화 해서 사용하고 해시처리할 데이터에는 payload를 바이트변환후 넣습니다.
OMG
OMG2mo ago
웹훅 검증이 목적이므로, 당연히 payload 는 받은 그대로 사용해주셔야하구요~
김태현
김태현OP2mo ago
네 받아온 payload 문자 그대로 payload에 넣어주었습니다. (공백, 줄바꿈등) 괜찮으시다면 해시할 데이터를 어떻게 넣었는지 보여드릴 수 있습니다. 웹훅 을 받으셨으면 받은 웹훅의 payload 에 있는 createdAt 를 가져다가 검증하시는거구요. << 이게 문서와는 조금 달라서 변경된 사항일까요??
김태현
김태현OP2mo ago
No description
OMG
OMG2mo ago
한 3주 전에도 제가 테스트했을 때 검증 값은 문제 없었어서 당시에도 디스코드 문의도 해소 되었었는데요. 확인할 수 있는 웹훅 정보 남겨주시겠어요? 저도 한번 확인해보겠습니다
김태현
김태현OP2mo ago
어떤것을 드리면 확인해주실 수 있을까요??
OMG
OMG2mo ago
포스트 생성시 주신 정보가 실제 값인가요?
"{"eventType":"payout.changed","createdAt":"2024-12-02T12:15:20+09:00","version":"2022-11-16","eventId":"eventId","entityType":"payout","entityBody":{"id":"id","refPayoutId":"regPayId","destination":"destination","scheduleType":"EXPRESS","payoutDate":"2024-12-02","amount":{"currency":"KRW","value":1111},"transactionDescription":"대금지급","requestedAt":"2024-12-02T10:35:02+09:00","status":"COMPLETED","error":null,"metadata":null}}:2024-12-03T11:00:38+09:00"
"{"eventType":"payout.changed","createdAt":"2024-12-02T12:15:20+09:00","version":"2022-11-16","eventId":"eventId","entityType":"payout","entityBody":{"id":"id","refPayoutId":"regPayId","destination":"destination","scheduleType":"EXPRESS","payoutDate":"2024-12-02","amount":{"currency":"KRW","value":1111},"transactionDescription":"대금지급","requestedAt":"2024-12-02T10:35:02+09:00","status":"COMPLETED","error":null,"metadata":null}}:2024-12-03T11:00:38+09:00"
김태현
김태현OP2mo ago
id같은 값은 제외하고 일자만 남겨서
OMG
OMG2mo ago
어떤 웹훅 payload 인지 알아야 검증을 해볼 수 있으니 비교할 웹훅 정보를 요청 드렸습니다. 저도 한번 해보려고요
김태현
김태현OP2mo ago
다 남겨드려도 괜찮을까요?? 기존 페이로드
토스페이먼츠 BOT
💡 정보 제출
민감 정보를 안전하게 제출해주세요
OMG
OMG2mo ago
여기에 남겨주세요
김태현
김태현OP2mo ago
네 방금 전달드렸습니다.
OMG
OMG2mo ago
확인했습니다! 제가 전에 테스트했던 케이스에서는 우연히 createdAt 값이 맞아 떨어졌던것 같네요;; 내용은 정정해둘게요. 저희 웹훅 나갔는데 401 응답을 받았습니다. 200 이 아니어서인지 헤덜 로그에 tosspayments-webhook-* 관련 정보가 없네요.
김태현
김태현OP2mo ago
아 그러면 매번 헤더값을 이용해서 검증하는게 맞군요? 한번 저희 로그로 전송되는 걸로 다시 한번 해보도록 하겠습니다.
OMG
OMG2mo ago
네 그렇습니다. 저희쪽 헤더 로그가 없어서 체크까지는 진행 못해봤습니다.
김태현
김태현OP2mo ago
기대리님 제가 로그에 찍인 헤더정보들 드릴테니 한번 부탁드려도 될까요?
OMG
OMG2mo ago
네 좋습니다. 저도 다시 한번 해볼게요
토스페이먼츠 BOT
💡 정보 제출
민감 정보를 안전하게 제출해주세요
OMG
OMG2mo ago
여기에 추가로 남겨주세요 🙏
김태현
김태현OP2mo ago
전달드렸습니다.
OMG
OMG2mo ago
네 확인했습니다. 참, payload 확인하다보니 금액이 저희 로그에는 "amount":{"currency":"KRW","value":178020.0} 로 되어 있던데, 아까 제출해주신 정보에는 178020 이더라고요. 이 부분도 체크 한번 부탁 드립니다
김태현
김태현OP2mo ago
아하 저는 개발자센터 -> 웹훅 이벤트에있는 payload를 긁어온건데
OMG
OMG2mo ago
개발자센터 웹훅에 지급대행 웹훅 로그가 보이나요? 원래 제공이 안되었었거든요. 언제 추가되었지.. 😅
김태현
김태현OP2mo ago
바꿔보기는 했는데
김태현
김태현OP2mo ago
No description
김태현
김태현OP2mo ago
이벤트 발행 시간 누르면 나오더라구요 .0을 붙이거나 안붙이거나 둘다 안되네요.. 아 잠시만요 음 안되는군요..
OMG
OMG2mo ago
일단 개발자센터 웹훅 페이로드랑 실제 로그(이전에 검증에 성공했던 로그 포맷) 포맷도 개행문자 등 조금 다른것 같습니다. 개발자센터 말고 웹훅 실제 수신한 payload 를 봐주시는게 맞을것 같고요. 로그에 들어온 payload 랑 공유 주신 signature, transmittionTime 정보로 테스트 했을 때 다른 값이 나오면서 검증 실패하긴 하네요. 실제 웹훅 발송 후 200 처리 되는 건으로 확인을 해봤으면 합니다.
김태현
김태현OP2mo ago
그러면 무조건 200나오게 처리하고 다시 문의드리는게 나을까요?
OMG
OMG2mo ago
네 그렇게 해주시면 감사하겠습니다!
김태현
김태현OP2mo ago
네 그런데 다시전송하면 401에러 나오는데 URL 변경을 하지 않았는데 다른 문제가 있을까요?
OMG
OMG2mo ago
혹시 처음에 200 떨어졌나요? 저는 401 로그만 5건 확인이 됩니다 200은 안보였고요
김태현
김태현OP2mo ago
1시 40분까지
OMG
OMG2mo ago
200 이었으면 재발송이 없을텐데 이상하군요.
김태현
김태현OP2mo ago
웹훅이 들어온것이 확인이되는데 로그를 쌓고있거든요 들어올때마다 아 제가 로깅하려고 바꾼것때문에 오류난것일수도 있어서 다시 배포하고 200응답 드리도록 하겠습니다. 지금 바로 전송하였는데, 확인해주실 수 있을까요??
OMG
OMG2mo ago
572e1ab6a75f6675165d2c2d58d44b59692f7f5106d71d90b5155729f91769bc 인데 둘다 안맞네요. 지급대행 관련 팀에 확인해봐야 할 것 같습니다. 시간이 걸릴 것 같네요. 파악 되는대로 업데이트 드리겠습니다
김태현
김태현OP2mo ago
아 괜찮습니다 급한건 아니라서 확인해주시면 감사하겠습니다. 네 감사합니다!
OMG
OMG2mo ago
별개로 혹시 mid가 어떻게 되실까요? 개발자센터에서 지급대행웹훅 API 로그 키워드 뭘로 찾아보셨는지 체크해보려고요
김태현
김태현OP2mo ago
redblue_t2 입니다.
OMG
OMG2mo ago
아 API 로그가 아니라 웹훅로그 보신거군요.
김태현
김태현OP2mo ago
네 맞습니다.
OMG
OMG2mo ago
그럼 API 로그에 안나오는건 그대로네요. 네 확인 감사합니다.
김태현
김태현OP2mo ago
넵!
OMG
OMG2mo ago
확인 되었는데, 다음과 같은 이슈였네요. 김태현님께서는 웹훅 나간 payload 그대로 사용하지 않았기 때문에 불일치했었던 케이스이고, 제가 불일치 했던 이유는 보안키를 다른 값을 넣어서 계속 불일치가 나왔네요. 정상적인 보안키로 바꾸고 아래 값으로 성공했습니다. 25917c79024384ed34e666743e8b4936170ea6071540ddeee4c2a6a4acda7465 techsupport@tosspayments.com 로 메일 주시면, 실제 응답 나갔던 payload 를 전달 드리도록 하겠습니다.
김태현
김태현OP2mo ago
기대리님 안녕하세요. 새벽까지 고생많으셨습니다. 저도 어제 의심했던 부분이 payload 받을때 파서에의해 오브젝트로 변경되는 부분이었는데, 이 부분이 맞았나봅니다. 그래서 오늘 다른날에 요청하였던 웹훅 이벤트에 관하여 payload를 문자열로만 받아서 검증하려고 시도하였는데, 또 다시 실패하더라구요. 그래서 검증처리할때 정확히 입력값을 어떻게 넣으시는지(Hash처리되는 데이터 부분) 확인받고자 이메일 드리도록 하겠습니다.
OMG
OMG2mo ago
네 확인하였고 관련 내용 메일로 회신 드리도록 하겠습니다. 메일 드렸습니다. 참고 부탁 드릴게요!
김태현
김태현OP2mo ago
기대리님 감사합니다. 시행착오가 다음과 같이 있었네요. 1. 로깅된 값만 믿고 로직에 오류가 없다고 판별한점. 2. 로깅툴의 기본설정이 pretty print 기능을 활용하여 json구조로 변환(이 과정에서 개행이 입력)되고, .0 의 소숫점값이 소실되는점 오랜시간 수정 후 정상 처리되는 것 확인하였습니다. 도움주셔서 감사합니다.
Kimoon Lee
Kimoon Lee2mo ago
네 공유해주셔서 감사합니다.

Did you find this page helpful?