일상적인 비즈니스 과정에서 구독 또는 일회성 구매에 대한 관리 작업을 수행해야 할 수 있습니다. 예를 들어 고객 서비스에서 사용자에게 전액 또는 부분 환불을 제공해야 하거나 특정 경우에는 사용 권한을 취소해야 할 수 있습니다. Play Console에서 주문을 관리할 수 있으며, 자체 시스템에서 주문을 관리하려면 Google Play Developer API를 사용하면 됩니다.
구독 취소
정기 결제 취소는 사용자 또는 개발자가 시작할 수 있습니다.
사용자가 취소함
사용자는 Play 스토어를 사용하여 언제든지 Google Play 정기 결제를 취소할 수 있습니다. 해당하는 경우 사용자가 앱과 웹사이트에서 정기 결제를 취소할 수 있는 옵션도 제공해야 합니다.
사용자가 자발적으로 취소할 수 있도록 하는 가장 쉬운 방법은 앱에서 Play 스토어로 연결되는 딥 링크를 제공하여 사용자가 정기 결제를 확인하고 관리할 수 있도록 하는 것입니다.
개발자가 시작한 취소
개발자는 백엔드에서 취소를 트리거해야 할 수도 있습니다.
purchases.subscriptions.cancel
API를 사용하면 정기 결제 구매를 취소할 수 있습니다.
예를 들어 이 메서드를 사용하여 기존 서비스를 중지할 수 있습니다.
정기 결제를 취소해도 환불되지 않으며 사용자는 현재 결제 기간이 끝날 때까지 액세스 권한을 유지합니다.
이 메서드를 사용하면 cancellationType
요청 본문 매개변수에서 다음과 같은 유형의 취소를 지정할 수 있습니다.
USER_REQUESTED_STOP_RENEWALS: 사용자가 Play 스토어에서 취소한 것처럼 정기 결제를 취소합니다. 할부 요금은 현재 약정 기간의 남은 기간 동안 계속 청구됩니다. 사용자는 Play 스토어에서 정기 결제가 만료되기 전에 복원하거나 기본 요금제에 사용 설정된 경우 만료 후에 정기 결제를 재신청할 수 있습니다.
DEVELOPER_REQUESTED_STOP_PAYMENTS: 정기 결제를 취소하고 추가 결제를 방지합니다. 사용자는 Play 스토어에서 정기 결제를 복원하거나 다시 정기 결제할 수 없지만 앱 내에서 다시 정기 결제하도록 허용할 수 있습니다.
사용자가 만료되지 않은 정기 결제를 복원할 수 있도록 허용
경우에 따라 개발자가 취소를 트리거한 후 사용자가 Play 정기 결제 센터에서 만료되지 않은 정기 결제를 복원하도록 허용하는 것이 유용할 수 있습니다. 예를 들어 맞춤설정된 인앱 취소 흐름을 제공할 수 있습니다. 비즈니스 로직에 따라 백엔드에서 트리거된 취소 중 사용자가 복원할 수 있는 취소를 결정할 수 있습니다.
사용자가 취소를 복원할 수 있음을 나타내려면 purchases.subscriptions.cancel
API에 POST 요청을 실행하고 cancellationType
요청 매개변수를 USER_REQUESTED_STOP_RENEWAL
값으로 설정합니다.
예:
- 정기 결제
1a2b3c4d5e6f7g8h9i0j
의 구매 토큰 - 애플리케이션 패키지 이름
com.your.app
- 구독 ID
your-subscription-product
HTTP POST 요청:
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptions/your-subscription-product/tokens/1a2b3c4d5e6f7g8h9i0j:cancel
요청 본문:
{
"cancellationType": "USER_REQUESTED_STOP_RENEWAL"
}
사용자가 만료된 정기 결제를 다시 결제할 수 있도록 허용
만료된 정기 결제를 재신청할 수 있도록 하려면 정기 결제의 기본 요금제에서 정기 결제 재신청 옵션을 사용 설정한 다음 cancellationType
매개변수를 USER_REQUESTED_STOP_RENEWAL
값으로 설정하여 정기 결제를 취소해야 합니다.
사용자가 애플리케이션에서만 정기 결제를 재신청하도록 허용
cancellationType
매개변수를 DEVELOPER_REQUESTED_STOP
_PAYMENTS
로 설정했거나 cancellationType
매개변수를 설정하지 않은 경우 사용자는 Play 정기 결제 센터에서 정기 결제를 복원할 수 없습니다. 하지만 필요한 경우 사용자는 앱을 통해 정기 결제에 다시 가입할 수 있습니다.
이 작업을 수행하면 SUBSCRIPTION_CANCELED
실시간 개발자 알림이 트리거됩니다. 이러한 취소는 취소에 설명된 대로 처리합니다.
결제 연기
subscriptions.defer
를 사용하여 정기 결제의 사용 권한 기간을 연장합니다. 연기 기간 동안 사용자는 콘텐츠를 계속 구독할 수 있지만 추가 기간에 대한 요금은 청구되지 않습니다. 정기 결제 결제를 연기하면 상태 정보가 적절하게 업데이트되며 구매 상태 정보의 expiryTime
필드에 반영됩니다.
- 활성 상태의 정기 결제의 경우 지연 청구로 인해 다음 갱신일이 연장됩니다.
- 선불 요금제의 경우 결제 연기를 통해 만료 시간을 연장할 수 있습니다.
지연 청구를 사용하는 방법의 예는 다음과 같습니다.
- 의견 설문조사를 작성한 기존 정기 결제 사용자에게 1주일 무료 이용권을 제공하는 등 특별 이벤트로 사용자에게 무료 액세스 권한을 부여합니다.
- 고객의 서비스 사용 능력에 영향을 미칠 수 있는 장기적인 서비스 중단 후와 같이 고객 지원 조치로 고객에게 무료 액세스 권한을 부여합니다.
결제는 API 호출당 최소 하루, 최대 1년 연기할 수 있습니다. 사용 권한의 만료를 더 연기하려면 새 만료일이 도래하기 전에 API를 다시 호출하세요.
이 작업을 수행하면 SUBSCRIPTION_DEFERRED
실시간 개발자 알림이 트리거됩니다. 이러한 이벤트를 처리하는 방법은 구독 정보의 구독자 결제 지연을 참고하세요.
예:
FitnessGoals 스트리밍 서비스에서 2월에 정기적인 운동을 장려하기 위한 프로모션을 진행하려고 합니다.
FitnessGoals로 2월 한 달 동안 10회 이상 운동한 모든 구독자에게 1개월의 추가 서비스를 제공하기로 결정합니다.
챌린지 결과를 추적하고 3월 1일에 2월에 챌린지를 달성한 사용자의 활성 정기 결제 구매에 대해
subscriptions.defer
API를 호출합니다.이러한 사용자는 정기적인 운동 동영상을 한 달간 무료로 이용할 수 있으며, FitnessGoals가 건강을 유지하는 데 얼마나 도움이 되는지 모든 친구에게 알립니다.
환불 및 취소 처리
정기 결제 또는 일회성 구매에 대한 환불을 처리하거나 액세스 권한을 취소해야 하는 경우가 많습니다.
주문 ID별로 주문 전액 환불
orders.refund
API를 사용하면 구매 후 3년 이내에 주문한 제품을 전액 환불할 수 있습니다.
orders.refund
메서드는 환불을 제공하는 것 외에도 액세스 권한을 취소해야 하는지 여부를 나타내는 취소 매개변수를 수신합니다.
정기 결제 구매에 대한 환불 호출로 취소를 실행하면 정기 결제가 즉시 해지되고 SUBSCRIPTION_REVOKED
실시간 개발자 알림이 트리거됩니다. 이러한 이벤트를 처리하는 방법은 정기 결제 수명 주기 관리 가이드 취소 섹션을 참고하세요.
예:
새로운 월드컵의 시작을 기념하기 위해 e스포츠 앱 Football-Not-Soccer은 처음 24시간 이내에 새 팀 키트를 구매하는 모든 사용자에게 무료 가상 유니폼을 추첨으로 제공하기로 결정했습니다.
Football-Not-Soccer은 취소 매개변수를 전달하지 않고
orders.refund
API를 사용하여 져지 구매 금액을 낙찰자에게 환불합니다.
구매 토큰으로 정기 결제 취소 및 환불
경우에 따라 사용자의 정기 결제에 대한 액세스 권한을 취소하고 환불을 제공해야 할 수 있습니다. Play 결제는 subscriptionsv2.revoke
API를 통해 전액 환불 및 비율에 따른 환불을 비롯한 취소 메서드를 제공합니다. 이 엔드포인트를 사용하면 revocationContext
를 지정하여 환불이 계산되는 방식을 결정할 수 있습니다.
이 작업을 수행하면 SUBSCRIPTION_REVOKED
실시간 개발자 알림이 트리거됩니다. 앱은 취소에 설명된 대로 이러한 취소를 처리해야 합니다.
예:
- 구매 토큰
1a2b3c4d5e6f7g8h9i0j
으로 구매 - 패키지 이름이
com.your.app
인 애플리케이션 - 일할 계산 환불의 의도
HTTP POST 요청:
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/com.your.app/purchases/subscriptionsv2/tokens/1a2b3c4d5e6f7g8h9i0j:revoke
요청 본문:
{
"revocationContext": {
"proratedRefund": {}
}
}
전액 환불
정기 결제를 해지하고 현재 결제 기간의 전액을 환불해야 하는 경우 전액 환불을 처리합니다. purchases.subscriptionsv2.revoke
함수를 사용하고 "fullRefund": {}
를 환불 유형으로 설정합니다.
예:
마리아는 SuperMovies 스트리밍 월간 요금제의 자동 갱신 30일 정기 결제를 이용하고 있습니다. 마리아는 콘텐츠에 액세스할 수 없는 기술적 문제가 발생했습니다. 결제 주기 3일차에 고객 서비스팀에 문의하여 정기 결제에 액세스할 수 없다고 말합니다.
고객 서비스팀에서 시스템에서 마리아의 정기 결제 구매 세부정보를 찾고 전액 환불을 요청하는
purchases.subscriptionsv2.revoke
호출을 트리거합니다.고객 서비스에서 마리아에게 정기 결제 가격의 100% 가 환불되며 더 이상 요금제를 구독하지 않아도 된다고 안내합니다.
일할 계산 환불
정기 결제를 해지하고 남은 사용 권한 기간을 부분적으로 환불해야 하는 경우 비율에 따라 환불합니다. purchases.subscriptionsv2.revoke
함수를 사용하고 "proratedRefund": {}
를 환불 유형으로 설정합니다.
예:
마리아는 SuperMovies 스트리밍 월간 요금제의 자동 갱신 30일 정기 결제를 이용하고 있습니다. 고객은 한동안 서비스를 만족스럽게 사용해 왔습니다. 마리아는 결제 주기의 15일째에 고객 서비스에 연락하여 해외로 이사 중이며 다음날부터 더 이상 서비스를 이용할 수 없다고 말합니다.
고객 서비스팀에서 시스템에서 마리아의 정기 결제 구매 세부정보를 찾고, 비율에 따른 환불을 요청하는
purchases.subscriptionsv2.revoke
호출을 트리거합니다.고객 서비스에서 마리아에게 정기 결제 가격의 약 50% 가 환불되며 서비스 액세스가 즉시 해지된다고 안내합니다.