givepro

인앱결제 개발 가이드 본문

백엔드/SpringBoot

인앱결제 개발 가이드

givepro 2022. 10. 25. 16:07
반응형

인앱결제란?

In App Purcahse, 말 그대로 애플리케이션 내에서 결제를 하는 것을 의미합니다.

인앱결제를 왜 사용하는가?

앱 내의 모든 디지털 콘텐츠에 대해서는 인앱결제를 사용해야하는 것이 현재 구글과 애플의 정책

원래 구글은 아니었으나 2022.06부터 적용

인앱결제는 어디에 적용해야 하는걸까?

이용자가 게임·콘텐츠 등 디지털 상품 구매를 위해 앱에서 결제 할때 적용하도록 한다.

그럼 현재 뭐가 문제일까?

일단 수수료가 일반적으로 알고 있는 PG의 수수료와 다릅니다. 구글의 경우 최대 30% 수수료를 내야합니다.
인앱결제를 사용하지 않으면 앞으로 앱 심사 제출에서 통과 할 수가 없습니다.
또한 적용하지 않는다면 앱을 삭제한다는 구글의 권고

 

 

현재 국내에는 구글의 인앱결제 정책은 강제적이라고 하며 금지법이 나오기도 하고 있지만, 개발자 입장에서는 대응하기 위해서는 작업을 할 수 밖에 없는 상황입니다.

그래서 이번에 인앱결제 서버를 적용해야하는 상황이 있어서 개발 방법에 대해 작성하고자 합니다.


인앱결제 개발을 진행하면서 확인해야 할 내용은 아래와 같습니다.

  1. 인앱결제 정책
  2. 인앱결제 프로세스
  3. 환불
  4. 정산
  5. 쿠폰

일반적으로 B2C, B2B 구조에서 볼 수 있는 결제 관련 항목들이다.
그렇다면 순서대로 어떤 부분들을 고려해서 개발을 진행해야하는지 알아봅시다.

1. 인앱결제 정책

콘텐츠 구매를 위한 구현 방식은 아래 방법들이 있다.

  1. 콘텐츠를 개별 인앱 상품으로 등록
  2. 다양한 금액권을 인앱 상품으로 등록
  3. 포인트 또는 캐시와 같은 제도를 사용

그러면 다양한 상품을 판매해야 하는 서비스의 경우 어떤 것이 더 적합할까?
판매하는 서비스의 정책에 따라 다르겠지만 2,3번의 케이스를 추천하고자 한다.

1번의 경우 상품의 이름을 정확하게 명시가 가능하기 때문에 주문관리 측면에서 관리하기 좋지만, 다양한 종류의 상품이 있는 경우 모든 상품을 등록 및 심사를 진행해야 한다. (만약 상품이 1만개라면...? 😱)

위와 같은 이유로 다양한 상품을 판매하려면 2,3번이 적합하다.

  • 2번의 경우 1100원, 2200원, 3300원 ... 와 같이 내부에서 정리된 금액을 기준으로 금액권으로 등록
    ex) 카카오 이모티콘 - 200초코
  • 3번의 경우 애플 및 구글의 스토어 기준에 따른 금액으로 결제하여 내부에서 사용 할 수 있는 포인트로 제공
    ex) 네이버 웹툰 - 쿠키

 

2. 인앱결제 프로세스

위 이미지는 인앱결제가 진행되는 동안 APP, API Server, In-App Server의 프로세스를 나타내고 있다.
프로세스에 대한 자세한 설명은 아래와 같다.

1. 픽캐스트 상품 정보 요청
    1. 구매이력 확인
        해당 상품을 구매한 이력이 있는지 DB에서 조회
    2. 픽캐스트 상품 정보 응답
        클라이언트로 상품 정보 및 구매 이력을 전달
    3. 구매이력이 있는 경우 콘텐츠 이용
        중복결제를 진행하지 못하도록 예외처리 진행
2. 상품 결제 요청
    1. 상품 결제 응답
3. 결제완료
    1. In-App Server를 통신하여 결제가 완료되면 In-App Request Data를 API Server로 전달
4. 상품 결제 검증 요청
    1. 결제(영수증) 검증 요청
        In-App Request Data로 In-App Server에 영수증 검증 API를 호출
    2. 결제(영수증) 검증 응답 : JSON 형태의 영수증 데이터 응답
        검증 오류시 결제 취소
    3. 결제(영수증) 응답 데이터 저장 및 구매 완료
    4. 구매 완료 응답
5. 상품 지급 완료 처리

픽캐스트가 상품의 유형이라고 생각하면 된다. (디지털 콘텐츠)
위 내용을 간단하게 요약하면
픽캐스트를 구매하려면 먼저 APP에서 인앱서버에 요청하여 결제를 진행하고 결제가 완료되면 APP의 API 서버에 검증을 요청한다. 검증이 문제 없으면 해당 결제 건에 대한 주문 정보를 업데이트 이후 최종적으로 인앱서버에 상품 지급 완료 처리를 진행한다.

인앱결제에 대한 앱의 개발 내용은 이곳에 자세하게 설명되어 있다.

 

3. 환불

그렇다면 환불은 어떻게 되는지 살펴봅시다.
우선 인앱결제의 환불은 판매하는 서비스가 주체가 아니다. 이 말은 애플과 구글이 환불을 승인한다는 소리다.
내용만 봤을때는 말도 안되는 소리같지만...? 어쩔수 없다. 인앱 정책이 그렇게 되어있으니 🥵

그럼 각 스토어의 환불 정책을 봅시다.

  • 구글
    • 환불의 기준은 48시간 이내이지만 해당 시간이 지난 후에도 환불 신청은 가능
      • 판매자 승인 절차가 없음
  • 애플
    • 환불은 14일 이내에 가능
      • 판매자 승인 절차가 없음
      • 14일 이내에는 사유불문 애플에서 일방적 환불 진행 (묻지마 환불)
      • 14일 이후에는 애플의 자체 판단에 의한 일방적 환불 진행

위 내용을 보면 결국 공통된 부분은 판매자의 승인 절차가 없다는 부분이다.
그럼 판매 서비스에서는 어떻게 해야될까? 고객은 스토어에서 환불 요청하고 서비스 쪽으로 별도 문의를 하지 않는 이상 해당 주문건은 업데이트가 되지 않을 것이다. 이러한 부분을 해결하기 위해서 각 스토어는 제공하는 부분이 있다.

  • 구글
    1. 현재까지 확인 된 개발 정보로는 고객이 구글 플레이에서 환불 신청을 하는 경우
    2. API 서버에서 30분마다 환불 신청된 주문 건이 있는지 체크하도록 한다. (구글 플레이 API 접근)
    3. 환불 신청 주문건이 확인 되는 경우 환불 프로세스를 진행하도록 한다.
      • 환불 신청 (환불 사유 : 구글 인앱 환불 조회 건 처리)
      • 환불 완료 - 자동 환불 완료 처리되도록 함.
  • 애플 : 별도로 https 엔드포인트 URL로 API 서버 접근이 가능

 

4. 정산

각 스토어마다 정산 기준은 너무너무 다르다. 일반 PG사에서 진행해왔던 정산과는 매우 다름!

  1. 구글 구글 공식 문서
    • 매월 15일에 전월 매출에 대한 판매 대금이 지급됨
    • 15일이 공휴일 또는 휴일이면 이후에 지급됨 (예시 : 대금 지급일이 토요일이라면 다음주 월요일에 지급됨)
    • 설정된 지급 기준액이 초과하면 지급일에 대금이 지급됨. 지금 기준액은 설정 가능 (기본 기준액은 1,000원)
    • 은행 송금을 통해 판매 대금을 받는 경우, 계좌에 금액이 표시되기 까지 영업일 기준 5~7일이 소요 될 수 있음
  2. 애플 애플 공식 문서
    • 거래가 완료된 회계 월의 마지막 날로부터 45일 이내에 은행 계좌에 지급

 

5. 쿠폰

일반적으로 쿠폰은 사용가능하나 iOS의 경우 조건이 있다.
사용자가 직접 등록하는 쿠폰 입력창이 앱 내에 존재하지 않아야 한다는 것이다.

이 말이 무슨의미냐면 iOS에서는 인앱결제 외에 다른 수단으로 콘텐츠를 구매하는 것은 허락하지 않는다는 소리다. 🤔 그렇기 때문에 외부에서 등록 가능하도록 링크, QR코드 이런것도 앱에 있으면 안된다. (심사 반려)

그래서 대부분의 iOS앱의 경우 쿠폰 입력을 제공하지 않고 웹 사이트에서 쿠폰 입력하는 별도 페이지를 제공한다. 흔히 볼 수 있는 예시라면 모바일 게임사의 쿠폰 입력 이벤트 페이지 같은 경우다.

단, 입력하는 쿠폰같은 경우 위와 같이 하지만 회원가입 시 시스템에서 제공해주는 쿠폰, 판매자가 사용자 계정에 직접 발급해주는 쿠폰 같은경우는 이미 내 소유이기때문에 사용하는데에는 문제없다.

 


 

마치며

이 글에서는 인앱결제 개발에 내용보다는 개발 진행 시 어떤부분들을 고려해야하는지에 대해 현재 내가 담당하고 있는 서비스 기준으로 작성해보았다.
인앱결제라는 기능 자체로만 봤을때는 결제 진행방식이 너무 편리하기 때문에 사용자 입장에서는 좋으나 판매자 입장에서는 수수료, 일방적인 환불 프로세스, 정산 등 고려해야할 부분이 많다는 것을 이번에 진행하면서 알게되었다.

다음에는 구글/애플에서 인앱결제 검증을 어떻게 처리하는지 작성해보도록 하겠습니다.

Comments