Open hyoseok0 opened 11 months ago
상품 구분
subscription 구분
one-time purchase 구분
one-time purchase 의 consumable
왜 one-time purchase 의 consumable?
어떻게 consumable 로 클래스 묶음 구매내역 설정?
상품 PK
android 상품 특성
3일 이내, Google Play 에 acknowledge (service backend 에 결제정보가 반영됐다고 api 호출을 통해 Google Play backend 에 알려주기) 하지 않으면, Google 에서 환불 처리
one-time purchase 와 subscription 모두 동일하게 적용
android 의 one-time purchase 는 구매 이후 일정 기간 이후에 결제 완료되는 pending purchase 라는 상품이 있지만, 클래스 묶음 결제 정책과 상관없습니다.
참고로 아래 flow 입니다.
참고
기본
아키텍쳐
기본 결제 동기화 flow
app 에서 Cake service backend 서버로 호출하는 api
[POST] /curriculum/bundle/{curriculumBundleId}/purchase
[POST] /curriculum/bundle/{curriculumBundleId}/finishPurchase
api 호출 시나리오 상세
purchaseUpdateListener
재수행api 구현 시 유의 사항
DB timeout 이나 network 오류 등 일시적인 환경 문제로 api 처리 실패 시, 위와 같은 FE 나 스토어의 여러 보완 로직으로 대부분 재처리됨
cake service backend api 가 Google Play/Apple Store 반영 없이 부정하게 호출될 수 있어, 각 api 에서 Google Play/Apple Store 반영 여부 확인 로직 필요
(1) api
receipt
) 로 Apple Store 에서 구매내역 정보를 조회하고, FE 전달 값과 비교해서 구매내역 검증(2) api
api 가 동일 parameter으로 여러번 호출될 수 있어, 여러번 호출되더라도 중복결제를 막고 동일 response 를 return 하도록 설정
동일 parameter 로 기처리됐는지 여부를 validation 체크하고, 기처리된 경우 추가 처리를 하지 않고 정상 처리됐다고 return
기본
Google Play/Apple Store 별 처리 방법
Google Play
아래 flow 로 처리
참고)
Apple Store
아래 flow 로 처리
notificationType
) 만 REFUND_REVERSED
로 다름기본
기본 결제 동기화 flow
언제 스토어 결제 내역과 Cake DB 간 불일치가 있을까?
일시적인 (2) api 처리 실패 시, 대부분 앱과 스토어 보완로직으로 해결될텐데, 추가 데이터 보정이 필요할까?
어떻게 해결할까?
개괄