ممکن است لازم باشد به عنوان بخشی از کارهای روزمره، اقدامات مدیریتی روی اشتراکها یا خریدهای یکباره انجام دهید. به عنوان مثال، ممکن است خدمات مشتریان شما نیاز به بازپرداخت کامل یا جزئی برای کاربران داشته باشد، یا ممکن است در موارد خاص نیاز به لغو مجوزها داشته باشید. میتوانید سفارشات را از کنسول Play مدیریت کنید ، یا اگر میخواهید آنها را از سیستم خود مدیریت کنید، میتوانید با استفاده از API توسعهدهندگان Google Play این کار را انجام دهید.
لغو اشتراکها
لغو اشتراک میتواند توسط کاربران یا توسعهدهندگان آغاز شود.
لغوهای درخواستی کاربر
کاربران میتوانند اشتراک گوگل پلی را در هر زمانی با استفاده از فروشگاه پلی لغو کنند. در صورت لزوم، شما باید گزینهای را برای کاربران فراهم کنید تا اشتراکهای خود را در برنامه و وبسایت شما لغو کنند.
سادهترین راه برای اینکه کاربران بتوانند داوطلبانه اشتراک خود را لغو کنند، ارائه لینکهای عمیق به فروشگاه پلی استور در برنامه شماست ، جایی که میتوانند اشتراکهای خود را مشاهده و مدیریت کنند.
لغوهای آغاز شده توسط توسعهدهنده
به عنوان یک توسعهدهنده، ممکن است نیاز داشته باشید که لغو اشتراک را از طریق backend خود فعال کنید. API purchases.subscriptions.cancel به شما امکان میدهد خرید اشتراک را لغو کنید. به عنوان مثال، میتوانید از این روش برای رد کردن یک سرویس قدیمی استفاده کنید. لغو اشتراک، بازپرداخت وجه را به همراه ندارد و کاربر تا پایان دوره صورتحساب فعلی خود، دسترسی را حفظ میکند.
این متد به شما امکان میدهد انواع لغو زیر را در پارامتر بدنه درخواست cancellationType مشخص کنید:
USER_REQUESTED_STOP_RENEWALS : اشتراک را لغو میکند، گویی کاربران از فروشگاه Play اشتراک خود را لغو کردهاند. هرگونه پرداخت اقساطی برای مدت زمان باقیمانده از دوره تعهد فعلی ادامه خواهد یافت. کاربران میتوانند از فروشگاه Play اشتراک را قبل از انقضا بازیابی کنند، یا در صورت فعال بودن برای طرح پایه، پس از انقضا دوباره مشترک شوند.
DEVELOPER_REQUESTED_STOP_PAYMENTS : اشتراک را لغو میکند و از هرگونه پرداخت بیشتر جلوگیری میکند. کاربران نمیتوانند اشتراک را از فروشگاه Play بازیابی یا دوباره مشترک شوند، با این حال میتوانید آنها را قادر سازید که دوباره در برنامه شما مشترک شوند.
به کاربران امکان بازیابی اشتراکهای منقضی نشده را بدهید
در برخی سناریوها، ممکن است مفید باشد که به کاربران اجازه دهید اشتراکهای منقضی نشده را از مرکز اشتراک Play پس از فعال کردن لغو اشتراک به عنوان یک توسعهدهنده، بازیابی کنند. به عنوان مثال، ممکن است بخواهید یک جریان لغو اشتراک درون برنامهای سفارشی ارائه دهید. بر اساس منطق کسب و کار خود، میتوانید تصمیم بگیرید که کدام لغوهای فعال شده از backend شما توسط کاربران قابل بازیابی هستند.
برای نشان دادن اینکه کاربر میتواند لغو را بازیابی کند، یک درخواست POST به API purchases.subscriptions.cancel ارسال کنید و پارامتر درخواست cancellationType را روی مقدار USER_REQUESTED_STOP_RENEWAL تنظیم کنید.
مثال:
- خرید توکن اشتراک
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_RENEWAL"
}
به کاربران اجازه دهید اشتراکهای منقضی شده را دوباره مشترک شوند
برای اینکه بتوانید اشتراک منقضی شده را دوباره فعال کنید، باید گزینه Resubscribe را در طرح پایه اشتراک فعال کنید و سپس با تنظیم پارامتر cancellationType روی مقدار USER_REQUESTED_STOP_RENEWAL ، اشتراک را لغو کنید.
فقط در برنامه خود، امکان اشتراک مجدد کاربران را فعال کنید
اگر پارامتر cancellationType روی DEVELOPER_REQUESTED_STOP _PAYMENTS تنظیم کرده باشید یا پارامتر cancellationType تنظیم نکرده باشید، کاربران نمیتوانند اشتراک خود را از مرکز اشتراک Play بازیابی کنند. با این حال، در صورت لزوم، کاربران میتوانند دوباره از طریق برنامه شما برای اشتراک ثبتنام کنند.
انجام این عمل باعث ایجاد اعلان بلادرنگ توسعهدهنده SUBSCRIPTION_CANCELED میشود. این لغوها را همانطور که در بخش لغوها توضیح داده شده است، مدیریت کنید.
پرداخت صورتحساب را به تعویق بیندازید
شما میتوانید دوره حق اشتراک را با استفاده از متد subscriptionsv2.defer تمدید کنید. وقتی اشتراکی را با افزونهها به تعویق میاندازید، تمام موارد موجود در اشتراک با مدت زمان یکسان به تعویق میافتند. در طول دوره تعویق، کاربر همچنان در محتوای شما مشترک باقی میماند، هرچند برای زمان اضافی هزینهای از او دریافت نمیشود. وقتی پرداخت صورتحساب برای یک اشتراک را به تعویق میاندازید، اطلاعات وضعیت بر این اساس بهروزرسانی میشود و میتوانید آن را در فیلد expiryTime در اطلاعات وضعیت خرید مشاهده کنید:
- برای اشتراکهای فعال و دورهای، صورتحساب معوق، تاریخ تمدید بعدی را تمدید میکند.
- برای طرحهای پیشپرداخت، صورتحساب معوق، زمان انقضا را افزایش میدهد.
چند نمونه از نحوه استفاده از صورتحساب معوق عبارتند از:
- به عنوان یک پیشنهاد ویژه، به کاربران دسترسی رایگان بدهید، مانند ارائه یک هفته رایگان به مشترکین فعلی برای پر کردن یک نظرسنجی بازخورد.
- به عنوان یک اقدام در راستای خدمات مشتری، به مشتریان دسترسی رایگان بدهید، مثلاً پس از قطعی طولانی مدت که ممکن است بر توانایی آنها در استفاده از خدمات شما تأثیر گذاشته باشد.
پرداخت صورتحساب میتواند به ازای هر تماس API از یک روز تا یک سال به تعویق بیفتد. برای به تعویق انداختن بیشتر پایان اعتبار، قبل از رسیدن تاریخ انقضای جدید، دوباره با API تماس بگیرید.
انجام این اقدام باعث ایجاد یک اعلان توسعهدهندهی بلادرنگ SUBSCRIPTION_DEFERRED میشود. برای آشنایی با نحوهی مدیریت این رویدادها، به بخش «به تعویق انداختن پرداخت برای یک مشترک» در «دربارهی اشتراکها» مراجعه کنید.
مثال:
سرویس پخش آنلاین FitnessGoals میخواهد در ماه فوریه تبلیغاتی را برای تشویق به ورزش منظم اجرا کند.
آنها تصمیم گرفتهاند به هر مشترکی که در طول ماه فوریه حداقل ۱۰ بار با FitnessGoals ورزش کند، یک ماه خدمات اضافی ارائه دهند.
آنها نتایج چالش را پیگیری میکنند و در اول مارس، متد subscriptionsv2.defer را برای هر خرید اشتراک فعال متعلق به کاربرانی که در ماه فوریه با چالش مواجه شدهاند، فراخوانی میکنند.
این کاربران از یک ماه کامل ویدیوهای ورزشی منظم و رایگان بهرهمند میشوند و به همه دوستانشان میگویند که FitnessGoals چگونه به آنها در سالم ماندن کمک میکند!
صدور بازپرداخت و لغو سفارش
موقعیتهای زیادی وجود دارد که ممکن است بخواهید وجه اشتراک یا خرید یکباره را بازپرداخت کنید یا دسترسی به آن را لغو کنید.
بازپرداخت کامل سفارش با استفاده از شناسه سفارش
با استفاده از API orders.refund ، میتوانید وجه هر سفارشی را ظرف سه سال از تاریخ خرید، به طور کامل بازپرداخت کنید. متد orders.refund علاوه بر ارائه وجه، یک پارامتر revoke دریافت میکند که نشان میدهد آیا دسترسی باید لغو شود یا خیر.
اگر هنگام درخواست بازپرداخت برای خرید اشتراک، لغو اشتراک را اعلام کنید، اشتراک بلافاصله خاتمه مییابد و اعلان توسعهدهندهی بلادرنگ SUBSCRIPTION_REVOKED فعال میشود. برای آشنایی با نحوهی مدیریت این رویدادها، بخش لغو اشتراک ، راهنمای مدیریت چرخهی حیات اشتراک را مطالعه کنید.
مثال:
برای جشن گرفتن آغاز جام جهانی جدید، اپلیکیشن ورزشهای الکترونیکی Football-Not-Soccer تصمیم گرفته است برای تمام کاربرانی که در ۲۴ ساعت اول کیتهای جدید تیم را خریداری کنند، پیراهنهای مجازی رایگان قرعهکشی کند.
Football-Not-Soccer از API
orders.refundبدون ارسال پارامتر revoke برای بازپرداخت خریدهای پیراهن به برندگان استفاده میکند.
لغو و بازپرداخت اشتراک با استفاده از توکن خرید
برای موارد استفاده خاص، ممکن است لازم باشد دسترسی به اشتراک کاربر را لغو کرده و مبلغ را بازپرداخت کنید. Play Billing روشهای لغو اشتراک، از جمله بازپرداخت کامل و بازپرداختهای متناسب را از طریق API subscriptionsv2.revoke ارائه میدهد. با استفاده از این نقطه پایانی، میتوانید revocationContext برای تعیین نحوه محاسبه بازپرداخت مشخص کنید.
انجام این عمل باعث ایجاد یک اعلان توسعهدهندهی بلادرنگ SUBSCRIPTION_REVOKED میشود. برنامهی شما باید این لغوها را همانطور که در بخش لغوها توضیح داده شده است، مدیریت کند.
مثال:
- خرید با توکن خرید
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": {} قرار دهید.
مثال:
ماریا یک اشتراک ۳۰ روزه با طرح ماهانه پخش آنلاین SuperMovies دارد که به طور خودکار تمدید میشود. ماریا با برخی مشکلات فنی مواجه شد که مانع از دسترسی او به محتوا میشد. او در روز سوم چرخه صورتحساب خود با خدمات مشتریان تماس گرفت و اظهار داشت که هرگز به اشتراک دسترسی پیدا نکرده است.
خدمات مشتریان جزئیات خرید اشتراک ماریا را در سیستم خود پیدا میکند و با درخواست بازپرداخت کامل وجه، به
purchases.subscriptionsv2.revokeمتصل میشود.خدمات مشتریان به ماریا میگوید که باید ۱۰۰٪ هزینه اشتراکش را پس بگیرد و او دیگر در این طرح مشترک نیست.
بازپرداختهای متناسب
اگر نیاز به خاتمه اشتراک و بازپرداخت بخشی از زمان باقیمانده دارید، بازپرداخت متناسب با زمان اشتراک را اعمال کنید. از تابع purchases.subscriptionsv2.revoke استفاده کنید و نوع بازپرداخت را "proratedRefund": {} قرار دهید.
مثال:
ماریا یک اشتراک ۳۰ روزه با قابلیت تمدید خودکار برای طرح ماهانه پخش آنلاین SuperMovies دارد. او مدتی است که با خوشحالی از این سرویس استفاده میکند. ماریا در روز پانزدهم از چرخه صورتحساب خود با خدمات مشتریان تماس میگیرد و میگوید که به خارج از کشور نقل مکان میکند و از روز بعد دیگر نمیتواند از این سرویس استفاده کند.
خدمات مشتریان جزئیات خرید اشتراک ماریا را در سیستم خود پیدا میکند و با فراخوانی
purchases.subscriptionsv2.revokeدرخواست بازپرداخت متناسب با مبلغ پرداختی را میدهد.خدمات مشتریان به ماریا میگوید که باید حدود ۵۰٪ از هزینه اشتراکش را پس بگیرد و دسترسی او به سرویس فوراً قطع شود.