가이드
결제 생성하기

결제 생성하기

결제 생성 요청에 대해 좀 더 자세히 알아봅니다. 아래 예제는 결제 생성 API가 지원하는 모든 파라미터를 사용한 코드입니다.

예제 코드

curl https://pay.toss.im/api/v2/payments \
-H "Content-Type: application/json" \
-d '{
  "orderNo": "1",                                                       # 토스몰 고유의 주문번호 (필수)
  "amount": 25000,                                                      # 결제 금액 (필수)
  "amountTaxFree": 0,                                                   # 비과세 금액 (필수)
  "productDesc": "A티셔츠",                                               # 상품 정보 (필수)
  "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq",                             # 상점의 API Key (필수)
  "retUrl": "https://pay.toss.im/payfront/demo/completed?orderno=1",    # 결제 완료 후 연결할 웹 URL (필수)
  "retCancelUrl": "https://pay.toss.im/payfront/demo/cancel",           # 결제 취소 시 연결할 웹 URL (필수)
  "autoExecute": true,                                                  # 자동 승인 설정 (필수)
  "resultCallback": "https://pay.toss.im/payfront/demo/callback",       # 결제 결과 callback 웹 URL (필수-자동승인설정 true의 경우)
  "callbackVersion": "V2",                                              # callback 버전 (필수-자동승인설정 true의 경우)
  "amountTaxable": 22727,                                               # 결제 금액 중 과세금액
  "amountVat": 2273,                                                    # 결제 금액 중 부가세
  "amountServiceFee": 0,                                                # 결제 금액 중 봉사료
  "expiredTime": "2024-06-17 12:47:35",                                 # 결제 만료 예정 시각
  "cashReceipt": true                                                   # 현금영수증 발급 가능 여부
}'

결제 생성 API의 Endpoint

POSThttps://pay.toss.im/api/v2/payments

필수 Parameters

결제 생성 요청 시 반드시 아래 9가지 값을 함께 보내주셔야합니다.

  1. 상점 주문번호 : 추후 상점 주문 정보와 결제 정보를 매칭하기 위해 필요
  2. 결제 금액 : 손님으로부터 받을 금액
  3. 비과세 금액 : 손님으로부터 받을 금액중 비과세 금액
  4. 상품명 : 결제할 상품에 대한 정보
  5. 상점 API Key : 이곳에 '테스트용 API Key'를 넣으면 테스트 결제가, '실거래용 API Key'를 넣으면 진짜 출금되는 결제가 생성됩니다.
  6. 구매자 인증 완료 후 연결할 URL : 구매자가 결제를 확인하고 인증 완료하면 이 파라미터를 통해 설정한 URL로 구매자를 보내드립니다. 일반적으로 구매 완료 페이지 또는 구매 완료 페이지로 연결할 수 있는 곳을 지정합니다.
  7. 구매자가 결제 취소 시 연결할 URL : 구매자가 결제를 취소하면 이 파라미터를 통해 설정한 URL로 구매자를 보내드리고, 토스는 자동으로 해당 거래건을 취소처리 합니다. 상점에서 취소거래 구분이 필요하다면 자체적으로 거래구분 처리 해주세요.
  8. 자동 승인 설정 : 구매자가 인증을 완료하면 토스가 자동으로 승인을 진행합니다. 가맹점은 결과 값만 확인해 주시면 됩니다.
  9. 결제 결과 callback URL : 토스 서버가 출금을 성공하면 가맹점 서버로 결제 성공 callback을 요청합니다. 이후 가맹점에서는 결제완료 상태변경 등의 로직을 처리할 수 있습니다. (이 값은 자동 승인 설정이 'true'일 경우에만 필수 값입니다.)

모바일 웹뷰 결제 가이드

모바일 웹뷰 결제는 앱투앱(App to App) 이동이 필요합니다. 앱투앱 이동을 위해 필요한 준비사항은 다음과 같습니다.

안드로이드

Intent URI 사용

intent://pay?payToken={payToken}#Intent;scheme=supertoss;package=viva.republica.toss;end`

Intent URI 파싱 처리

가맹점 앱에서 Intent URI를 파싱하여 처리해야 합니다. 잘못된 Activity로 라우팅되지 않도록 아래와 같이 구현합니다.

val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME).apply {
  // URI를 브라우저에서 열 수 있도록 설정
  addCategory(Intent.CATEGORY_BROWSABLE)
  component = null
  selector = null
}
try {
  startActivity(intent)
} catch (_: ActivityNotFoundException) {
  // 토스 앱 미설치 시 스토어로 이동
  intent.`package`?.let { packageName ->
    val marketIntent = Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$packageName"))
    startActivity(marketIntent)
  }
}

아이폰(iOS)의 경우

Universal Link 사용

https://ul.toss.im?scheme=supertoss%3A%2F%2Fpay%3FpayToken%3D{payToken}

주의사항

토스 앱 설치 여부 확인 및 처리

  • ‘앱으로 결제하기’ 클릭 시, 앱 설치 유무를 체크합니다
    • 설치되어 있는 경우: 앱을 호출
    • 설치되어 있지 않은 경우: 앱스토어로 이동

iframe 사용 금지 권장

  • 토스는 iframe 방식 호출을 공식적으로 지원하지 않습니다.
  • 새 창을 띄워 호출하는 방식을 권장합니다.

결제 만료 기한 (expiredTime)

이 파라미터를 통해 '결제 생성 후, 언제까지 결제 승인을 진행할 수 있는지' 설정할 수 있습니다. '결제 대기' 상태인 결제건의 만료 기한이 도래하면 토스 서버에서 자동으로 결제를 취소합니다.

상점 혹은 판매 물품에 특성에 따라 결제 만료 기간을 길게 혹은 짧게 설정할 수 있습니다.

재고의 변동이 적고, 구매자의 결제가 급하지 않다면 결제 만료 기한을 길게 설정하세요. 구매자는 먼저 주문만 해두고 원하는 시점에 결제할 수 있습니다. 재고의 변동이 크거나 '결제 대기' 상태를 오래 지속하고싶지 않은 경우엔 결제 만료 기한을 짧게 설정하세요.

결제 만료 기한은 최대 60분이며, 따로 설정하지 않는 경우 기본 15분으로 설정됩니다.

현금영수증 발급 가능 여부 (cashReceipt)

현금영수증 발급 가능 여부를 설정할 수 있습니다. 카드결제 혹은 문화상품권이나 백화점상품권, 모바일 쿠폰 등 과세 대상에서 제외되는 유가증권 등의 상품은 현금영수증 발행이 불가하며, 토스 머니와 같이 현금성 결제건에 한하여 현금영수증 발행이 가능합니다.

  • true : 현금영수증 발급 가능 (값을 설정하지 않으면 기본 true)
  • false : 현금영수증 발급 불가

자동 승인 여부 (autoExecute)

토스페이에서는 두 가지 옵션을 제공합니다. 구매자 인증이 완료되면 토스에서 즉시 출금을 시도하고 결제를 완료시키는 방법과 구매 상품의 재고 상황에 따라 '최종 승인'의 주체가 가맹점이 될 수도 있습니다. 결제 상점의 판매 상품에 따라 두 가지 방식을 고려하여 옵션을 활용할 수 있습니다.

결제 생성 시, autoExecute를 'true'로 설정 : 구매자 인증완료 후 출금시도와 함께 결제완료 상태를 전달합니다.

결제 생성 시, autoExecute를 'false'로 설정 : 해당 결제건은 가맹점의 최종 승인 전까진 대기 상태에 머무르게 됩니다. (PAY_APPROVED 상태) 결제 승인 API를 통해 최종 승인 (execute API): PAY_APPROVED 상태의 결제건에 대해 승인을 요청하면 출금을 시도하고 출금 완료 시 결제 완료로 상태를 변경합니다. 이때 토스머니 잔액을 체크하고 잔고가 부족하다면 충전 후 출금됩니다.

아래 그림을 참고하세요.

결제 승인 흐름

복합과세 처리 (amount-)

전체 결제 금액 중 '비과세' 처리해야할 금액이 섞여있거나 부가세, 봉사료 비중을 원하는대로 설정하고 싶다면 결제 생성 시 '복합과세' 파라미터를 이용하세요.

  • amountTaxable : 결제 금액 중 '과세금액' 비중
  • amountTaxFree : 결제 금액 중 '비과세금액' 비중
  • amountVat : 결제 금액 중 '부가세' 비중
  • amountServiceFee : 결제 금액 중 '봉사료' 비중 토스에서는 총 금액과 비과세 금액만 필수로 체크하고 있습니다. 복합과세 설정이 필요하다면 네 가지 값을 설정해 주셔야 하며, 네 가지 값의 합은 총 결제 금액(amount)과 반드시 동일해야 합니다. 동일하지 않을 경우 에러가 발생합니다. 위 파라미터를 통해 설정한 값은 현금 영수증 발행 시 그대로 반영됩니다.

위 파라미터 값을 설정하지 않는 경우, 자동으로 아래와 같이 처리됩니다.

  • 부가세 : 전체 금액(amount)을 11로 나눈 후 소수점 첫째 자리에서 올림

  • 과세금액 : 전체 금액에서 부가세를 뺀 나머지 값

  • 비과세금액, 봉사료 : 0 단, 현금영수증 발행 불가 결제(cashReceipt = false)인 경우, 아래와 같이 처리됩니다.

  • 과세금액 : 전체 금액(amount)과 동일

  • 부가세, 비과세금액, 봉사료 : 0