Microsoft.StoreServices .NET 라이브러리 및 샘플 활용
이 문서에서 설명하는 원칙과 흐름을 보여주는 데 도움이 되도록 Microsoft.StoreServices 샘플을 검토하세요. 이 샘플은 인증을 관리하고 Microsoft Store 서비스를 호출하기 위해 Microsoft.StoreServices 라이브러리를 사용합니다. 샘플 서비스 자체에는 구독 제품 관리를 위한 예제 로직과 설정을 위한 구성 가이드가 포함되어 있습니다.구독 제품 유형
스토어 관리형 및 추가 기능 구독 제품 유형 모두 사용자의 구독을 보고 관리하기 위해 Recurrence 서비스와 함께 작동합니다. 이러한 각 제품 유형에 대한 자세한 내용은 올바른 제품 유형 선택을 참고하세요.사용자의 구독 쿼리
구독 상태의 기본 엔드포인트로 purchase.mp.microsoft.com/v8.0/b2b/recurrences/query를 사용합니다. 활성 및 이력 구독 기간과 변경 작업에 필요한subscriptionId를 반환합니다. 또한 Grace 및 Dunning 기간을 구분하는 데 필요한 필드도 포함합니다.
Collections API(b2bLicensePreview (v8) 및 publisherQuery (v9))는 활성 구독 사용 권한을 표시할 수 있지만 동일한 recurrence 세부 정보는 표시할 수 없습니다.
클라이언트와 서버 간의 satisfying entitlement 검사 간 지연
번들에 새 항목(satisfying 사용 권한)을 추가하는 업데이트를 게시할 때 클라이언트와 서버 간 API 쿼리 사이에 새 항목의 가시성에 지연이 발생합니다. 이 지연은 서로 다른 스토어 시스템이 서로 다른 간격으로 카탈로그 캐시를 업데이트하기 때문에 발생합니다. 변경 사항이 카탈로그에 게시되면 로컬 라이선싱 서비스가 일반적으로 업데이트된 정보를 먼저 받고, publisherQuery에서 사용하는 캐시는 2~3시간 후에 업데이트됩니다. 따라서 클라이언트 측 API가 액세스를 부여하는 시점과 서버 간 호출이 새 항목의 소유권을 반영하지 못하는 시점 사이에 몇 시간의 차이를 예상하세요. Recurrence 서비스 자체는 영향을 받지 않으며, 새로 추가된 항목의 satisfying 사용 권한을 쿼리하는 publisherQuery 또는 b2bLicensePreview 엔드포인트만 영향을 받습니다.구독 시작, 갱신, 만료 날짜 이해
구독의StartTime 날짜는 활성 구독이 시작된 날짜입니다. 구독이 자동 갱신으로 설정되어 있는 경우 시작 날짜는 동일하게 유지되지만 만료 날짜는 다음 달에 구독이 갱신될 때마다 변경됩니다. 구독이 취소, 만료 또는 취소되면 사용자가 구독을 다시 구매할 때 새 구독 개체가 생성됩니다. 새 활성 구독 기간에는 새 구독을 활성화하거나 구매한 날짜의 StartTime이 있습니다.
Microsoft Store 내의 구독 기간은 일반적으로 개월 단위로 구성됩니다. 예를 들어 1개월, 3개월 또는 12개월입니다. 사용자가 한 달 구독을 구매하면 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개월 구독의 시작, 갱신, 만료 날짜 동작 예
Grace 및 Dunning 상태 이해
ExpirationTime에 자동 갱신 결제가 실패하면 구독은 Grace로 들어간 다음, 여전히 해결되지 않으면 Dunning으로 들어갑니다. 두 기간 모두 InDunning 상태로 보고되므로 현재 UTC 시간을 ExpirationTimeWithGrace와 비교하여 현재 기간을 결정합니다.
사용자의 구독이 Grace 또는 Dunning 상태인 동안, Microsoft 계정 서비스 및 구독에서 결제 상태를 확인하도록 사용자에게 알려야 합니다.
이러한 각 상태에 계정을 테스트용으로 제대로 설정하려면 구독 제품 테스트를 참고하세요.
Grace 기간
Grace 기간 동안 스토어가 갱신 결제를 다시 시도하는 동안 구독 혜택을 활성 상태로 유지하세요. 갱신에 성공하면 사용된 Grace 일수는 다음 기간에서 차감됩니다.ExpirationTimeWithGrace 전에 결제가 해결되지 않으면 구독은 Dunning으로 이동합니다.
Dunning 기간
Dunning은 Grace가 끝난 후 시작됩니다. 이 기간 동안에는 구독 혜택을 비활성화하세요. Dunning 중에는 사용자가 동일한 구독을 재구매하거나 리딤할 수 없습니다. Dunning 중에도 결제가 여전히 해결되지 않으면 구독은 비활성화됩니다.Grace 및 Dunning 길이
사용자의 구독 변경
서비스는 purchase.mp.microsoft.com/v8.0/b2b/recurrences//change로 구독을 수정할 수도 있습니다. 지원되는 작업에는 일 추가, 자동 갱신 비활성화, 구독 취소가 포함됩니다. 서비스는 사용자의 구독에 대해 작업을 수행하기 위해recurrenceId(RecurrenceQuery API의 id와 동일한 값 및 Collections query API의 recurrenceData 값)가 필요합니다.
다음은 Recurrence Change 엔드포인트가 서비스에서 유용할 수 있는 몇 가지 예입니다.
- 서비스 다운타임을 경험한 사용자의 구독에 시간을 추가합니다.
- 사용자에게 구독 상태, 취소 등에 대한 정보를 지원하기 위해 고객 서비스 지원 팀과 통합합니다.
- 사용자가 자동 갱신 또는 구독 종료와 같은 설정을 변경할 수 있는 인게임 UI.
구독 제품 테스트
Recurrence Change API는 테스트에도 사용할 수 있습니다.Extend는 음수 일 값을 허용하여 대상 상태로 테스트 구독을 앞당길 수 있습니다.
Active, Inactive, Canceled 상태 테스트
구독의 Active, Inactive, Canceled 상태를 테스트할 때 구독에 $0.00의 기본 가격을 사용할 수 있습니다. 테스트 계정에 구독을 추가하여 Active 상태를 확인하고 Recurrence Change 엔드포인트를 사용해 자동 갱신을 비활성화합니다. 그런 다음 Recurrence Change 엔드포인트를 사용해 구독을 취소하거나ExpirationTime이 현재 UTC DateTime을 지나가도록 충분한 일수를 뺍니다.
Grace 및 Dunning 상태 테스트
Grace 및 Dunning 상태를 테스트하려면 구독에 0이 아닌 가격이 있어야 합니다.또한
ExpirationTime이 지날 때 후속 결제가 성공하지 않는 방식으로 테스트 계정을 구성해야 합니다. 현재 Microsoft Store에는 테스트 결제 수단이 없으므로 다음과 같이 선불 통화 코드를 사용해 계정을 설정하는 것이 가장 쉬운 방법입니다.
- 테스트 환경에서 $0.99와 같은 낮은 가격 지점으로 구독을 설정합니다.
- 첫 번째 구독 구매(세금 포함)를 커버할 수 있지만 갱신은 커버할 수 없는 2.00 상당의 XBOX 선불 기프트 카드를 구매합니다.
- 테스트 계정에 기프트 카드를 리딤합니다.
- 테스트 계정에서 구독을 구매합니다.
- 구독이 자동 갱신되도록 설정되어 있지만 구독 갱신을 위한 자금이 부족한지 확인합니다.
- Recurrence Change를 사용하여 구독의
ExpirationTime을 다음 24시간 이내로 이동합니다(다음 참고 사항 참조). ExpirationTime이 자연스럽게 지나가고 상태가InDunning으로 표시될 때까지 기다립니다(ExpirationTime이후 최대 24시간 소요).
Grace 및 Dunning 기간에 대해 ‘InDunning’ 상태로 계정을 제대로 설정하려면 계정이
ExpirationTime 및 ExpirationTimeWithGrace 날짜를 자연스럽게 지나가야 합니다. 일수를 뺄 때는 다음 24시간 이내의 ExpirationTime을 목표로 한 다음 시간이 자연스럽게 지나가도록 합니다. ExpirationTime을 이미 과거의 시점으로 옮기면 InDunning이 나타나지 않을 수 있으며 테스트 상태가 무효화될 수 있습니다. 이 문제를 해결하는 유일한 방법은 구독을 취소하고 새 테스트 구독을 만드는 것입니다.