יכול להיות שתצטרכו לבצע פעולות ניהול במינויים או ברכישות חד-פעמיות כחלק מהפעילות העסקית היומיומית. לדוגמה, יכול להיות שצוות שירות הלקוחות שלכם יצטרך להנפיק החזרים כספיים מלאים או חלקיים למשתמשים, או שתצטרכו לבטל הרשאות במקרים מסוימים. אתם יכולים לנהל הזמנות מ-Play Console, או אם אתם רוצים לנהל אותן מהמערכת שלכם, אתם יכולים לעשות זאת באמצעות ממשק API של Google Play למפתחים.
ביטול מינויים
משתמשים או מפתחים יכולים לבטל מינויים.
ביטולים ביוזמת המשתמשים
המשתמשים יכולים לבטל מינוי ב-Google Play בכל שלב דרך חנות Play. אם רלוונטי, צריך גם לספק למשתמשים אפשרות לבטל את המינויים שלהם באפליקציה ובאתר.
הדרך הקלה ביותר לאפשר למשתמשים לבטל את המינוי מרצונם היא לספק קישורי עומק באפליקציה לחנות Play, שבה הם יכולים לראות את המינויים שלהם ולנהל אותם.
ביטולים ביוזמת המפתח
יכול להיות שבתור מפתחים תצטרכו להפעיל ביטולים גם מהקצה העורפי שלכם.
purchases.subscriptions.cancel API מאפשר לכם לבטל רכישת מינוי.
לדוגמה, אפשר להשתמש בשיטה הזו כדי להשבית שירות מדור קודם.
ביטול מינוי לא מזכה בהחזר כספי, והמשתמש שומר על הגישה עד סוף תקופת החיוב הנוכחית.
השיטה הזו מאפשרת לציין את סוגי הביטולים הבאים בפרמטר cancellationType של גוף הבקשה:
USER_REQUESTED_STOP_RENEWALS: המינוי מבוטל כאילו המשתמשים ביטלו אותו מחנות Play. כל התשלומים ימשיכו עד לסיום תקופת ההתחייבות הנוכחית. משתמשים יכולים לשחזר את המינוי לפני שהוא יפוג דרך חנות Play, או להירשם מחדש אחרי שהוא יפוג אם האפשרות הזו מופעלת במינוי הבסיסי.
DEVELOPER_REQUESTED_STOP_PAYMENTS: מבטל את המינוי ומונע תשלומים נוספים. המשתמשים לא יכולים לשחזר את המינוי או להירשם אליו מחדש דרך חנות Play, אבל אתם יכולים לאפשר להם להירשם מחדש דרך האפליקציה שלכם.
מתן אפשרות למשתמשים לשחזר מינויים שלא פג תוקפם
במקרים מסוימים, יכול להיות שתרצו לאפשר למשתמשים לשחזר מינויים שלא פג תוקפם ממרכז המינויים של Play, אחרי שהפעלתם את הביטול כמפתחים. לדוגמה, יכול להיות שתרצו לספק תהליך ביטול מותאם אישית באפליקציה. על סמך הלוגיקה העסקית שלכם, אתם יכולים להחליט אילו ביטולים שהופעלו מהקצה העורפי ניתנים לשחזור על ידי המשתמשים.
כדי לציין שמשתמש יכול לבטל את הביטול, שולחים בקשת POST ל-API של 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התראה בזמן אמת למפתחים. במאמר מידע על מינויים מוסבר איך לטפל באירועים האלה.
דוגמה:
שירות הסטרימינג FitnessGoals רוצה להפעיל מבצע כדי לעודד פעילות גופנית סדירה במהלך חודש פברואר.
הם מחליטים להציע חודש נוסף של שירות לכל מנוי שמתאמן עם FitnessGoals לפחות 10 פעמים במהלך חודש פברואר.
הם עוקבים אחרי תוצאות האתגר, וב-1 במרץ הם קוראים ל-method subscriptionsv2.defer לכל רכישת מינוי פעילה ששייכת למשתמשים שעמדו באתגר בפברואר.
המשתמשים האלה נהנים מחודש נוסף מלא של סרטוני אימון רגילים ללא עלות, והם מספרים לכל החברים שלהם כמה FitnessGoals עוזרת להם לשמור על הבריאות.
ביצוע החזרים כספיים וביטולים
יש הרבה מצבים שבהם תרצו להנפיק החזר כספי או לבטל את הגישה למינוי או לרכישה חד-פעמית.
החזר כספי מלא על הזמנה לפי מזהה הזמנה
באמצעות ה-API של orders.refund, אתם יכולים להנפיק החזרים כספיים מלאים על כל הזמנה תוך שלוש שנים ממועד הרכישה.
ה-method orders.refund מקבל פרמטר revoke שמציין אם צריך לבטל את הגישה בנוסף למתן ההחזר הכספי.
אם מבצעים ביטול עם קריאת ההחזר הכספי לרכישת מינוי, המינוי מסתיים באופן מיידי ומופעלות גם התראה בזמן אמת למפתחים מסוג SUBSCRIPTION_REVOKED וגם התראה מסוג VoidedPurchaseNotification (מתועדת ב-Voided Purchases API). כדי לדעת איך לטפל באירועים האלה, אפשר לקרוא את המדריך לניהול מחזור החיים של מינויים בקטע בנושא ביטולים.
דוגמה:
כדי לחגוג את תחילת מונדיאל חדש, אפליקציית הספורט האלקטרוני Football-Not-Soccer מחליטה להעניק במתנה חולצות וירטואליות לכל המשתמשים שירכשו ערכות חדשות של קבוצות ב-24 השעות הראשונות.
האפליקציה Football-Not-Soccer משתמשת ב-API
orders.refundבלי לקבוע ערך לפרמטר ביטול כדי לבצע החזר כספי על רכישות של חולצות לזוכים.
ביטול מינוי והחזר כספי באמצעות אסימון רכישה
במקרים מסוימים, יכול להיות שתצטרכו לבטל את הגישה למינוי של משתמש ולספק החזר כספי. חיוב ב-Play מציע שיטות לביטול, כולל החזרים כספיים מלאים והחזרים כספיים יחסיים דרך ה-API של subscriptionsv2.revoke. בנקודת הקצה הזו, אתם יכולים לציין את 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": {} כסוג ההחזר הכספי.
דוגמה:
למריה יש מינוי ל-30 יום שמתחדש אוטומטית לתוכנית החודשית של SuperMovies. מריה נתקלה בבעיות טכניות שמונעות ממנה לגשת לתוכן. היא פונה לשירות הלקוחות ביום השלישי של מחזור החיוב שלה ומציינת שהיא מעולם לא קיבלה גישה למינוי.
נציג שירות הלקוחות מאתר במערכת את פרטי הרכישה של המינוי של מריה, ומפעיל קריאה ל-
purchases.subscriptionsv2.revokeכדי לבקש החזר כספי מלא.שירות הלקוחות אומר למריה שהיא תקבל החזר כספי מלא על מחיר המינוי, ושהיא לא מנויה יותר לתוכנית.
החזרים כספיים יחסיים
אם אתם צריכים לסיים מינוי ולתת החזר כספי חלקי על הזמן שנותר, אתם יכולים להנפיק החזר כספי יחסי. משתמשים בפונקציה purchases.subscriptionsv2.revoke ומגדירים את "proratedRefund": {} כסוג ההחזר הכספי.
אפשר לבצע החזרים כספיים יחסיים גם על מינויים שמתחדשים אוטומטית וגם על מינויים בתשלום מראש לתקופה של שבוע לפחות.
דוגמה:
למריה יש מינוי לתוכנית חודשית של SuperMovies streaming שמתחדש אוטומטית כל 30 יום. היא משתמשת בשירות כבר זמן מה, ומרוצה ממנו. ביום ה-15 של מחזור החיובים, מריה פונה לשירות הלקוחות ומסבירה שהיא עוברת לחו"ל ולא תוכל להשתמש יותר בשירות החל מהיום הבא.
נציג שירות הלקוחות מאתר במערכת שלו את פרטי הרכישה של המינוי של מריה ומפעיל קריאה אל
purchases.subscriptionsv2.revokeכדי לבקש החזר כספי יחסי.נציג שירות הלקוחות אומר למריה שהיא אמורה לקבל החזר כספי של כ-50% ממחיר המינוי, ושהגישה לשירות תופסק באופן מיידי.