인앱상품의 종류 및 결제 프로세스

인앱상품의 종류

  • 원스토어 인앱결제 API V5(SDK V17)는 관리형(Managed product)과 월정액(Subscription) 두 가지 타입의 인앱상품을 지원합니다.

  • 우선, 각 타입이 어떤 특성을 가지고 있는지 확인하신 후 본인이 제공하는 상품에 맞게 인앱상품 목록을 구성해보시기 바랍니다.

    구분내용

    관리형 상품 (Managed product)

    구매 후 소비(consume)하기 전까지 재구매가 되지 않는 상품입니다. 해당 상품을 다시 구매하기 위해서는 소비(consume) 처리를 해야 합니다. 관리형 상품의 특성을 이용하면, API V4(SDK V16)에서 제공하는 소비성/영구성/기간제 형태의 인앱상품을 서비스할 수 있습니다.

    월정액 상품 (Subscription)

    한 번 가입하면 매월 일정 금액이 자동결제되는 상품으로, 자동결제 갱신(재결제)은 원스토어에서 처리합니다. 자동결제 해지 기능은 SDK query 또는 서버 API를 이용하여 앱에서 직접 구현해주셔야 합니다. 서버 API를 활용한 월정액 상품 구매내역(상태) 조회 및 자동결제 해지/해지취소 기능은 인앱결제 서버 API 페이지를 참고하시기 바랍니다.

인앱결제 프로세스

  • 원스토어에 인앱결제는 크게 세가지 프로세스로 구분됩니다.

    • 원스토어 회원 로그인

    • 인앱상품 구매

    • 인앱상품 소비(consume) / 월정액 상품 관리

  • 원스토어 인앱결제 서비스를 이용하기 위해서는 원스토어 회원으로 가입 및 로그인되어 있는 상태이어야 합니다. 만약, 고객이 원스토어의 유효한 회원이 아닌 경우(로그인 정보 없음, 탈퇴, 휴면회원 등) 원스토어는 로그인 실패 에러코드(RESULT_NEED_LOGIN, 에러코드 대한 상세 내용은 인앱결제 레퍼런스 페이지 내 '서버 응답코드' 참고)를 전달합니다. 로그인 실패 에러코드를 전달받을 경우 원스토어에 로그인할 수 있도록 로그인 프로세스를 호출해주시거나, 고객에게 원스토어 앱을 실행하여 로그인하도록 가이드를 해주시면 됩니다.

  • 원스토어에 인앱상품 구매를 요청할 경우 고객에게 원스토어 결제화면이 제공되며, 결제 결과(결제성공, 결제실패, 결제취소 등)를 앱에 전달합니다. 인앱상품 구매 프로세스는 관리형, 월정액 상품 모두 동일합니다.

  • 관리형 상품(Managed product)의 경우, 구매가 완료된 인앱상품은 소비(consume) 처리가 되기 전까지는 재구매가 불가능합니다. 구매한 인앱상품의 서비스의 제공이 완료된 경우, 소비(consume) 프로세스를 호출하면 고객은 해당 인앱상품을 다시 구매할 수 있습니다.

  • 각 프로세스별 상세 안내는 아래를 참고하시기 바랍니다.

    네트워크 단절 등의 문제로, 고객은 결제를 완료하였으나 개발사에 결제정보 전달이 누락되어 인앱상품이 지급되지 않는 경우가 발생할 수 있습니다. 구매정보 가져오기(getPurchases) 및 소비(consume) 기능을 활용하여 구매가 완료되었으나 미지급된 내역이 있는지 확인 후 미지급된 상품이 지급처리될 수 있도록 프로세스를 구현하는 것을 권장합니다.

원스토어 회원 로그인

  • 원스토어 인앱결제 SDK에서 제공하는 API는 원스토어 회원 로그인 상태에서 동작을 하도록 설계되어 있습니다.인앱결제 API를 이용할 때 로그인 실패와 관련된 에러코드를 전달받는다면, 원스토어에 로그인할 수 있도록 로그인 프로세스를 호출해주시거나 고객에게 원스토어 앱을 실행하여 로그인하도록 유도해야 합니다.

    • 원스토어 앱을 실행하여 로그인 유도

      • 팝업 등을 이용하여 '원스토어 앱을 실행하여 원스토어에 로그인 해주세요.'와 같이 안내하고, 고객이 직접 원스토어 앱을 구동하여 로그인을 하도록 유도하는 방식입니다.

    • getLoginIntent 사용하여 로그인 프로세스 호출

      • 원스토어 API V5는 원스토어 로그인 화면을 보여줄 수 있는 인텐트(intent)를 전달합니다. 개발사는 getLoginIntent API를 이용하여 로그인 인텐트를 전달 받아 Activty에서 제공되는 startActivityForResult를 통해 원스토어 로그인 화면을 표시합니다. 사용자가 로그인을 완료하면 onActivityResult의 파라미터로 전달되는 data내에 로그인 결과가 포함되어 전달됩니다. 결과 코드값을 검증하여 로그인 성공으로 확인되면, 원스토어 인앱결제 SDK의 API를 이용 할 수 있습니다. 아래 그림은 개발사 앱과 원스토어 간 로그인 프로세스를 나타낸 것입니다.

인앱상품 구매

  • 인앱상품을 구매하려면 상품 정보를 확인한 뒤에 인앱상품 구매 화면 intent를 얻고 Activity에서 제공되는 메서드인 startActivityForResult를 통해 인앱상품 구매 화면을 표시합니다. 결제가 완료되면 Activity 내 onActivityResult의 파라미터로 전달되는 data 내의 Bundle 객체에 구매 정보가 포함되어 전달됩니다. 결과코드 값을 검증한 후에 성공으로 확인되면 인앱상품에 해당하는 아이템을 지급하는 프로세스를 진행합니다. 아래 그림은 개발사 앱과 원스토어 간 인앱상품 구매 프로세스를 나타낸 것입니다.

  • 인앱상품을 지급하기 위한 구현방법은 인앱상품의 타입에 따라 달라질 수 있습니다. 아래는 각 인앱상품 타입별 구현 방식에 대한 설명입니다. 보다 상세한 내용은 사례별 인앱결제 구현 방법 페이지를 참고하시기 바랍니다.

    • 관리형 상품(managed product)

      • 소비성 형태의 상품 개발사 앱 내에서 통용되는 가상화폐나 소모성 아이템 등 1회성 구매 상품을 말합니다. 구매 프로세스 완료 후 바로 구매한 상품을 소비(consume)시켜야 하며, 소비 처리가 완료된 후 상품을 지급하면 됩니다.

      • 영구성 형태의 상품 광고 제거 버전, 강의 동영상 구매 상품과 같이 한 번 구매하면 영구적으로 권한을 소유할 수 있는 상품을 말합니다. 이러한 형태의 상품은 구매 후 소비(consume) 처리를 하지 않고 상품(서비스)을 제공하면 됩니다. 소비되지 않은 상태이기 때문에 고객은 해당 상품을 다시 구매할 수 없으며(영구성 상품의 특성 상 1회만 구매), 개발사는 고객의 구매내역을 확인하여 영구성 상품을 제공할 수 있습니다.

    • 월정액 상품(subscription) 매월 자동으로 결제가 갱신되는 월정액 형태의 상품으로, 인앱결제 API를 이용하여 최초 1회만 구매(가입)하면 원스토어가 매월 자동으로 결제를 갱신(재결제)합니다. 월정액 상품의 경우 기존 인앱결제 API V4(SDK V16)의 월정액 상품과 동일합니다.

인앱상품 소비(consume)

  • 관리형 상품(managed product)의 특징은 구매 후 소비(consume)하기 전까지 재구매가 되지 않는 것입니다. 따라서, 관리형 상품 중 반복 구매가 가능한 소비성 상품을 제공할 경우에는 반드시 소비(consume) 처리를 해야 고객이 해당 상품을 다시 구매할 수 있습니다. 인앱결제 SDK에서 제공하는 getPurchases API를 호출하면 아직 소비되지 않은 관리형 상품의 목록을 조회할 수 있으며, 소비되지 않은 상품은 consumePurchase API를 이용하여 소비 처리를 할 수 있습니다. 사용자가 앱(게임)을 실행하는 시점 또는 앱(게임)에 로그인하는 시점에 위의 API들을 호출하여, 미지급된 상품이 있는지 사전에 체크하고 상품을 지급하는 프로세스를 추가하는 것을 권장합니다. 아래 그림은 개발사 앱과 원스토어 간 인앱상품 소비 프로세스를 나타낸 것입니다.

월정액 상품 관리(상태변경)

  • 월정액 상품(subscription)은 최초 1회만 구매(가입)하면 원스토어가 매월 자동으로 결제를 갱신(재결제)합니다. 고객이 가입한 월정액 상품 정보 및 가입상태 조회, 월정액 가입 해지 기능은 개발사의 앱에서 제공하여야 합니다. 월정액 상품을 해지할 경우 요청 즉시 해지되지 않고 '해지 예약' 상태로 변경되며, 다음 결제 시점에 재결제되지 않고 해지 완료처리가 됩니다. 즉, 결제 당월까지는 상품을 사용할 수 있으며 getPurchases API 호출 시 purchase list에 포함되어 전달됩니다. 아래 그림은 월정액 상품 해지 프로세스를 나타낸 것입니다.

Last updated