مدیریت اشتراک‌ها و خریدهای یک‌باره

ممکن است لازم باشد به‌عنوان بخشی از کسب‌وکار روزانه، اقدامات مدیریتی روی اشتراک‌ها یا خریدهای یک‌باره انجام دهید. برای مثال، ممکن است خدمات مشتری شما نیاز به صدور استرداد کامل یا ناتمام برای کاربران داشته باشد، یا ممکن است لازم باشد در موارد خاصی حقوق را لغو کنید. می‌توانید سفارش‌ها را از «کنسول Play» مدیریت کنید، یا اگر می‌خواهید آن‌ها را از سیستم خودتان مدیریت کنید، می‌توانید این کار را بااستفاده از Google Play Developer API انجام دهید.

لغو اشتراک‌ها

لغو اشتراک می‌تواند ازسوی کاربران یا توسعه‌دهندگان آغاز شود.

لغوهای شروع‌شده توسط کاربر

کاربران می‌توانند هرزمان خواستند اشتراک Google Play را بااستفاده از «فروشگاه Play» لغو کنند. درصورت لزوم، باید گزینه‌ای هم برای کاربران فراهم کنید تا بتوانند اشتراکشان را در برنامه و وب‌سایت شما لغو کنند.

ساده‌ترین راه برای اینکه به کاربران امکان دهید به‌طور داوطلبانه اشتراکشان را لغو کنند، ارائه پیوندهای عمیق در برنامه‌تان به «فروشگاه Play» است، جایی که می‌توانند اشتراک‌هایشان را مشاهده و مدیریت کنند.

لغوهای آغازشده ازسوی توسعه‌دهنده

به‌عنوان توسعه‌دهنده، ممکن است لازم باشد لغو کردن را از باطن خود راه‌اندازی کنید. purchases.subscriptions.cancel API به شما امکان می‌دهد خرید اشتراک را لغو کنید. برای مثال، می‌توانید از این روش برای رد کردن سرویس قدیمی استفاده کنید. لغو اشتراک منجر به استرداد مبلغ نمی‌شود و کاربر تا پایان دوره صورت‌حساب فعلی خود دسترسی را حفظ می‌کند.

این روش به شما امکان می‌دهد انواع لغو زیر را در پارامتر متن درخواست cancellationType مشخص کنید:

  • USER_REQUESTED_STOP_RENEWALS: اشتراک را لغو می‌کند، درست مثل اینکه کاربر آن را از «فروشگاه Play» لغو کرده باشد. هرگونه پرداخت قسطی برای باقی‌مانده دوره تعهد فعلی ادامه خواهد داشت. از «فروشگاه Play»، کاربران می‌توانند اشتراک را قبل‌از منقضی شدن بازیابی کنند، یا اگر برای طرح پایه فعال باشد، پس‌از منقضی شدن دوباره مشترک شوند.

  • DEVELOPER_REQUESTED_STOP_PAYMENTS: اشتراک را لغو می‌کند و از هرگونه پرداخت بیشتر جلوگیری می‌کند. کاربران نمی‌توانند اشتراک را از «فروشگاه Play» بازیابی کنند یا دوباره در آن مشترک شوند، اما می‌توانید به آن‌ها اجازه دهید دوباره در برنامه‌تان مشترک شوند.

به کاربران اجازه دهید اشتراک‌های منقضی‌نشده را بازیابی کنند

در برخی سناریوها، ممکن است مفید باشد که به کاربران اجازه دهید اشتراک‌های منقضی‌نشده را از مرکز اشتراک Play بازیابی کنند، پس‌از اینکه شما به‌عنوان توسعه‌دهنده لغو را آغاز کرده‌اید. برای مثال، ممکن است بخواهید جریان لغو درون‌برنامه سفارشی‌شده‌ای ارائه دهید. براساس منطق کسب‌وکارتان، می‌توانید تصمیم بگیرید که کدام لغوها که از زیرینه شما راه‌اندازی شده‌اند توسط کاربران قابل‌بازیابی باشند.

برای نشان دادن اینکه کاربر می‌تواند لغو را بازیابی کند، درخواست POST را به میانای برنامه‌سازی کاربردی purchases.subscriptions.cancel ارسال کنید و پارامتر درخواست cancellationType را روی مقدار USER_REQUESTED_STOP_RENEWALS تنظیم کنید.

مثال:

  • کد خرید اشتراک 1a2b3c4d5e6f7g8h9i0j
  • نام بسته برنامه com.your.app
  • شناسه اشتراک 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_RENEWALS"
}

به کاربران اجازه دهید اشتراک‌های منقضی‌شده را ازسر بگیرند

برای مجاز کردن ازسرگرفتن اشتراک منقضی‌شده، باید گزینه ازسرگرفتن اشتراک را در طرح پایه اشتراک فعال کنید و سپس اشتراک را با تنظیم پارامتر cancellationType روی مقدار USER_REQUESTED_STOP_RENEWALS لغو کنید.

به کاربران اجازه دهید فقط در برنامه‌تان اشتراک را ازسر بگیرند

اگر پارامتر cancellationType را روی DEVELOPER_REQUESTED_STOP_PAYMENTS تنظیم کرده باشید یا پارامتر cancellationType را تنظیم نکرده باشید، کاربران نمی‌توانند اشتراکشان را از مرکز اشتراک Play بازیابی کنند. اما کاربران می‌توانند درصورت نیاز، دوباره ازطریق برنامه شما برای اشتراک ثبت‌نام کنند.

انجام این اقدام باعث راه‌اندازی اعلان بی‌درنگ توسعه‌دهنده SUBSCRIPTION_CANCELED می‌شود. این لغوها را طبق آنچه در لغوها شرح داده شده است مدیریت کنید.

به‌تعویق انداختن صدور صورت‌حساب

می‌توانید دوره حق استفاده را برای اشتراک بااستفاده از روش subscriptionsv2.defer تمدید کنید. وقتی اشتراکی را با برافزاها به‌تعویق می‌اندازید، همه موارد موجود در اشتراک برای همان مدت به‌تعویق می‌افتند. درطول دوره تعویق، کاربر همچنان مشترک محتوای شما باقی می‌ماند، اما برای زمان اضافی هزینه‌ای از او کسر نمی‌شود. وقتی صورت‌حساب اشتراکی را به‌تعویق می‌اندازید، اطلاعات وضعیت به‌طور مقتضی به‌روز می‌شود و آن را در فیلد expiryTime در اطلاعات وضعیت خرید مشاهده می‌کنید:

  • برای اشتراک‌های تکرارشونده فعال، صورت‌حساب معوقه تاریخ تمدید بعدی را تمدید می‌کند.
  • برای طرح‌های پیش‌پرداخت، صورت‌حساب معوقه زمان انقضا را تمدید می‌کند.

چند نمونه از نحوه استفاده از صدور صورت‌حساب معوق:

  • به‌عنوان پیشنهاد ویژه، دسترسی بدون هزینه به کاربران بدهید، مثلاً یک هفته رایگان به مشترکین فعلی برای تکمیل نظرسنجی بازخورد بدهید.
  • به‌عنوان اقدامی برای خدمات مشتریان، دسترسی رایگان به مشتریان بدهید، برای مثال پس‌از قطعی طولانی‌مدتی که ممکن است بر توانایی آن‌ها برای استفاده از سرویس شما تأثیر گذاشته باشد.

صدور صورت‌حساب را می‌توان حداقل یک روز و حداکثر یک سال برای هر فراخوانی API به‌تعویق انداخت. برای به‌تعویق انداختن بیشتر پایان حق استفاده، پیش‌از رسیدن تاریخ انقضای جدید، دوباره با API تماس بگیرید.

انجام این اقدام باعث راه‌اندازی اعلان بی‌درنگ توسعه‌دهنده SUBSCRIPTION_DEFERRED می‌شود. برای آشنایی با نحوه رسیدگی به این رویدادها، به به‌تعویق انداختن صورت‌حساب برای مشترک در درباره اشتراک‌ها مراجعه کنید.

مثال:

  1. سرویس جاری‌سازی FitnessGoals می‌خواهد برای تشویق به ورزش منظم در ماه فوریه، تبلیغی اجرا کند.

  2. آن‌ها تصمیم می‌گیرند یک ماه سرویس اضافی به هر مشترکی که حداقل ۱۰ بار در ماه فوریه با FitnessGoals تمرین کند ارائه دهند.

  3. آن‌ها نتایج چالش را پیگیری می‌کنند و در ۱ مارس، روش subscriptionsv2.defer را برای هر خرید اشتراک فعال متعلق به کاربرانی که در فوریه چالش را انجام داده‌اند فراخوانی می‌کنند.

  4. این کاربران از مزیت یک ماه کامل ویدیوهای تمرین منظم اضافی بدون هزینه بهره‌مند می‌شوند و به همه دوستانشان می‌گویند که FitnessGoals چگونه به آن‌ها کمک می‌کند سالم بمانند!

صدور استرداد مبلغ و لغو

موقعیت‌های زیادی وجود دارد که ممکن است بخواهید برای اشتراک یا خرید یک‌باره استرداد مبلغ صادر کنید یا دسترسی به آن را لغو کنید.

استرداد کامل مبلغ سفارش براساس شناسه سفارش

بااستفاده از orders.refund API، می‌توانید برای هر سفارشی ظرف سه سال پس‌از خرید، استرداد کامل صادر کنید. روش orders.refund پارامتر لغو را دریافت می‌کند که نشان می‌دهد آیا علاوه‌بر ارائه استرداد، دسترسی باید لغو شود یا نه.

اگر با فراخوانی استرداد مبلغ برای خرید اشتراک، لغو صادر کنید، اشتراک بلافاصله فسخ می‌شود و هم SUBSCRIPTION_REVOKED «اعلان بی‌درنگ توسعه‌دهنده» و هم VoidedPurchaseNotification (ثبت‌شده در Voided Purchases API) را راه‌اندازی می‌کند. برای آشنایی با نحوه رسیدگی به این رویدادها، بخش «لغو» در راهنمای مدیریت چرخه حیات اشتراک را بخوانید.

مثال:

  1. برای جشن گرفتن شروع جام جهانی جدید، برنامه ورزش‌های الکترونیکی Football-Not-Soccer تصمیم می‌گیرد برای همه کاربرانی که در ۲۴ ساعت اول کیت‌های تیم جدید را خریداری می‌کنند، پیراهن‌های مجازی رایگان قرعه‌کشی کند.

  2. Football-Not-Soccer از میانای برنامه‌سازی کاربردی orders.refund بدون ارسال پارامتر لغو برای استرداد مبلغ خرید پیراهن به برندگان استفاده می‌کند.

لغو و استرداد مبلغ اشتراک بااستفاده از نشانه خرید

برای برخی‌از موارد استفاده ممکن است لازم باشد دسترسی به اشتراک کاربر را لغو کنید و استرداد مبلغ ارائه دهید. «خدمات صورت‌حساب Play» روش‌های لغو کردن ازجمله استرداد مبلغ کامل و استرداد مبلغ متناسب با زمان استفاده را ازطریق subscriptionsv2.revoke API ارائه می‌دهد. با این نقطه پایانی، می‌توانید revocationContext را مشخص کنید تا نحوه محاسبه استرداد مبلغ تعیین شود.

انجام این کنش هم SUBSCRIPTION_REVOKEDاعلان بی‌درنگ توسعه‌دهنده و هم VoidedPurchaseNotification را راه‌اندازی می‌کند و در Voided Purchases API ثبت می‌شود. برنامه شما باید این لغوها را همان‌طور که در لغوها شرح داده شده است مدیریت کند.

مثال:

  • خرید با کد خرید 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": {} را به‌عنوان نوع استرداد مبلغ تنظیم کنید.

مثال:

  1. ماریا اشتراک ۳۰ روزه تمدید خودکار برای طرح ماهانه جاری‌سازی SuperMovies دارد. ماریا با برخی مشکلات فنی مواجه شده است که مانع از دسترسی او به محتوا می‌شود. او در روز سوم چرخه صورت‌حسابش با خدمات مشتری تماس می‌گیرد و می‌گوید که هرگز به اشتراک دسترسی نداشته است.

  2. خدمات مشتری جزئیات خرید اشتراک ماریا را در سیستم خود پیدا می‌کند و تماسی با purchases.subscriptionsv2.revoke برقرار می‌کند و درخواست استرداد کامل مبلغ را می‌دهد.

  3. خدمات مشتری به ماریا می‌گوید که ۱۰۰٪ قیمت اشتراکش مسترد خواهد شد و او دیگر در این طرح مشترک نیست.

استرداد مبلغ تناسبی

اگر لازم است اشتراکی را فسخ کنید و بخشی از زمان باقی‌مانده از حق استفاده را مسترد کنید، استرداد وجه سرشکن‌شده صادر کنید. از تابع purchases.subscriptionsv2.revoke استفاده کنید و "proratedRefund": {} را به‌عنوان نوع استرداد مبلغ تنظیم کنید.

استرداد وجه تناسبی هم برای اشتراک‌های تمدید خودکار و هم برای طرح‌های پیش‌پرداخت با مدت حداقل یک هفته پشتیبانی می‌شود.

مثال:

  1. ماریا اشتراک ۳۰ روزه تمدید خودکار برای طرح ماهانه جاری‌سازی SuperMovies دارد. او مدتی است که با خوشحالی از این سرویس استفاده می‌کند. ماریا در روز پانزدهم چرخه صورت‌حسابش با خدمات مشتری تماس می‌گیرد و اعلام می‌کند که به خارج از کشور نقل مکان می‌کند و از روز بعد دیگر نمی‌تواند از این سرویس استفاده کند.

  2. خدمات مشتری جزئیات خرید اشتراک ماریا را در سیستم خود پیدا می‌کند و تماسی با purchases.subscriptionsv2.revoke برقرار می‌کند تا درخواست استرداد مبلغ تناسبی کند.

  3. خدمات مشتری به ماریا می‌گوید که حدود ۵۰٪ از قیمت اشتراک او مسترد خواهد شد و دسترسی به سرویس بلافاصله قطع می‌شود.