Version 2
새로 나온결제위젯(결제창형)을 연동하는 방법이에요. renderPaymentWindow()로 결제창을 렌더링하고, paymentRequest 이벤트에서 결제를 요청해요.
주문서 안에 결제 UI를 직접 렌더링하고 싶다면 결제위젯(주문서형) 연동을 추천드려요.
개발자센터의 API 키 메뉴에서 결제위젯 연동 키를 확인하세요. 테스트 키와 라이브 키의 차이점도 함께 확인하세요.
먼저 주문서 페이지에 결제창형 결제를 연결할게요. 스크립트 태그 또는 패키지 매니저로 토스페이먼츠 SDK를 설치하고, 아래 순서대로 메서드를 호출하세요.
1️⃣ tossPayments.widgets()로 결제위젯 인스턴스를 생성하세요.
2️⃣ 결제창을 렌더링하기 전에 widgets.setAmount()로 결제 금액을 설정하세요.
3️⃣ widgets.renderPaymentWindow()로 결제창을 렌더링하세요.
4️⃣ 구매자가 결제수단을 선택하면 paymentRequest 이벤트가 발생해요.
5️⃣ 콜백에서 widgets.requestPayment()로 결제를 요청하세요.
위 코드를 실행한 다음에 '결제하기' 버튼을 누르면 결제창이 열려요. 테스트 클라이언트 키를 사용했다면 실제로 결제되지 않으니 안심하세요.
결제창에서 구매자의 결제수단을 인증하는데요. 인증 결과는 리다이렉트 URL로 확인할 수 있어요.
결제 인증이 성공했다면 성공 리다이렉트 URL(successUrl)의 쿼리 파라미터로 결제 정보를 확인하고 검증해주세요. 인증이 실패했다면 이동한 실패 리다이렉트 URL(failUrl)의 쿼리 파라미터로 에러를 확인해주세요.
성공 리다이렉트 URL에는 아래 쿼리 파라미터가 추가돼요. 쿼리 파라미터의 amount 값과 setAmount()의 amount 파라미터의 값이 같은지 반드시 확인하세요. 클라이언트에서 결제 금액을 조작하는 행위를 방지할 수 있습니다. 만약 값이 다르다면 결제를 취소하고 구매자에게 알려주세요.
일반결제 및 해외 간편결제의 paymentType은 NORMAL입니다. 브랜드페이 결제의 paymentType은 BRANDPAY입니다.
쿼리 파라미터의 amount 값과 최초 결제 요청값이 같은지 반드시 확인하세요. 값이 다르면 결제를 중단하고 구매자에게 안내해주세요.
서버에 paymentKey, orderId, amount를 저장하세요. 결제 승인, 조회, 취소에 모두 필요한 값이에요.
실패 리다이렉트 URL에는 아래 쿼리 파라미터가 추가돼요.쿼리 파라미터로 돌아오는 에러 코드, 메시지를 확인하고 필요한 로직을 구현해주세요.
구매자가 결제 과정을 취소했을 때 발생하는 에러예요. 취소 안내 메시지를 보여주고 다시 결제를 시도하도록 유도하세요.
결제 중 오류가 발생했을 때 반환되는 에러예요. 오류 메시지를 확인하고 필요하면 고객센터 또는 기술지원 채널로 문의하세요.
마지막 단계로 결제 승인 API를 호출하세요. API 키 준비하기 단계에서 확인한 결제위젯 연동 키 > 시크릿 키를 사용해요.
시크릿 키와 :을 base64로 인코딩해서 Basic 인증 헤더를 아래와 같이 만들어주세요. :을 빠트리지 않도록 주의하세요. 비밀번호가 없다는 것을 알리기 위해 시크릿 키 뒤에 콜론을 추가합니다.
시크릿 키는 클라이언트, GitHub 등 외부에 노출되면 안 됩니다.
시크릿 키 뒤에 :을 추가하고 base64로 인코딩합니다. :을 빠트리지 않도록 주의하세요.
아래 명령어를 터미널에서 실행하면 인코딩된 값을 얻을 수 있습니다.
결제 승인 API의 헤더에 인코딩한 시크릿 키 인증 헤더를 추가하세요. 요청 본문 파라미터에는 앞 단계에서 리다이렉트 URL로 받은 paymentKey, orderId, amount를 넣어주세요. 아래 예제 코드에는 내 테스트 결제의 paymentKey 값을 넣어 실행해주세요.
결제 승인 API의 결과로 HTTP 200 OK와 함께 Payment 객체가 돌아오면 결제가 정상적으로 완료됐어요.
Payment 객체에 구매자가 선택한 결제수단 정보가 있는지 확인하세요. 카드를 선택해서 결제했다면 아래와 같이 card 필드에 카드 정보를 확인할 수 있어요. 간편결제를 선택했다면 응답이 조금씩 바뀌는데요. 자세한 내용은 간편결제 응답 확인 가이드를 참고하세요.
결제 승인에 실패하면 HTTP 4XX 또는 5XX 코드와 에러 객체를 받아요. 결제 승인의 전체 오류 목록은 에러 코드를 참고하세요. 테스트 환경에서 결제 승인 실패를 재현해보고 싶다면 토스페이먼츠 API 테스트 헤더를 사용해보세요.
오류원인
결제 승인에서 요청에 문제가 있으면 NOT_FOUND_PAYMENT_SESSION 에러가 발생해요.
해결 방법
-
결제 요청이 완료된 이후 10분 이내에 결제를 승인해야 해요. 10분이 지나면 결제 데이터가 유실되어 승인이 불가해요.
-
결제 요청했을 때 돌려받은
paymentKey와 결제 승인에 사용한paymentKey가 같은 값인지 확인하세요. -
결제 요청에 사용한 클라이언트 키와 결제 승인에 사용한 시크릿 키가 매칭된 키값인지 확인하세요.
오류원인
카드사에서 해당 카드를 거절했을 때 REJECT_CARD_COMPANY 에러가 발생해요. 원인은 비밀번호 오류, 한도 초과, 포인트 부족 등 다양해요.
해결 방법
에러 메시지를 확인해서 원인을 파악하고 구매자에게 올바른 안내를 해주세요.
오류원인
API 키값 또는 주문번호가 최초 요청한 값과 다르면 FORBIDDEN_REQUEST가 발생해요.
해결 방법
-
결제 요청에 사용한 클라이언트 키와 API 호출에 사용한 시크릿 키가 매칭된 키값인지 확인하세요.
-
orderId,paymentKey값이 최초 결제 요청한 값과 같은지 확인하세요.

