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

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

איור 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_CANCELEDOneTimeProductNotification אם הגדרתם קבלת התראות בזמן אמת למפתחים. לדוגמה, זה יכול לקרות אם המשתמש לא משלים את התשלום בתוך מסגרת הזמן הנדרשת, או אם הרכישה מבוטלת על ידי המפתח או לבקשת הלקוח. כשהשרת העורפי מקבל את ההתראה הזו, הוא קורא לשיטה 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 יש שיטות לאישור רכישה ולצריכת מוצרים, שמאפשרות לכם לעבד רכישות מתוך האפליקציה. עם זאת, אנחנו ממליצים לכם לטפל בעיבוד הרכישות בשרת העורפי שלכם, אם יש לכם כזה, כדי להטמיע את התכונה בצורה מאובטחת יותר.