인앱 결제
소모품, 비소모품처럼 한 번 구매로 완료되는 상품에 사용하는 일회성 결제 SDK예요. 서비스 소개와 콘솔 설정 방법은 인앱 결제 소개 문서를 참고해 주세요.
연동 흐름은 아래 순서를 따라 주세요.
상품 목록 가져오기 —
getProductItemList결제 요청하기 —
createOneTimePurchaseOrder미결 주문 복원하기 —
getPendingOrders,completeProductGrant주문 상태 조회하기 —
getCompletedOrRefundedOrders또는 주문 상태 조회 API
IAP 객체
IAP는 인앱 결제 관련 함수를 모아둔 객체예요.
시그니처
프로퍼티
getProductItemListtypeof getProductItemList
인앱 결제로 구매할 수 있는 상품 목록을 가져오는 함수예요. 자세한 내용은 getProductItemList를 참고하세요.
createOneTimePurchaseOrdertypeof createOneTimePurchaseOrder
인앱 결제를 요청하는 함수예요. 자세한 내용은 createOneTimePurchaseOrder를 참고하세요.
getPendingOrderstypeof getPendingOrders
대기 중인 주문 목록을 가져와요. 자세한 내용은 getPendingOrders 문서를 참고하세요.
getCompletedOrRefundedOrderstypeof getCompletedOrRefundedOrders
인앱결제로 구매하거나 환불한 주문 목록을 가져와요. 자세한 내용은 getCompletedOrRefundedOrders 문서를 참고하세요.
completeProductGranttypeof completeProductGrant
상품 지급 처리를 완료했다는 메시지를 앱에 전달해요. 자세한 내용은 completeProductGrant 문서를 참고하세요.
상품 목록 조회하기
SDK 함수: getProductItemList
getProductItemList 는 인앱 결제로 구매할 수 있는 상품 목록을 담은 함수예요. 상품 목록을 화면에 표시할 때 사용해요.
시그니처
반환값
Promise<{ products: IapProductListItem\[] } | undefined>상품 목록을 포함한 객체를 반환해요. 앱 버전이 최소 지원 버전(5.219.0)보다 낮으면
undefined를 반환해요.
프로퍼티
IapProductListItem
인앱결제로 구매할 수 있는 상품 하나의 정보를 담은 객체예요. 상품 목록을 화면에 표시할 때 사용해요.
sku · 필수 ·
string상품의 고유 ID예요. IAP.createOneTimePurchaseOrder를 호출할때 사용하는
productId와 동일한 값이에요.
예제
구매 가능한 인앱결제 상품목록 가져오기
예제 응답
예제 앱 체험하기
apps-in-toss-examples 저장소에서 with-in-app-purchase 코드를 내려받아 체험해 보세요.
일회성 결제 요청하기
SDK 함수: createOneTimePurchaseOrder
createOneTimePurchaseOrder 함수는 인앱 결제 결제창을 띄우고, 사용자가 결제를 진행해요. 만약 결제 중에 에러가 발생하면 에러 유형에 따라 에러 페이지로 이동해요.
시그니처
파라미터
options · 필수
인앱 결제를 필요한 옵션이에요.
params.sku · 필수 ·
string주문할 상품의 ID예요.
params.processProductGrant · 필수 ·
(params: { orderId: string }) => boolean | Promise<boolean>주문이 만들어진 뒤 실제로 상품을 지급할 때 호출해요.
orderId를 받아서 지급 성공 여부를true또는Promise<true>로 반환해요. 지급에 실패하면false를 반환해요.
onEvent · 필수 ·
(event: SuccessEvent) => void | Promise<void>결제가 성공했을 때 호출해요.
event.type · 필수 ·
"success"이벤트의 타입이에요.
"success"를 반환해요.event.data · 필수 ·
IapCreateOneTimePurchaseOrderResult인앱 결제가 완료되면 결제 세부 정보와 상품 정보를 담아 반환해요. 반환된 정보로 결제한 상품의 정보를 화면에 표시할 때 사용할 수 있어요.
event.data.orderId · 필수 ·
string결제 주문 ID이에요. 결제 완료 후 결제 상태를 조회할 때 사용해요.
event.data.displayName · 필수 ·
string화면에 표시할 상품 이름이에요.
event.data.displayAmount · 필수 ·
string통화 단위가 포함된 가격 정보예요.
event.data.amount · 필수 ·
number상품 가격 숫자 값이에요.
event.data.currency · 필수 ·
string상품 가격 통화 단위예요.
event.data.fraction · 필수 ·
number가격을 표시할 때 소수점 아래 몇 자리까지 보여줄지 정하는 값이에요.
event.data.miniAppIconUrl ·
string | null미니앱 아이콘 이미지의 URL이에요.
onError · 필수 ·
(error: unknown) => void | Promise<void>결제 과정에서 에러가 발생했을 때 호출해요. 에러 객체를 받아서 로깅하거나 복구 절차를 실행할 수 있어요.
에러코드
INVALID_PRODUCT_ID : 유효하지 않은 상품 ID이거나, 해당 상품이 존재하지 않습니다. 상품 ID를 확인해주세요.
유효하지 않은 상품 ID이거나, 해당 상품이 존재하지 않을 때 발생해요.
반환값
() => void
앱브릿지 cleanup 함수를 반환해요. 인앱결제 기능이 끝나면 반드시 이 함수를 호출해서 리소스를 해제해야 해요.
예제
특정 인앱결제 주문서 페이지로 이동하기
예제 앱 체험하기
apps-in-toss-examples 저장소에서 with-in-app-purchase 코드를 내려받아 체험해 보세요.
미결 주문 조회하기
SDK 함수: getPendingOrders
getPendingOrders 는 결제는 완료되었지만 상품이 아직 지급되지 않은 주문 목록을 가져오는 함수예요. 조회된 주문 정보를 확인하여 사용자에게 상품을 지급하세요. createOneTimePurchaseOrder 함수 호출 후 결과를 받지 못한 경우에도 해당 주문을 조회할 수 있어요.
앱 버전이 최소 지원 버전(안드로이드 5.234.0, iOS 5.231.0)보다 낮으면 undefined를 반환해요.
시그니처
반환값
Promise<{ orders: Order\[] } | undefined>대기 중인 주문 목록(orders)을 포함한 객체를 반환해요. 앱 버전이 최소 지원 버전(안드로이드 5.234.0, iOS 5.231.0)보다 낮으면
undefined를 반환해요.
반환 객체 프로퍼티
orders · 필수 ·
Order\[]대기 중인 주문의 배열이에요. 대기 중인 주문이 없으면 빈 배열을 반환해요.
orders[].orderId · 필수 ·
string주문의 고유 ID 예요.
orders[].sku · 필수 ·
string주문 상품의 고유 ID 예요.
orders[].paymentCompletedDate · 필수 ·
string결제가 완료된 시점을 나타내요.
예제
상품 지급 완료 처리하기
SDK 함수: completeProductGrant
completeProductGrant 함수는 대기 중인 주문의 상품 지급을 완료 처리하는 함수예요. 사용자에게 상품을 지급하고 completeProductGrant 함수를 호출하여 지급 상태를 완료로 변경하세요.
앱 버전이 최소 지원 버전(안드로이드 5.231.0, iOS 5.231.0)보다 낮으면 undefined를 반환해요.
시그니처
파라미터
{ params: { orderId: string } }
결제가 완료된 주문 정보를 담은 객체예요.
params.order ·
Id string주문의 고유 ID예요. 상품 지급을 완료할 주문을 지정할 때 사용해요.
반환값
Promise<boolean | undefined>상품 지급이 완료됐는지 여부를 반환해요. 앱 버전이 최소 지원 버전(안드로이드 5.233.0, iOS 5.233.0)보다 낮으면
undefined를 반환해요.
예제
완료·환불 주문 조회하기
SDK 함수: getCompletedOrRefundedOrders
getCompletedOrRefundedOrders 는 인앱결제로 구매하고 환불한 주문 목록을 가져와요. 인앱결제 결제 및 상품 지급이 완료된 주문건와 환불된 주문건을 조회할 수 있어요.
결제는 완료되었지만 상품이 아직 지급되지 않은 주문건은 조회되지 않아요. getPendingOrders함수를 통해 orderId를 조회하여 사용자에게 상품을 지급한 후 completeProductGrant함수를 통해 상품 지급을 완료 처리하세요.
앱 버전이 최소 지원 버전(안드로이드 5.231.0, iOS 5.231.0)보다 낮으면 undefined를 반환해요.
시그니처
반환값
Promise<{ CompletedOrRefundedOrdersResult } | undefined>페이지네이션을 포함한 주문 목록 객체를 반환해요. 앱 버전이 최소 지원 버전(안드로이드 5.231.0, iOS 5.231.0)보다 낮으면
undefined를 반환해요.
반환 객체 프로퍼티
hasNext · 필수 ·
boolean다음 페이지가 있는지 여부예요.
`true`면 더 많은 주문이 남아 있어요.nextKey선택 ·
string | null · null다음 페이지 조회를 위한 커서 키예요. 이전 응답의
nextKey값을 사용해요. 첫 호출 시에는 생략하거나null로 전달해요.orders · 필수 ·
Array주문 정보를 담은 배열이에요. 각 요소는 하나의 주문을 나타내요.
orders[].orderId · 필수 ·
string주문의 고유 ID 예요.
예제
서버에서 API로 인앱결제 주문 상태를 직접 조회할 수 있어요. 승인 혹은 환불 응답을 받지 못한 경우에도 사용할 수 있어요.
Content-type:
application/jsonMethod:
POSTURL:
/api-partner/v1/apps-in-toss/order/get-order-status요청 헤더
헤더를 포함하지 않으면 모든 주문 건이 응답돼요.
헤더에
x-toss-user-key값을 포함하면 해당 userKey의 주문 건만 응답돼요.요청 파라미터
응답
status (enum)
응답 예제
출시 전에는 반드시 샌드박스 앱 환경에서 인앱결제가 정상적으로 동작하는지 테스트해 주세요. 샌드박스에서는 실제 결제(과금)는 발생하지 않으며, 모든 결제가 테스트 시나리오로 처리돼요.
1. 샌드박스에서 상품 목록 조회 시 동작
샌드박스 앱에서
getProductItemList()를 호출하면 콘솔에 등록된 인앱결제 상품 중 노출 상태가 ON인 상품만 조회돼요.실제 콘솔에 등록한 상품 목록이 그대로 내려와요.
콘솔에서 노출 OFF인 상품은 샌드박스 앱에서도 보이지 않아요.
2. 필수 테스트 시나리오
샌드박스에서는 아래 3가지 테스트를 반드시 각각 수행해야 해요. 각 시나리오마다 앱이 올바르게 대응하는지 확인해 주세요.
① 결제 성공 테스트
성공 콜백(
event.type: success)이 정상적으로 전달되는지 확인해요.실제 결제(과금)는 발생하지 않아요.
SDK 1.1.3 이상에서는 파트너사의 상품 지급 로직까지 성공해야 최종 성공으로 처리돼요.
[동영상 보기](../../../../resources/development/iap/iap_sandbox_test_1.mp4)
② 결제 성공(서버 실패) 테스트
결제는 성공했지만 파트너 서버의 지급 로직이 실패하는 경우를 반드시 테스트해야 해요.
앱은 다음 처리를 지원해야 해요:
지급 완료 후
completeProductGrant호출앱 재실행 시
getPendingOrders로 미결 주문 복원사용자에게 지급 실패 안내
실서비스에서도 충분히 발생 가능한 시나리오이므로 반드시 테스트해야 해요.
[동영상 보기](../../../../resources/development/iap/iap_sandbox_test_2.mp4)
③ 에러 테스트
결제 도중 오류가 발생하는 다양한 상황을 미리 시뮬레이션하세요.
[동영상 보기](../../../../resources/development/iap/iap_sandbox_test_3.mp4)
3. 테스트 체크리스트
상품 목록 노출
✔️
콘솔에서 등록한 상품이 정상적으로 내려오는지
결제 성공 테스트
✔️
event.data 처리, 지급 로직, UI 처리
결제 성공 + 서버 지급 실패 (주문 복원)
✔️
미결 주문 복원 및 재지급 처리
에러 테스트
✔️
에러 UI, 오류 처리, 재시도 흐름
주문 상태 조회 API
권장
서버 검증 및 정합성 확인
PURCHASED
주문 완료
인앱 결제 및 상품 지급이 모두 완료된 상태
PAYMENT_COMPLETED
결제 완료
SDK 1.1.3 이상에서 결제는 완료되었으나 상품 지급이 실패한 상태
FAILED
주문 실패
결제가 실패한 경우
REFUNDED
주문 환불됨
환불 완료된 경우
ORDER_IN_PROGRESS
주문 진행 중
주문이 생성되었지만 결제/지급 처리가 완료되지 않은 경우
NOT_FOUND
주문 없음
해당 주문번호를 찾을 수 없는 경우
MINIAPP_MISMATCH
상품 불일치
주문한 상품이 해당 앱의 상품이 아닌 경우
ERROR
내부 오류
시스템 내부 오류 발생 시
orderId
String
요청한 주문번호
sku
String
주문한 상품 ID
statusDeterminedAt
String
주문 완료 일시 (yyyy-MM-dd'T'HH🇲🇲ss, KST 고정) status가 REFUNDED일 경우 환불 완료 일시
status
String
주문에 대한 상태 (enum)
reason
String
상태에 대한 설명
orderId
String
Y
결제 생성 후 취득한 주문번호(uuid v7)
x-toss-user-key
string
N
토스 로그인으로 획득한 userKey 값
마지막 업데이트
도움이 되었나요?