다음을 통해 공유


내 서비스에서 구독 제품 관리

타이틀 또는 게시자가 구독 제품을 사용하는 경우 백 엔드 서비스를 개발하여 사용자의 구독 상태를 확인하고 구독을 관리하는 것이 좋습니다. 이렇게 하면 서비스에서 사용자의 구독 상태에 대한 추가 인사이트를 확보할 수 있으며, 지원 팀은 사용자의 구독과 관련하여 문제 해결, 시간 추가 또는 취소 작업을 수행하는 데 도움을 얻을 수 있습니다.

이 문서에서는 되풀이 서비스 엔드포인트를 사용하여 사용자 자체 서비스에서 이러한 작업을 수행할 수 있게 하는 방법을 간략하게 설명합니다.

Microsoft.StoreServices .NET 라이브러리 및 샘플 활용

이 문서에 설명된 원칙과 흐름을 보여 주기 위해 Microsoft.StoreServices 샘플을 검토합니다. 이 샘플에서는 Microsoft.StoreServices 라이브러리를 사용하여 인증을 관리하고 Microsoft Store Services를 호출합니다. 샘플 서비스 자체에 구독 제품을 관리하기 위한 예제 논리가 포함되어 있으며 이를 설정하기 위한 구성 가이드가 제공됩니다.

구독 제품 유형

스토어 관리형 및 추가 기능 구독 제품 유형은 모두 되풀이 서비스를 사용하여 사용자의 구독을 확인 및 관리합니다. 이러한 각 제품 유형에 대한 자세한 내용은 올바른 제품 유형 선택을 참조하세요.

사용자 구독 쿼리

purchase.mp.microsoft.com/v8.0/b2b/recurrences/query는 사용자의 구독 정보를 쿼리하는 기본 엔드포인트입니다. 이 엔드포인트는 사용자의 현재 활성 구독 및 과거 구독 기간을 모두 보고합니다. 또한 구독을 변경하는 데 필요한 subscriptionId와 구독이 유예 기간 및 재촉 기간 중일 때를 알기 위한 보다 자세한 정보를 제공합니다.

컬렉션 엔드포인트(B2bLicensePreview(v8) 또는 PublisherQuery(v9))는 모두 사용자의 활성 구독을 반환하지만 되풀이 쿼리 API가 제공하는 수준의 세부 내용 및 정보는 제공하지 않습니다.

클라이언트와 서버 간 자격 검사 충족 간 지연

새 항목(자격 충족)을 추가하는 구독에 업데이트를 게시하는 경우 클라이언트에서 사용하도록 설정되는 자격과 b2bLicensePreview 또는 PublisherQuery와 같은 서버 간 쿼리에 반영되는 경우 간에 지연이 발생합니다. 이는 다른 저장소 시스템에서 사용하는 카탈로그 캐시가 서로 다른 간격으로 업데이트되기 때문입니다. 변경 내용이 카탈로그에 게시되면 로컬 라이선스 서비스는 일반적으로 업데이트된 정보와 PublisherQuery에서 사용하는 캐시를 2~3시간 이내에 가져옵니다. 따라서 게시 후에는 사용자에게 콘텐츠를 받을 수 있는 몇 시간이 있지만 PublisherQuery에 대한 서버 간 호출은 새로 포함된 항목에 대한 결과를 아직 반환하지 않습니다. 구독 자체에 대한 되풀이 서비스 쿼리는 이 영향을 받지 않으며, PublisherQuery 또는 b2bLicensePreview에서 만족스러운 자격 또는 포함된 항목을 쿼리할 때 구독에 추가되는 항목만 영향을 받습니다.

구독 시작, 갱신 및 만료 날짜 이해

구독의 StartTime 날짜는 항상 활성 구독이 시작된 날짜입니다. 구독이 자동 갱신되도록 설정된 경우 시작 날짜는 동일하게 유지되지만 다음 달에 구독이 갱신되면 만료 날짜가 변경됩니다. 구독이 취소되거나 만료되거나 해지되면 사용자가 구독을 다시 구매할 때 새 구독 개체가 만들어집니다. 이 새 활성 구독 기간에는 새 구독을 활성화하거나 구매한 날의 StartTime(이)가 있습니다.

Microsoft Store 내의 구독 기간은 일반적으로 월 수로 구성됩니다. 예를 들어 1개월, 3개월 또는 12개월입니다. 사용자가 1개월 구독을 구매하면 StartTime(은)는 구독을 시작한 날 자정 UTC(00:00:00)가 됩니다. ExpirationTime(은)는 StartTime에 추가된 개월 수(일 아님)에서 1초(23:59:59 UTC)를 뺀 숫자가 됩니다.
이렇게 하면 구독이 UTC 자정 직전에 만료됩니다.

그러나 일부 달에는 월의 29일, 30일 또는 31일부터 시작하는 구독과 충돌이 발생하는 다른 일 수가 있습니다.
사용자의 StartTime(이)가 이러한 날에 속하는 경우 ExpirationTime(은)는 만료 월의 마지막 날에 23:59:59 UTC로 수정됩니다. 이렇게 하면 갱신 날짜는 항상 다음 달의 첫째 날 자정 UTC(00:00:00)이 되고 ExpirationTime은(는) 항상 해당 월의 마지막 날 23:59:59 UTC가 됩니다.

1개월 구독의 시작, 갱신 및 만료 날짜 동작 예제

구매 날짜 StartTime ExpireTime 자동 갱신 날짜 활성 일 수
2023-02-27T12:00:00Z 2023-02-27T00:00:00Z 2023-03-26T23:59:59Z 2023-03-27T00:00:00Z 28
2023-03-27T12:00:00Z 2023-03-27T00:00:00Z 2023-04-26T23:59:59Z 2023-05-27T00:00:00Z 31
2023-03-29T12:00:00Z 2023-03-29T00:00:00Z 2023-04-30T23:59:59Z 2023-05-01T00:00:00Z 32
2023-04-29T12:00:00Z 2023-04-29T00:00:00Z 2023-05-31T23:59:59Z 2023-06-01T00:00:00Z 33
2023-04-30T12:00:00Z 2023-04-30T00:00:00Z 2023-05-31T23:59:59Z 2023-06-01T00:00:00Z 32
2024-02-27T12:00:00Z 2024-02-27T00:00:00Z 2024-03-26T23:59:59Z 2024-03-27T00:00:00Z 29(윤년)

유예 상태 및 재촉 상태 이해

사용자가 구독 자동 갱신에 등록한 경우 Microsoft Store는 구독의 ExpirationTime 값에 대해 사용자 계정의 결제 방법으로 요금을 청구하려고 시도합니다. 결제를 이행할 수 없는 경우 해당 구독이 취소되지는 않지만 Microsoft Store에서 문제를 해결하고 재결제를 시도함에 따라 유예 상태와 재촉 상태를 거치게 됩니다. 유예 기간과 재촉 기간 동안 구독 상태는 InDunning(으)로 표시됩니다. 구독 제품을 내 서비스와 통합할 때는 사용자가 유예 기간 또는 재촉 기간인 경우를 식별하고 아래 정보에 따라 적절한 조치를 취할 수 있도록 확인 절차를 이해하고 구현해야 합니다.

테스트를 위해 계정을 각 상태로 올바르게 설정하려면 구독 제품 테스트를 참조하세요.

유예 기간

유예 기간은 사용자가 유료 구독의 ExpirationTime을(를) 지나도 구독 혜택을 계속 받게 되는 일정한 기간입니다. 이 기간 동안 Microsoft Store는 사용자의 결제 방법으로 자동 갱신을 계속 시도합니다. 이 기간에 사용자는 필요한 경우 구독 혜택을 잃지 않고 만료된 신용 카드를 확인하거나 계정에 금액을 추가할 수 있습니다.

결제 방법이 수정되고 자동 갱신 트랜잭션이 완료되면 사용된 유예 기간이 사용자의 다음 구독 기간에서 제외됩니다. 예: 구독 기간이 30일이며 결제 방법이 수정되는 동안 사용자의 계정이 3일의 유예 기간을 보냈습니다. 자동 갱신 트랜잭션이 성공하는 경우, 이는 새 구독 기간 30일을 의미합니다. 그러나 3일이 유예 기간에서 사용되어 새 ExpirationTime에서 제거되므로, 이제 구독은 갱신 트랜잭션이 발생한 날로부터 27일 후에 만료됩니다. 결과적으로 새 ExpirationTime은 이전 ExpirationTime부터 30일이 되고 사용자는 유예 기간에 들어간 것이므로 무료로 사용하게 되는 기간은 없습니다.

유예 기간과 재촉 기간은 모두 동일한 상태(InDunning)를 공유하기 때문에 사용자가 유예 기간에 있는지 여부를 확인하려면 서비스에서 ExpirationTimeWithGrace 값의 현재 UTC 시간을 확인해야 합니다. 이 기간 동안 구독 갱신에 문제가 있을 수 있음을 알리고 Microsoft 계정 서비스 및 구독 페이지를 확인하도록 사용자에게 메시지를 보낼 수도 있습니다.

자동 갱신이 ExpirationTimeWithGrace에 의해 해결되지 않으면 계정이 재촉 기간으로 전환됩니다.

재촉 기간

재촉 기간은 사용자의 유예 기간이 종료된 후의 일정 기간이며, 사용자는 더 이상 자신의 계정에서 구독 혜택을 받을 수 없습니다. 재촉 기간 동안 Microsoft Store는 사용자의 계정에 새 구독 기간에 대한 요금을 청구하려고 계속 시도합니다. 요금이 성공적으로 청구되면 전체 유예 기간이 사용자의 다음 구독 기간에서 제외됩니다.

재촉 기간 동안 사용자는 Microsoft Store에서 해당 구독을 직접 다시 구입하거나 다시 사용할 수 없습니다. 이 때문에 사용자는 유예 기간으로 전환된 다음 유예 기간이 종료되면 새 구독을 시작하는 방법으로 무료 이용 기간을 얻을 수 없습니다. 재촉 기간은 유예 기간보다 훨씬 더 길지만, 재촉 기간이 종료될 때까지 결제가 완료되지 않으면 구독이 비활성 상태가 됩니다.

사용자의 구독 변경

사용자의 구독 상태를 쿼리하는 것 외에도 서비스에서 사용자를 대신하여 사용자의 구독 제품을 수정 및 변경할 수 있습니다. purchase.mp.microsoft.com/v8.0/b2b/recurrences/{recurrenceId}/change 엔드포인트를 사용하면 서비스에서 특정 구독에 대해 시간 추가, 취소, 환불 및 자동 갱신 비활성화 작업을 수행할 수 있습니다. 되풀이 변경 엔드포인트를 호출하려면 먼저 purchase.mp.microsoft.com/v8.0/b2b/recurrences/query 엔드포인트에서 가져온 recurrenceId 값이 있어야 합니다.

다음은 되풀이 변경 엔드포인트를 서비스에 활용하는 몇 가지 예입니다.

  • 서비스 가동 중지 시간이 발생한 사용자의 구독에 시간을 추가합니다.
  • 고객 서비스 지원 팀과 통합하여 구독 상태, 취소 등에 대한 정보를 사용해 사용자를 지원합니다.
  • 게임 내 UI를 통해 사용자가 간편하게 자동 갱신을 비활성화하거나 구독을 종료할 수 있도록 합니다.

구독 제품 테스트

되풀이 변경 엔드포인트는 구독 제품의 개발 및 테스트에도 사용할 수 있습니다. Extend 연산은 테스트 계정의 활성 구독에서 빼기 작업을 할 수 있도록 음수 일수를 허용합니다. 이를 통해 테스트 계정으로 구독에 등록한 다음 구독에서 며칠을 제거하여 원하는 테스트 상태를 만들 수 있습니다.

활성, 비활성 및 취소됨 상태 테스트

구독에 대한 활성, 비활성 및 취소됨 상태 테스트는 가격이 $0.00로 설정된 구독으로 수행할 수 있습니다. 테스트 계정에 구독을 추가하여 활성 상태를 확인하고 되풀이 변경 엔드포인트를 사용하여 자동 갱신을 비활성화하기만 하면됩니다. 그런 다음 되풀이 변경 엔드포인트를 사용하여 구독을 취소하거나 ExpirationTime이(가) 현재 UTC DateTime을 지난 상태가 되도록 일수를 충분히 뺍니다.

유예 상태 및 재촉 상태 테스트

구독 계정이 유예 상태 및 재촉 상태에 도달하도록 하려면 구독 가격이 0이 아니어야 하며, 계정은 ExpirationTime을(를) 지나면 해당 금액을 결제할 수 없는 상태에 있어야 합니다. 현재 Microsoft Store에는 테스트 결제 방법이 없으므로 계정을 설정하는 가장 쉬운 방법은 다음과 같이 선불 통화 코드를 사용하는 것입니다.

  1. 테스트 환경에서 $0.99와 같은 저렴한 가격으로 구독을 설정합니다.
  2. 갱신이 아닌 첫 번째 구독 구매(세금 포함)가 가능한 정도인 $1.00 또는 $2.00에 Xbox 선불 기프트 카드를 구입합니다.
  3. 테스트 계정에서 기프트 카드를 사용합니다.
  4. 테스트 계정에서 구독을 구매합니다.
  5. 구독에 대해 자동 갱신이 활성화되어 있지만 구독을 갱신할 충분한 금액이 없도록 해야 합니다.
  6. 되풀이 변경을 사용하여 구독의 ExpirationTime을(를) 향후 24시간 이내로 이동합니다(이 작업이 중요한 이유는 아래 참고 사항 확인).
  7. 시간 흐름에 따라 ExpirationTime이(가) 지나고 'InDunning' 상태가 표시될 때까지 기다립니다(이 작업은 ExpirationTime 이후 최대 24시간이 걸릴 수 있음).

유예 상태, 재촉 상태를 거쳐 비활성 상태로 적절히 바뀌는지 확인하려면 ExpirationTime을(를) 인위적으로 이동하지 않고 계정이 각 단계를 자연스럽게 거치도록 해야 합니다.

참고 항목

계정이 유예 기간 및 재촉 기간 동안 'InDunning' 상태로 올바르게 들어서게 하려면 계정이 ExpirationTimeExpirationTimeWithGrace 날짜를 자연스럽게 지나야 합니다. 테스트 구독에서 일수를 뺄 때 현재 UTC DateTime 이후 24시간 내에 ExpirationTime이(가) 있도록 딱 충분한 정도를 뺍니다. 그런 다음, 상태가 'InDunning'을 표시하도록 계정에서 다음 24시간 동안 해당 DateTime을 자연스럽게 지나도록 합니다. ExpirationTime을(를) 현재 UTC DateTime보다 더 멀리 이동하면 상태가 'InDunning'으로 변경되지 않으며 해당 계정/구독에 대해 테스트 값이 유효하지 않게 됩니다. 또한 테스트 계정은 현재 구독 항목이 취소되고 계정에서 새 구독을 구매할 때까지 유예 기간 및 재촉 기간을 제대로 테스트할 수 없는 상태가 됩니다.

참고 항목

상거래 개요

Microsoft Store Service API

purchase.mp.microsoft.com/v8.0/b2b/recurrences/query

purchase.mp.microsoft.com/v8.0/b2b/recurrences/{recurrenceId}/change

Microsoft.StoreServices 라이브러리(GitHub)

Microsoft.StoreServices 샘플(GitHub)