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

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

מצבים במחזור החיים ואירועי מעבר לרכישות חד-פעמיות.
איור 1 מצבים במחזור החיים ואירועי מעבר לרכישות חד-פעמיות.

רכישות חדשות של מוצרים בחיוב חד-פעמי

אחרי שהמשתמש משלים את רצף פעולות החיוב, האפליקציה יכולה לראות מידע על הרכישה החדשה באחת מהדרכים הבאות:

אחרי שמקבלים את הרכישה החדשה, משתמשים בשיטה getPurchaseState או בשיטה purchases.productsv2.getproductpurchasev2 in Play Developer API

כדי לקבוע את סטטוס התשלום של הרכישה החדשה.

התראות בזמן אמת למפתחים

כשמשתמש רוכש מוצר בחיוב חד-פעמי או מבטל את הרכישה, מערכת Google Play שולחת הודעה מסוג OneTimeProductNotification. כדי לעדכן את סטטוס הרכישה בשרת העורפי, צריך להשתמש בטוקן הרכישה שמופיע באובייקט OneTimeProductNotification כדי לקרוא לשיטה purchases.productsv2.getproductpurchasev2. השיטה הזו מספקת את הסטטוס העדכני של הרכישה והשימוש בה, בהינתן טוקן רכישה.

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

אתם צריכים לטפל בהודעות RTDN שקשורות לעסקאות בקצה העורפי המאובטח שלכם.

טיפול בעסקאות שהושלמו

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

טיפול בעסקאות שבוטלו

כשמבטלים רכישה חד-פעמית של מוצר, מערכת Google Play שולחת הודעה מסוג ONE_TIME_PRODUCT_CANCELED עם הערך OneTimeProductNotification אם הגדרתם קבלת התראות בזמן אמת למפתחים. לדוגמה, זה יכול לקרות אם המשתמש לא משלים את התשלום בפרק הזמן הנדרש, או אם הרכישה בוטלה על ידי המפתח או לבקשת הלקוח. כשהשרת העורפי מקבל את ההתראה הזו, הוא קורא לשיטה purchases.productsv2.getproductpurchasev2 כדי לקבל את סטטוס הרכישה העדכני, ואז מעדכן את השרת העורפי בהתאם, כולל הרשאות המשתמש.

אם יתקבל החזר כספי על רכישת מוצר בחיוב חד-פעמי בסטטוס Purchased, תקבלו על כך הודעה באמצעות Voided Purchases API.

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

בין אם זיהיתם רכישה חדשה באמצעות ONE_TIME_PRODUCT_PURCHASED RTDN או שקיבלתם על כך הודעה באפליקציה באמצעות PurchasesUpdatedListener או אחזור ידני של רכישות בשיטה onResume() של האפליקציה, אתם צריכים לעבד את הרכישה החדשה. כדי לשפר את האבטחה, מומלץ לטפל בעיבוד הרכישות בקצה העורפי.

כדי לעבד רכישה חד-פעמית חדשה:

  1. שולחים שאילתה לנקודת הקצה purchases.productsv2.getproductpurchasev2 כדי לקבל את הסטטוס העדכני של רכישת מוצר בחיוב חד-פעמי. כדי לשלוח קריאה לרכיב ה-method הזה עבור רכישה, אתם צריכים את המזהה המתאים purchaseToken מהאפליקציה או מ-ONE_TIME_PRODUCT_PURCHASED RTDN.
  2. מתקשרים אל getPurchaseState() ומוודאים שמצב הרכישה הוא PURCHASED.
  3. מאמתים את הרכישה.
  4. נותנים למשתמש גישה לתוכן. אפשר לזהות את חשבון המשתמש שמשויך לרכישה באמצעות השדה obfuscatedExternalAccountId מתוך purchases.productsv2.getproductpurchasev2, אם הוגדר באמצעות setObfuscatedAccountId() בזמן ביצוע הרכישה.
    1. ברכישות של מוצרים לא מתכלים, צריך לאשר את מסירת התוכן באמצעות קריאה לשיטה purchases.products.acknowledge. כדי לוודא שהרכישה לא אושרה בעבר, בודקים את השדה acknowledgementState.
    2. אם המוצר הוא מתכלה, צריך לסמן את הפריט כפריט שנצרך באמצעות הקריאה לשיטה purchases.products.consume, כדי שהמשתמש יוכל לקנות את הפריט שוב אחרי שהוא צרך אותו. בשיטה הזו יש גם אישור על הרכישה.

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