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

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

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

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

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

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

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

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

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

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

  • USER_REQUESTED_STOP_RENEWALS: اشتراک را طوری لغو می‌کند که انگار کاربران از Play Store لغو کرده‌اند. هرگونه پرداخت قسطی برای باقی‌مانده دوره تعهد فعلی ادامه خواهد داشت. از «فروشگاه 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 (ثبت‌شده در 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. خدمات مشتری به ماریا می‌گوید که حدود ۵۰٪ از قیمت اشتراک او مسترد خواهد شد و دسترسی به سرویس بلافاصله قطع می‌شود.