使用 Microsoft.StoreServices .NET 程式庫和範例
為了協助示範本文所述的原則和流程,請參閱 Microsoft.StoreServices 範例。此範例使用 Microsoft.StoreServices 程式庫來管理驗證,並呼叫 Microsoft Store 服務。範例服務本身包含管理訂閱產品的範例邏輯,並提供設定指南協助您完成設定。訂閱產品類型
商店管理的訂閱和附加元件訂閱這兩種產品類型,都可搭配 Recurrence 服務來檢視和管理使用者的訂閱。如需各產品類型的詳細資訊,請參閱選擇正確的產品類型查詢使用者的訂閱
請使用 purchase.mp.microsoft.com/v8.0/b2b/recurrences/query 作為查詢訂閱狀態的主要端點。它會傳回目前有效和歷史的訂閱期間,以及進行變更作業所需的subscriptionId。它也包含區分寬限期 (Grace) 和催繳期 (Dunning) 所需的欄位。
Collections API (b2bLicensePreview (v8) 和 publisherQuery (v9)) 可以顯示有效的訂閱權利,但無法提供相同的週期性詳細資料。
用戶端與伺服器對伺服器之間滿足權利檢查的延遲
當您發佈將新項目 (滿足權利) 加入套件組合的更新時,新項目在用戶端與伺服器對伺服器 API 查詢中的可見性會有延遲。這種延遲的原因是不同的商店系統會以不同的間隔更新其目錄快取。當變更發佈到目錄時,本機授權服務通常會先取得更新的資訊,而 publisherQuery 所使用的快取則會在兩到三小時之後更新。因此,請預期在用戶端 API 授與存取權之後,您的伺服器對伺服器呼叫可能有數小時尚未反映新項目的擁有權。 Recurrence 服務本身不受影響,只有查詢新加入項目之滿足權利的 publisherQuery 或 b2bLicensePreview 端點會受影響。了解訂閱的開始、續訂和到期日期
訂閱的StartTime 日期是有效訂閱開始的日期。如果訂閱設定為自動續訂,開始日期會維持不變,但到期日期會隨著後續月份的續訂而變更。如果訂閱遭到取消、到期或撤銷,使用者再次購買訂閱時,就會建立新的訂閱物件。新的有效訂閱期間的 StartTime 是使用者啟用或購買新訂閱的日期。
Microsoft Store 內的訂閱期間通常以月數設定,例如 1 個月、3 個月或 12 個月。當使用者購買一個月的訂閱時,StartTime 是使用者開始訂閱當天的 UTC 午夜 (00:00:00)。ExpirationTime 是 StartTime 加上月數 (而非天數) 再減去一秒 (UTC 23:59:59)。此值的用意是讓訂閱在 UTC 午夜之前到期。 不過,有些月份的天數不同,因此會與從某月 29 日、30 日或 31 日開始的訂閱產生衝突。
如果使用者的
StartTime 落在這些日期之一,ExpirationTime 會修改為到期月份最後一天的 UTC 23:59:59。如此一來,之後的續訂日期一律是每月第一天的 UTC 午夜 (00:00:00),而 ExpirationTime 一律是每月最後一天的 UTC 23:59:59。
一個月訂閱的開始、續訂和到期日期行為範例
了解寬限期 (Grace) 和催繳期 (Dunning) 狀態
如果在ExpirationTime 時自動續訂付款失敗,訂閱會進入寬限期,若仍未解決則會進入催繳期。這兩個期間回報的狀態都是 InDunning,因此請比較目前的 UTC 時間與 ExpirationTimeWithGrace 來判斷目前處於哪個期間。
當使用者的訂閱處於寬限期或催繳期時,您應該通知使用者到 Microsoft 帳戶服務與訂閱檢查其帳單狀態。
若要正確地將帳戶設定為上述各狀態以進行測試,請參閱測試訂閱產品。
寬限期
在寬限期間,請在商店重試續訂付款時保持訂閱權益啟用。如果續訂成功,已使用的寬限天數會從下一個期間扣除。如果付款未在ExpirationTimeWithGrace 之前解決,訂閱就會進入催繳期。
催繳期
催繳期在寬限期結束後開始。請在此期間停用訂閱權益。使用者無法在催繳期間重新購買或兌換相同的訂閱。如果在整個催繳期間付款仍未解決,訂閱就會變成非使用中。寬限期和催繳期的長度
變更使用者的訂閱
您的服務也可以使用 purchase.mp.microsoft.com/v8.0/b2b/recurrences//change 來修改訂閱。支援的作業包括新增天數、停用自動續訂,以及取消訂閱。您的服務需要recurrenceId (與 RecurrenceQuery API 中的 id 以及 Collections 查詢 API 中的 recurrenceData 值相同) 才能對使用者的訂閱進行操作。
以下是 Recurrence Change 端點對您的服務可能有用的一些範例:
- 為經歷服務停機的使用者訂閱增加時間。
- 與您的客戶服務支援團隊整合,協助使用者了解其訂閱狀態、取消等資訊。
- 遊戲內 UI,可讓使用者變更自動續訂等設定或結束其訂閱。
測試訂閱產品
Recurrence Change API 也可用於測試。Extend 接受負數的天數值,讓您將測試訂閱往前推進到目標狀態。
測試有效、非使用中和已取消狀態
當您測試訂閱的有效、非使用中和已取消狀態時,可以為訂閱使用 $0.00 的基本價格。將訂閱新增至測試帳戶以驗證有效狀態,並使用 Recurrence Change 端點停用自動續訂。然後使用 Recurrence Change 端點取消訂閱,或減去足夠的天數,讓ExpirationTime 早於目前的 UTC DateTime。
測試寬限期和催繳期狀態
若要測試寬限期和催繳期狀態,訂閱必須有非零的價格。此外,測試帳戶必須設定為在
ExpirationTime 過後,後續付款不會成功。目前 Microsoft Store 沒有測試用的付款方式,因此設定帳戶最簡單的方式是使用預付貨幣代碼,如下所示:
- 在您的測試環境中,以較低的價格 (例如 $0.99) 設定訂閱。
- 購買 XBOX 預付禮物卡,金額為 2.00,足以支付第一次訂閱購買 (含稅) 但不足以支付續訂。
- 在您的測試帳戶上兌換禮物卡。
- 在測試帳戶上購買訂閱。
- 確定訂閱已啟用自動續訂,但沒有足夠的資金續訂訂閱。
- 使用 Recurrence Change 將訂閱的
ExpirationTime移至未來 24 小時內 (請參閱下列附註)。 - 等待
ExpirationTime自然經過,且狀態顯示為InDunning(可能在ExpirationTime之後最多需要 24 小時)。
若要讓帳戶正確進入寬限期和催繳期的 ‘InDunning’ 狀態,帳戶必須自然經過
ExpirationTime 和 ExpirationTimeWithGrace 日期。減去天數時,請將 ExpirationTime 設定在未來 24 小時內,然後讓時間自然經過。如果您將 ExpirationTime 移至已經過去的時間點,可能不會出現 InDunning,且測試狀態可能變成無效。解決此問題的唯一方法是取消訂閱並建立新的測試訂閱。