키인결제 연동 문의 드립니다.
일반결제만 사용하다가 최근에 키인결제(카드번호결제)도 추가하였는데, 일반결제는 정상적으로 결제가 되는데 키인결제에서 오류가 나서 문의드립니다.
먼저 저희 서비스는, 웹에서 토스 결제 위젯을 통해 결제한 후, 자사 백엔드 서버에서 결제승인API(/v1/payments/confirm)를 호출하는 방식으로 구현되어있습니다.
API 문서를 보다가 이해가 안가는 부분이 있는데... 키인결제를 하려면 /v1/payments/confirm 아니라 /v1/payments/key-in를 호출해야하는 건가요?
49 Replies
⏳ 잠시만 기다려주세요! 곧 답변드리겠습니다
오류 문의일 경우 아래 정보를 미리 전달해주시면, 빠른 답변에 도움이 됩니다.
- 주문번호(orderId) :
- 문의 내용 :
(img를 함께 첨부해주시면 도움이됩니다)
* 계약관련 내용은 1544-7772로 문의주세요.
* 주말/공휴일에는 답변이 늦을 수 있어요.
일반결제와 키인결제는 사용해야하는 상점아이디가 다릅니다.
상점아이디에 매핑되는 clientKey, apiKey 도 다르구요
키인결제도 두가지 방식이 있습니다
키인결제 - 카드정보를 PG에서 입력하는 형식(PG UI가 나타남)
키인결제 - 카드정보를 가맹점에서 입력하고 Backend API만 호출 (PG UI가 없음)
결제위젯을 띄울 때는 둘 중에 어떤 MID를 사용해야하나요? 현재 일반결제용 MID를 사용하는데, UI에서는 키인결제도 보이는 것이 맞나요?
UI에서는 키인결제도 보이는 것이 맞나요?
이 부분 약간만 자세하게 알려주세요"카드정보를 PG에서 입력하는 형식"을 사용중입니다~! 그러면 웹에서 결제후 서버에서는 /v1/payments/confirm 처리만 해주면 되는건가요?
네 맞습니다
https://docs.tosspayments.com/reference#%EC%B9%B4%EB%93%9C-%EB%B2%88%ED%98%B8-%EA%B2%B0%EC%A0%9C
이 내용은 Backend API 로 승인만 내는 형태에요
코어 API | 토스페이먼츠 개발자센터
토스페이먼츠 API 엔드포인트(Endpoint)와 객체 정보, 파라미터, 요청 및 응답 예제를 살펴보세요.
결제위젯 띄울대는 clientKey, apiKey가 필요없나요?
고객이 키인결제를 했는지 일반결제를 했는지 어떻게 구별하나요?
일반적인 clientKey, apiKey 가 아닌 위젯키를 사용하시면 되구요

이 내용을 확인해주세요

연동하기 | 토스페이먼츠 개발자센터
토스페이먼츠의 간편한 결제 연동 과정을 한눈에 볼 수 있습니다. 각 단계별 설명과 함께 달라지는 UI와 코드를 확인해보세요.
❤️ 기술문의 경험이 어떠셨나요?!
간단히 코멘트 남겨주세요! 제품 발전에 큰 힘이 됩니다.
프론트에서는 위젯키만 사용하고, 백엔드에서는 MID별로 부여된 clientKey, apiKey 를 사용해야하는 건가요? 잘 이해가 안가네요 ㅠㅠ
(퇴사한 개발자분이 구현해놓은 코드를 수정중인데) MID 별로 부여되는 API 연동 키(클라이언트 키)를 사용하여 결제위젯을 띄어두셨더라구요. 그러면 위젯키가 아닌 API키로도 결제위젯을 띄울 수는 있다는 뜻인건가요?
이전 개발자 분이 언제 작업하셨는지는 모르겠지만,
결제위젯은 많은 변화가 있었습니다.
"결제위젯 키" 를 이용해야
결제위젯UI 설정을 무리 없이 이용할 수 있습니다.
"결제위젯 키" 의 클라이언트키를 프론트에서 사용하고
"결제위젯 키" 의 시크릿키를 서버에서 이용 합니다.
결제위젯을 통해 키인 결제 이용할 수 있고
UI 설정에서 키인 MID 를 추가하여, 해당 UI 를 띄우는 방식으로 진행 하거나
위에서 이해한 것처럼 키인 MID 로 API 를 호출하는 방법이 있습니다. (v1/payments/key-in)
원하는 것을 선택해서 진행하시면 되겠습니다.
안녕하세요:) 다시 문의드립니다~!
어제 답변해주신 것을 참고하여, 프론트에서 "결제위젯 클라이언트키"를 서버에서 "결제위젯 시크릿키"를 사용하도록 수정하여습니다.
그러나 여전히 키인결제에서 "INVALID_API_KEY" 에러가 납니다. (일반결제는 정상작동)
- 국내 일반결제 MID : onvaben64w
- 키인결제 MID : kvp_hyukarw2vg
무슨 제품에 어떤 키를 사용하셨을때 위 에러가 발생하고 있나요?
"키인API" 에 키인결제 MID 의 API Key 를 이용하시고 있는건가요?
아니면, 결제위젯에 키인결제를 추가해서 결제위젯 통해서 결제하기를 하고 있는건가요?
어떤 제품에서 어떤 키를 사용해서 위 에러가 발생하는지를 조금 더 자세히 설명 부탁 드립니다.
결제위젯 통해서 키인결제 사용하고 있고, 결제위젯키의 클라이언트/시크릿키를 이용하고 있습니다. (MID별 키는 사용하고 있지 않습니다.)
프론트에서 결제위젯을 통한 키인결제 후에, 서버에서 /v1/payments/confirm으로 결제 승인을 요청할 때 "INVALID_API_KEY" 가 납니다.

서버에서 승인 API 호출의 header 에 값은 어떻게 설정 하셨나요?
결제위젯키의 시크릿키로 헤더 값 설정하였습니다~
네, 그 헤더값을
어떻게 설정하셨나요
TOSS_API_KEY = base64.b64encode((api_key + ':').encode("utf-8")).decode('utf-8')
💡 정보 제출
민감 정보를 안전하게 제출해주세요
TOSS_API_KEY 결과 콘솔로그로 찍어서 전달 해주세요.
API 호출 header 에
TOSS_API_KEY 어떻게 넣고 있으신지도 API 호출 부분 전체를 알려주시면 좋을것 같네요
Authorization : Basic ----
이 부분이요
제가 이동중이라서, 코딩은 지금 어려운데 ㅠㅠ TOSS_API_KEY 결과는 나중에 다시 전달드리도록 하겠습니다!
그런데 일반결제와 키인결제 모두 동일한 로직을 타고 있는데... 일반결제와 키인결제에서 헤더 구성을 다르게 해야하나요?
어떤 키를 사용하셨는지를 보고, 이를 기반으로 상점 설정 보려는 겁니다
결제위젯키를 이용했다면
키인결제 MID 상태를 보려고 하는것이고
결제위젯키가 아니라 개별키를 이용하고 있는거라면
개별키카 아니라 결제위젯 키 이용하라로 안내 하려고 하는 것이니
승인 API 시크릿키 값, 이따가 가능하실때 전달 해주세요
"secretKey는 공개된 채널에 공유할 수 없습니다. 안전하게 제출 가능한 링크를 관리자에게 요청해주세요!" 라고 메시지 블락이 되었는데, 어떻게 공유드리면 될까요?
💡 정보 제출
민감 정보를 안전하게 제출해주세요
여기로 제출해주시면 됩니다
제출했습니다!
지금 메일로도 문의주시고 계시고, 여기에서도 문의 주시고 계시는데요
한곳에서만 대응 해드려도 될까요?
아! 넵! 여기서 답변 받겠습니다~
네, 그럼 중간 정리하면 아래 맞는지 확인 부탁 드립니다.
키인 결제 추가된 결제위젯 UI 로
결제위젯 키 클라이언트 키로 결제위젯 렌더링하고
결제위젯 키 시크릿키로 서버에서 호출 하고 있다
일반결제는 문제 없이 진행 되지만,
키인결제때 문제가 생긴다
네, 맞습니다!
위 정보제출을 통해서
서버쪽 API 호출하는 소스코드를 스크린샷 등을 통해서 전달 해주실 수 있으실까요?
위젯키로 넘어온것이 맞는지 다시 확인 해보고자 함 입니다.
제출했습니다~
괜찮으시면,
위젯 라이브키로, 제가 연동해서 키인 결제를 내봐도 괜찮을까요?
바로 취소처리는 하겠습니다
넵!
우선
지금 위젯키로 진행하고 있다고 하시니까
새롭게 위젯키로 바꾼 것으로 테스트 해보실 수 있을까요?
그 다음에 제가 연동 한곳에서 진행 하겠습니다
저희쪽에서 다시 실결제 테스트 해보는 것을 말씀하시는건가요? 실결제 후에 관련 정보 보내드려야하나요?
네, 지금 공유주신 정보로는
렌더링도 위젯키로 잘 하셨고
서버 쪽 호출도 위젯키로 되고 있으니
새롭게, 위젯으로 키인결제 진행 해주시고
결과를 공유 부탁 드립니다.
위 상황에도 안되시면, 제가 라이브 위젯키로 직접 연동해서 결제 내고 취소 해보겠습니다.

저 paymentKey 복사할 수 있게 전달 부탁 드립니다
"paymentKey":"XJxNkgDKzOEP59LybZ8BYxPOqK27mBr6GYo7pRe10BMQwla2"
로그에서는
위젯키 쓰시지 않았고, 개별 연동 시크릿 키로 쓴것으로 나옵니다.
이제 제가
위젯키로 키인 결제 해보고 결과 공유 하겠습니다.
우선 API 호출 부분 설정을 다시 봐주세요..
로그는 위젯키로 들어오지 않았습니다.
넵! 감사합니다
결제 잘 됩니다.
paymentType == KEYIN 일때 위젯 시크릿키로 승인 잘 되도록 설정이 되어 있나요?
위젯키 설정이 제대로 되어있지 않았습니다 ㅠㅠ 해결할 수 있도록 많이 도와주셔서 정말 감사드립니다 ♡👍
네 확인 감사합니다