88 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
넵
아 안녕하세요 지금 위젯결제를 통해서 결제 시스템을 붙히고 있는데요.
db저장시점이 궁금해서요
DB는 가맹점의 자산이라서 원하시는 시점에 저장을 하시면 되는데요
자바스크립트 , 자바를 사용하구 있구요
권장드리는 시점은 인증전 insert, 인증후 update, 승인후 update 이렇게 3군데입니다.
음 제가 orderId 를 자바에서 생성 insert 그후 페이지에서
승인요청 update 까지 4군데이군요
그 id를 가지고 자바스크립트에서 requestPayment 에 사용하는데
스프링 사용하시나요?
넵
개발자 화면에서
자바스크립트 orderid를 바꾸고 버튼을 눌러서 테스트 결제를 하게되면
그 id로 결제가 되어버리더라구요
개발자 도구에서 orderId 를 바꾸시는 사유는 어떤것일까요?
외부에서 변경 또는 가격 변동시킬까 테스트중입니다.
가격이 변경과 주문번호 재생성은 좀 다른 얘기인데요
아직 결제요청이 되지 않은 상태의 주문서에서는 주문번호를 갱신하실 필요가 없습니다
주문번호에 수량이나 금액같은 정보가 담기나요?
아 그건 아닙니다.
결제버튼을 누르기 전 자바에서
orderId를 uuid로 생성후 db에 저장해놓고
자바스크립트에서 버튼클릭후 인증하고 나서의 상태를 체크해서 비교후 update 하려하는데
개발자도구에서 변경되는 사항이 있어서요
상태를 체크해서 비교후
이건 어떤 상태인가요?처음 자바에서 orderId,가격, status ,userid 를 db에 저장후
페이지 에서 결제 되고난 orderId와 가격을 비교해서 맞으면 status를 update 하려고 하는데
페이지에서 변경이 가능해서 저장시점을 여쭈려합니다.
처음 자바에서 orderId,가격, status ,userid 를 db에 저장후
이때 insert 하고 결제버튼 누르기전까지 페이지 이동은 없는거죠?네 없습니다.
그리고 인증 후 successUrl 로 paymentKey, amount, orderId 가 넘어오면 받아서 controller 보내서 검증하실거고
네 맞습니다.
검증 끝난상태에서 바로 api.tosspayments.com 으로 통신하시면 됩니다
검증끝난상태에서 승인요청 정보 update 한번 더 치시구요
승인응답 받으시고 최종 update 치시면됩니다
결제를 진행해봐야 검증을 할수있는건가요?
api.tosspayments.com 은 controller 단이나 service 단에서 처리하셔야 하구요
음 지금 로직응
은
검증이라는것이
동일한 주문번호로 동일한 금액이 맞는지를 검증하는것이라서요
인증응답수신 - 검증 - 승인요청 - 승인응답수신 - view 에 결과전달
이렇게요
/service 로 입력하면 uuid를 생성 orderid, 가격,status 을 db 저장후 페이지 이동이 되구요
이 값을 model로 받아서 자바스크립트에서 requestPayment 를 하게 되구요
success 가 뜨면
아깐 이동 없으시다고 하셨는데요 insert 후에 페이지 이동이 있는걸까요?
/confirm 에서 확인이 되면 api.tosspayments.com
컨트롤러 에서
그 페이지 이동하면서
db저장이있습니다.
네
상품을 클릭하면
`/confirm
/service로 이동하게 되구요
이건 어떤 의미일까요?
그떄 db에 저장한 uuid 를 그 페이지에서
api.tosspayments.com 으로 승인요청하는것도 confirm 이라고 표현하기도 하거든요
그리고 인증 후 successUrl 로 paymentKey, amount, orderId 가 넘어오면 받아서 controller 보내서 검증하실거고
이부분입니다.
"https://api.tosspayments.com/v1/payments/confirm 이쪽 호출 컨트롤러 입니다.
성공페이지에서요
네
지금 저는 requestPayment 전에 미리 uuid를 생성해 orderid를 저장해놧구요
네
abcd라고 저장을 했다고 하면
개발자도구에서
zzzz로 변경후
requestPayment
요청하게되면
successUrl 로 paymentKey, amount, orderId 가 넘어오더라구요
네 맞습니다
orderId 가 zzzz
로
네
오게되구요 이게 결제까지 진행을 한상황인거죠?
아뇨 인증까지 완료된것이에요
승인요청은 안된거구요
그 인증이라는게 카드결제 같은
상태는 끝났고 실제 결제는 안된거
맞을까요?
인증요청은 frontend 에서 이뤄지구요, 앱카드 인증같이
인증요청 후에 인증응답이 paymentKey, amount, orderId 이렇게 successUrl 로 오게되어요
그걸 받아서 controller 로 전달해서 승인요청을 하셔야해요
승인요청은 backend 이구요
네 맞습니다
보통은...주문번호 자체를 검증하지는 않긴해요, 금액 위변조가 있었는지를 검증하시면 됩니다
음 제가 여쭙고 싶었던건 결제정보를 개발자 도구에서 변경하면 카드결제 화면까지 안가고 판단이 가능할지 였습니다.
음
insert 를 어느 시점에 하느냐에 따라 달라질거같네요
금액을 변경해서 결제하게되면 payment의 amount값이
변경될까요?
금액 위변조 검증은
가맹점에서 결제창을 열기전 상태
와
인증결과 후
의 금액을 비교하는것이에요
그래서 결제창을 열기전부터 위변조 되어있다면 검증이 안됩니다
음
네 이해되었습니다. 혹시 그럼 변조가 파악이 된다면
승인요청 전에 파악이 되었다면 결제실패로 자체 리턴하시면되구요
failurl로 자체 리텅 하면
되겟군요
승인을 막지못했고 승인이후에 알았다면 자체적으로 자동취소를 운영하셔야해요
backend 통신.. 넵 맞습니다.
감사합니다.
넵 좋은 서비스 만드시길 바랍니다
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
아 혹시 금액위변조 검증 테스트를 진행할수잇는 방법이 잇을까요?
직접 테스트 결제를 하시면서 가맹점에서 밸리데이션을 하시면 됩니다
이해가 잘 되는데 풀어서 설명 가능하실까요
무슨 상황에서의 금액 위변조를 이야기 하시는 건가요?
결제 체크 중인데 혹시 클라이언트 단에서 결제금액을 수정해서 결제요청을 했을시 막을 로직을 추가중입니다만 .개발자도구 정도에선 금액을 변경후 결제요청이 안되서 혹시 테스트가 가능한 방법이 있을까 여쭙니다. db에 미리 orderid와 금액을 입력 해놧구요 인증 완료시 결제금액과 비교로직을 하고잇는데 그 금액을 변경해서 신청이 가능한 방법이 잇을까 하고 여쭤요
처음 결제요청과
승인요청시의 금액이 다르면 결제가 안되는 것이 정상이고,
이것이 토스페이먼츠가 수행하는 금액위변조 확인 케이스 인것 같은데요.
여기에 저희가 어떤 것을 더 지원 해드리면 될까요?
음.. 아닙니다. 따로 위변조가 되지않으면 괜찮을것 같습니다.
아 혹시 이건 다른 질문인데 혹시 가상계좌 발급시 bankCode만 받을수있던데
위변조가 발생하는 위치가 클라이언트 단이라서..(가맹점 웹, 가맹점 앱)
requestPayments에 올리는 금액을 하드코딩 하시면 위변조 테스트가 가능합니다.
물론 insert 는 request 전에 하셔야하구요
renderPaymentMethods에서 결제금액을 올리고
requestPayment 에선 결제금액이 올라가지않아서
금액을 하드코딩 이 안되는것 같습니다.
위변조는 공격자의 패턴과 방식을 이해하셔야 하는데요
해킹이 있다면 PG시스템을 해킹하는건 아니구요
가맹점에서 PG에 인증요청되는 내용을 해킹하는것입니다.
결제창이 열릴때 PG는 올려준 금액으로 세팅해서 결제금액이 표시되구요
아네 감사합니다.
그래서 위변조가 제대로 먹히게되면 결제창에서 보여지는 금액이 공격자가 세팅한 금액으로 되는것이에요
아 그뒤 로직에서 db와 비교하고있어서 괜찮을꺼 같습니다. 혹시 가상계좌에서 bankCode 를 받아서 화면에 표시할때 제가 치환해서 해야하나요?
네 맞습니다.
"bankCode": "20",
이런식으로 받으실거구요
https://docs.tosspayments.com/reference/codes#%EC%9D%80%ED%96%89-%EC%BD%94%EB%93%9C
여기 내용을 DB에 넣어놓고 사용하시면 됩니다
기관 코드 | 토스페이먼츠 개발자센터
파라미터로 전달할 수 있는 기관(카드사, 은행, 통신사) 코드 리스트입니다.
아 직접 db넣고 사용이군요 네 알겠습니다. 감사합니다.
혹시 입금이 된다면
웹훅을 통해서 받아야 할까요?
입금 확인 은 어떻게 알수잇을까요
네 맞습니다. 입금확인은 웹훅으로 받으셔야해요
가상계좌 웹훅 연동하기 | 토스페이먼츠 개발자센터
가상계좌를 연동한 뒤 웹훅으로 입금 알림을 받을 수 있는 방법을 알아봅니다.
여기를 참고하세요
감사합니다. 좋은 하루되세요
아 마지막으로 문자나 이메일로 보내주시는 건 건당 사용료가 나오나요?
가상계좌 발급정보 보내드리는걸 말씀하시는거죠?
무료입니다.
감사합니다. 혹시 테스트도 실제 현금을 보내면 될까요?
테스트키를 사용하신다면 입금없이 입금처리를 직접 해보실 수 있어요

제가 드린 문서들을 한번씩 정독 부탁드립니다.
반드시 도움이 되실거에요