# 사례별 인앱결제 구현 방법

### **개요** <a href="#id" id="id"></a>

원스토어 인앱결제 API V5(SDK V17)는 관리형(Managed product)과 월정액(Subscription) 두 가지 타입의 인앱상품을 지원합니다.\
본 문서에서는 다루는 내용은 두 가지 인앱상품 타입을 활용하여 개발사에서 원하는 서비스 형태를 구현하는 방법과 \
구매(결제) 완료한 인앱상품의 미지급 여부 확인 및 지급 방법입니다.

### **관리형 상품(managed product)** <a href="#id-managedproduct" id="id-managedproduct"></a>

* 관리형 상품의 특징은 구매 후 소비(consume)하기 전까지 재구매가 되지 않는 것입니다. 따라서, 관리형 상품 중 반복 구매가 가능한 소비성 상품을 제공할 경우에는 반드시 소비(consume) 처리를 해야 고객이 해당 상품을 다시 구매할 수 있습니다. 소비성 상품은 구매(결제)가 완료된 직후 바로 소비(comsume) 처리를 해야 하며, 인앱상품은 소비 처리가 성공한 직후 지급되어야 합니다. 인앱결제 SDK에서 제공하는 getPurchases API를 호출하면 아직 소비되지 않은 관리형 상품의 목록을 조회할 수 있으며, 소비되지 않은 상품은 consumePurchase API를 이용하여 소비 처리를 할 수 있습니다. API에 대한 상세 내용은 [인앱결제 구현](undefined-4) 페이지를 참고하시기 바랍니다. 관리형 상품의 특성을 이용하면, API V4(SDK V16)에서 제공하는 영구성/기간제 형태의 인앱상품을 서비스할 수 있습니다. 영구성/기간제 인앱상품에 대한 구현 방법은 아래에 설명되어 있습니다.

### **월정액 상품(subscription)** <a href="#id-subscription" id="id-subscription"></a>

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

### **영구성 상품과 기간제 상품** <a href="#id" id="id"></a>

* 영구성 상품과 기간제 상품은 아래와 같이 정의할 수 있습니다.
  * 영구성 상품 : 한 번 구매하면 상품(서비스)을 영구적으로 이용할 수 있는 권한을 제공합니다.
  * 기간제 상품 : 일정기간 동안 상품(서비스)을 이용할 수 있는 권한을 제공합니다. 이용 기간이 만료될 경우 재결제가 되지 않는다는 점에서 월정액 상품과 다릅니다.
* 영구성 또는 기간제 상품은 관리형 상품을 이용하여 제공할 수 있습니다. 고객이 해당 상품을 구매한 후 이용기간이 만료될 때까지 소비(consume) 처리를 하지 않고 상품(서비스)을 제공하면 됩니다.소비 처리가 되지 않은 상태이기 때문에 고객은 이용기간 내 해당 상품을 다시 구매할 수 없으며(영구성/기간제 상품의 경우 이용기간 내 1회만 결제 가능), 개발사는 고객의 구매내역을 확인하여 소비되지 않은 경우 상품(서비스)을 제공합니다. 영구성 상품의 경우 소비 처리를 하지 않은 상태로 계속 상품(서비스)을 제공하면 되며, 기간제 상품의 경우 이용기간이 만료될 경우 소비 처리를 함으로써 상품(서비스) 제공을 중단하고, 고객은 해당 상품을 다시 구매할 수 있습니다.

### **결제를 완료하였으나 상품(서비스)이 미지급된 경우** <a href="#id" id="id"></a>

* 고객은 인앱상품의 구매(결제)를 완료하였으나 네트워크 단절 또는 알 수 없는 오류 등이 발생하여, 개발사의 앱으로 결제결과를 제대로 전달하지 못하는 상황이 발생할 수 있습니다. 이 경우 고객은 정상적으로 금액을 지불하였으나 상품을 받지못하는 중대한 문제가 발생하게 됩니다. 따라서, 앱이 실행되는 시점에 미지급된 상품이 있는지 확인하는 프로세스를 추가하거나 미지급된 상품이 있는 경우 재지급할 수 있는 기능 등을 제공해야 합니다.\
  \

  * **앱 실행 시점에 미지급 상품이 있는지 확인하는 방법**
    * 인앱결제 SDK에서 제공하는 getPurchases API를 호출하여 아직 소비되지 않은 상품 목록 조회
    * 소비되지 않은 상품 중 소비 처리를 해야하는 상품은 consumePurchase API를 이용하여 소비 처리
    * 소비 처리가 완료된 구매건에 대해 상품(서비스) 지급\
      \

  * **앱 내에서 재지급할 수 있는 기능 제공**
    * 인앱결제 SDK에서 제공하는 getPurchases API를 호출하여 아직 소비되지 않은 상품 목록 조회
    * 소비되지 않은 상품 중 소비 처리를 해야하는 상품이 있을 경우 앱 내에서 재지급 버튼 등을 제공
    * 고객이 재지급 버튼을 누르면 consumePurchase API를 이용하여 소비 처리
    * 소비 처리가 완료된 구매건에 대해 상품(서비스) 지급\
      \

  * **API에 대한 상세 내용은** [**인앱결제 구현**](undefined-4) **페이지를 참고하시기 바랍니다.**
