ניהול מינויים ורכישות חד-פעמיות

יכול להיות שתצטרכו לבצע פעולות ניהול במינויים או ברכישות חד-פעמיות כחלק מהפעילות העסקית השוטפת. לדוגמה, יכול להיות שצוות שירות הלקוחות שלכם יצטרך להנפיק החזרים כספיים מלאים או חלקיים למשתמשים, או שתצטרכו לבטל הרשאות במקרים מסוימים. אפשר לנהל הזמנות מ-Play Console, או להשתמש ב-Google Play Developer API כדי לנהל אותן מהמערכת שלכם.

ביטול מינויים

משתמשים או מפתחים יכולים לבטל מינויים.

ביטולים שבוצעו על ידי המשתמש

המשתמשים יכולים לבטל מינוי ל-Google Play בכל שלב דרך חנות Play. בנוסף, אם רלוונטי, עליך לספק למשתמשים אפשרות לבטל את המינויים שלהם באפליקציה ובאתר שלך.

הדרך הכי פשוטה לאפשר למשתמשים לבטל את המינוי מרצונם היא לספק קישורי עומק באפליקציה ל-Play Store, שבה הם יכולים לראות ולנהל את המינויים שלהם.

ביטולים שמתבצעים על ידי המפתח

יכול להיות שגם אתם, כמפתחים, תצטרכו להפעיל ביטולים מהקצה האחורי שלכם. ‫purchases.subscriptions.cancel ה-API מאפשר לכם לבטל רכישת מינוי. לדוגמה, אפשר להשתמש בשיטה הזו כדי להשבית שירות מדור קודם. ביטול מינוי לא מוביל להחזר כספי, והמשתמש שומר על הגישה עד סוף תקופת החיוב הנוכחית.

בעזרת השיטה הזו אפשר לציין את סוגי הביטולים הבאים בפרמטר cancellationType של גוף הבקשה:

  • USER_REQUESTED_STOP_RENEWALS: ביטול המינוי כאילו המשתמשים ביטלו אותו מחנות Play. תשלומי התחייבות ימשיכו עד לסוף תקופת ההתחייבות הנוכחית. אם המינוי הבסיסי מאפשר זאת, המשתמשים יכולים לשחזר את המינוי לפני שהוא יפוג או להירשם מחדש אחרי שהוא יפוג דרך חנות Play.

  • DEVELOPER_REQUESTED_STOP_PAYMENTS: המינוי יבוטל ולא יבוצעו תשלומים נוספים. המשתמשים לא יכולים לשחזר את המינוי או להירשם אליו מחדש דרך חנות Play, אבל אתם יכולים לאפשר להם להירשם מחדש דרך האפליקציה שלכם.

איך מאפשרים למשתמשים לשחזר מינויים שלא פג תוקפם

בתרחישים מסוימים, כדאי לאפשר למשתמשים לשחזר מינויים שתוקפם לא פג ממרכז המינויים של Play, אחרי שהפעלתם את הביטול כמפתחים. לדוגמה, יכול להיות שתרצו לספק תהליך ביטול מותאם אישית באפליקציה. בהתאם ללוגיקה העסקית שלכם, אתם יכולים להחליט אילו ביטולים שהופעלו מהקצה העורפי ניתנים לשחזור על ידי המשתמשים.

כדי לציין שמשתמש יכול לשחזר את הביטול, צריך לשלוח בקשת POST אל purchases.subscriptions.cancel API ולהגדיר את פרמטר הבקשה 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"
}

איך מאפשרים למשתמשים להירשם מחדש למינויים שתוקפם פג

כדי לאפשר הרשמה מחדש למינוי שפג תוקפו, צריך להפעיל את האפשרות הרשמה מחדש במינוי הבסיסי, ואז לבטל את המינוי על ידי הגדרת הפרמטר cancellationType לערך USER_REQUESTED_STOP_RENEWAL.

המשתמשים יכולים לחדש את המינוי רק באפליקציה שלכם

אם הגדרתם את הפרמטר cancellationType לערך DEVELOPER_REQUESTED_STOP _PAYMENTS או שלא הגדרתם את הפרמטר cancellationType, המשתמשים לא יכולים לשחזר את המינוי שלהם ממרכז המינויים ב-Play. עם זאת, המשתמשים יכולים להירשם מחדש למינוי דרך האפליקציה שלכם, אם נדרש.

הפעולה הזו מפעילה SUBSCRIPTION_CANCELEDהתראה בזמן אמת למפתחים. צריך לטפל בביטולים האלה לפי ההוראות שמופיעות במאמר בנושא ביטולים.

דחיית החיוב

אפשר להאריך את תקופת הזכאות של מינוי באמצעות השיטה subscriptionsv2.defer. כשדוחים את החיוב על מינוי עם חבילות, כל הפריטים במינוי נדחים למשך אותו פרק זמן. במהלך תקופת הדחייה, המשתמש נשאר מנוי לתוכן שלכם, אבל לא יחויב על הזמן הנוסף. כשדוחים את החיוב על מינוי, פרטי הסטטוס מתעדכנים בהתאם ומוצגים בשדה expiryTime בפרטי סטטוס הרכישה:

  • במינויים פעילים בתשלום קבוע, דחיית החיוב מאריכה את תאריך החידוש הבא.
  • במינויים בתשלום מראש, חיוב דחוי מאריך את תוקף המינוי.

דוגמאות לשימוש בחיוב נדחה:

  • אתם יכולים להציע למשתמשים גישה ללא עלות במסגרת מבצע מיוחד, למשל שבוע חינם למנויים קיימים שממלאים סקר משוב.
  • לדוגמה, אחרי הפסקת שירות ממושכת שאולי השפיעה על היכולת של הלקוחות להשתמש בשירות שלכם, אתם יכולים לתת להם גישה ללא עלות כפעולה לשירות לקוחות.

אפשר לדחות את החיוב ביום אחד לפחות ועד שנה לכל קריאה ל-API. כדי לדחות עוד יותר את סיום ההרשאה, צריך להפעיל את ה-API שוב לפני תאריך התפוגה החדש.

הפעולה הזו מפעילה SUBSCRIPTION_DEFERREDהתראה בזמן אמת למפתחים. במאמר מידע על מינויים מוסבר איך לטפל באירועים האלה.

דוגמה:

  1. שירות הסטרימינג FitnessGoals רוצה להפעיל מבצע כדי לעודד פעילות גופנית קבועה בפברואר.

  2. הם מחליטים להציע חודש נוסף של שירות לכל מנוי שמתאמן עם FitnessGoals לפחות 10 פעמים במהלך חודש פברואר.

  3. הם עוקבים אחרי התוצאות של האתגר, וב-1 במרץ הם קוראים לשיטה subscriptionsv2.defer לכל רכישה פעילה של מינוי ששייכת למשתמשים שעמדו באתגר במהלך פברואר.

  4. המשתמשים האלה נהנים מחודש נוסף של סרטוני אימון רגילים ללא עלות, והם מספרים לכל החברים שלהם איך FitnessGoals עוזרת להם לשמור על הבריאות.

מתן החזרים כספיים וביטולים

יש הרבה מצבים שבהם כדאי להנפיק החזר כספי על מינוי או על רכישה חד-פעמית, או לבטל את הגישה אליהם.

החזר כספי מלא על הזמנה לפי מזהה הזמנה

באמצעות ה-API‏ orders.refund, אפשר להנפיק החזרים כספיים מלאים על כל הזמנה תוך שלוש שנים ממועד הרכישה. השיטה orders.refund מקבלת פרמטר revoke שמציין אם צריך לבטל את הגישה בנוסף להחזר הכספי.

אם תשלחו ביטול עם קריאה להחזר כספי על רכישת מינוי, המינוי יסתיים באופן מיידי ותופעל SUBSCRIPTION_REVOKEDהתראה בזמן אמת למפתחים. כדי ללמוד איך לטפל באירועים האלה, כדאי לקרוא את המאמר בנושא ניהול מחזור החיים של מינויים, בקטע בנושא ביטולים.

דוגמה:

  1. כדי לחגוג את תחילת המונדיאל החדש, באפליקציית הספורט האלקטרוני Football-Not-Soccer מחליטים להעניק במתנה חולצות וירטואליות לכל המשתמשים שירכשו ערכות חדשות של קבוצות ב-24 השעות הראשונות.

  2. האפליקציה Football-Not-Soccer משתמשת ב-API‏ orders.refund בלי להעביר פרמטר ביטול כדי להחזיר כסף לזוכים על רכישות של חולצות.

ביטול מינוי והחזר כספי על מינוי באמצעות טוקן רכישה

במקרים מסוימים, יכול להיות שתצטרכו לבטל את הגישה למינוי של משתמש ולספק החזר כספי. מערכת החיוב של Play מציעה שיטות לביטול מינויים, כולל החזרים כספיים מלאים והחזרים כספיים יחסיים דרך subscriptionsv2.revoke API. בנקודת הקצה הזו אפשר לציין 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": {} כסוג ההחזר.

דוגמה:

  1. למריה יש מינוי לחידוש אוטומטי ל-30 יום לתוכנית חודשית של SuperMovies streaming. מריה נתקלה בבעיות טכניות שמנעו ממנה לגשת לתוכן. ביום השלישי של מחזור החיוב שלה, היא פונה לשירות הלקוחות ומציינת שמעולם לא קיבלה גישה למינוי.

  2. נציג שירות הלקוחות מאתר במערכת את פרטי הרכישה של המינוי של מריה ומפעיל קריאה אל purchases.subscriptionsv2.revoke כדי לבקש החזר כספי מלא.

  3. נציג שירות הלקוחות אומר למריה שהיא תקבל החזר כספי על 100% ממחיר המינוי, ושהיא לא מנויה יותר לתוכנית.

החזרים כספיים יחסיים

אם אתם צריכים לבטל מינוי ולתת החזר כספי חלקי על הזמן שנותר עד לסיום תקופת הזכאות, אתם צריכים להנפיק החזר כספי יחסי. משתמשים בפונקציה purchases.subscriptionsv2.revoke ומגדירים את "proratedRefund": {} כסוג ההחזר.

דוגמה:

  1. למריה יש מינוי לחידוש אוטומטי ל-30 יום לתוכנית חודשית של SuperMovies streaming. היא נהנתה להשתמש בשירות במשך תקופה מסוימת. מרים פונה לשירות הלקוחות ביום ה-15 של מחזור החיוב שלה ומציינת שהיא עוברת לחו"ל ולא תוכל להשתמש בשירות יותר החל מהיום הבא.

  2. נציג שירות הלקוחות מאתר במערכת שלו את פרטי הרכישה של המינוי של מריה ומפעיל קריאה ל-purchases.subscriptionsv2.revoke כדי לבקש החזר כספי יחסי.

  3. נציג שירות הלקוחות אומר למריה שהיא תקבל החזר כספי של כ-50% ממחיר המינוי, ושהגישה לשירות תופסק באופן מיידי.