Τεχνολογίες

BillingMeld: γιατί πρέπει να ελέγχει τον αγοραστή ο διακομιστής και όχι η εφαρμογή

Το BillingMeld γίνεται η κεντρική πηγή πληροφοριών για αγορές και συνδρομές. Ελέγχει τις συναλλαγές μέσω App Store και Google Play, παρακολουθεί τις αλλαγές στην κατάσταση τους, και οι συνδεδεμένες υπηρεσίες λειτουργούν μόνο με επιβεβαιωμένη κατάσταση του BillingMeld.

Οι αγορές μέσα σε μια κινητή εφαρμογή εμφανίζονται συνήθως απλές μόνο για τον χρήστη. Πατάει το κουμπί, επιβεβαιώνει την πληρωμή, αποκτά πρόσβαση στη λειτουργία ή στη συνδρομή — και περιμένει ότι όλα θα λειτουργούν αυτόματα στο μέλλον.

Για τον προγραμματιστή, όμως, πίσω από αυτό το κουμπί ξεκινά μια πολύ πιο σύνθετη διαδικασία. Πρέπει να επιβεβαιώσει την ίδια την αγορά, να λαμβάνει υπόψη τις ανανεώσεις, το τέλος της συνδρομής, τις επιστροφές, τα σχόλια στις συναλλαγές, την αλλαγή συσκευής και τις διαφορές μεταξύ των καταστημάτων Apple και Google.

Το βασικό πρόβλημα προκύπτει όταν ο διακομιστής αρχίζει να θεωρεί ότι η εφαρμογή πελάτης είναι η πηγή της αλήθειας.

Αν η εφαρμογή δηλώσει: «Η αγορά ολοκληρώθηκε», ο διακομιστής ανοίγει την πρόσβαση και συνεχίζει να βασίζεται σε αυτή την αρχική κατάσταση. Αλλά ο κύκλος ζωής της αγοράς δεν τελειώνει εδώ.

Η συνδρομή μπορεί να ανανεωθεί, η αυτόματη ανανέωση να απενεργοποιηθεί, η πληρωμή να επιστραφεί και η ίδια η συναλλαγή να ακυρωθεί από το κατάστημα.

Γι’ αυτό ακριβώς το BillingMeld επιβεβαιώνει την αγορά όχι από την εφαρμογή, αλλά από τον διακομιστή.

Ο πελάτης αναφέρει, αλλά δεν αποφασίζει

Στην αρχιτεκτονική του BillingMeld, η εφαρμογή κινητού δεν αποτελεί το κύριο πηγή πληροφόρησης σχετικά με την αγορά.

Ο πελάτης μπορεί να μεταφέρει δεδομένα για μια ολοκληρωμένη συναλλαγή, αλλά αυτό αποτελεί μόνο βάση για έλεγχο. Την τελική απόφαση λαμβάνει ο διακομιστής του BillingMeld, που επαληθεύει τις πληροφορίες μέσω της υποδομής της Apple ή της Google.

Αυτή είναι η θεμελιώδης διαφορά.

Η εφαρμογή στη συσκευή μπορεί να δουλεύει με παλιά δεδομένα, να μην λαμβάνει εγκαίρως τις ενημερώσεις ή να μεταφέρει ήδη μη έγκυρες πληροφορίες σχετικά με την τρέχουσα κατάσταση της αγοράς.

Επιπλέον, ο πελάτης δεν πρέπει να έχει τη δυνατότητα να αποφασίζει αυτόνομα αν ο χρήστης δικαιούται πληρωμένη πρόσβαση.

Το BillingMeld ελέγχει, για παράδειγμα:

  • αν υπάρχει πραγματικά μια τέτοια αγορά;

  • αν αφορά την κατάλληλη εφαρμογή και προϊόν;

  • αν ο πληρωμένος χρόνος ισχύει αυτήν τη στιγμή;

  • αν έχει πραγματοποιηθεί ανανέωση;

  • αν έχει απενεργοποιηθεί η αυτόματη ανανέωση;

  • αν έχει γίνει επιστροφή;

  • αν η συναλλαγή έχει ακυρωθεί;

  • αν δεν έχει λήξει η πληρωμένη περίοδος.

Έτσι, η ενημέρωση του πελάτη δεν αποτελεί απόδειξη για την αγορά, αλλά λόγο για να ελεγχθεί η πραγματική της κατάσταση.

Ένας ενιαίος πηγή αλήθειας για τους διακομιστές

Οι συνδεδεμένες υπηρεσίες δεν χρειάζεται να υλοποιούν αυτοτελώς πλήρες σύνολο ολοκληρώσεων με την Apple και την Google ταυτόχρονα.

Αντ’ αυτού, επικοινωνούν με το BillingMeld και λαμβάνουν ήδη κανονικοποιημένη την κατάσταση της αγοράς.

Π.χ.: η πρόσβαση είναι ενεργή, η πληρωμένη περίοδος έχει λήξει, η ανανέωση έχει επιβεβαιωθεί, η αυτόματη ανανέωση έχει απενεργοποιηθεί ή η αγορά έχει ακυρωθεί.

Αυτό επιτρέπει μια σαφή διαχωριστική γραμμή ευθυνών.

Η Apple και η Google είναι οι πηγές της κατάστασης της εμπορικής συναλλαγής. Το BillingMeld ελέγχει αυτά τα δεδομένα, τα προσαρμόζει σε ένα κοινό μοντέλο και διατηρεί την πιο πρόσφατη κατάσταση. Ο τελικός προϊόν λαμβάνει την απόφαση για την πρόσβαση βάσει της κατάστασης του BillingMeld.

Για τους διακομιστές των προϊόντων, αυτό σημαίνει ενιαία σύμβαση αντί πολλαπλών ανεξάρτητων ολοκληρώσεων.

Δεν χρειάζεται κάθε υπηρεσία να υλοποιεί ξεχωριστά κανόνες για το App Store, το Google Play, και έπειτα να προσπαθεί να εναρμονίσει διαφορετικές μορφές, γεγονότα και καταστάσεις σε μια κοινή λογική.

Γιατί δεν πρέπει να εμπιστεύεσαι ολοκληρωτικά τον πελάτη

Η εφαρμογή του πελάτη λειτουργεί στη συσκευή του χρήστη.

Μπορεί να κλείσει, να επανεκκινήσει, να ανακτήσει από αντίγραφο ασφαλείας, να ενημερωθεί αργότερα ή να τρέξει σε άλλη συσκευή. Μπορεί να δουλεύει με παλιά δεδομένα για κάποιο χρονικό διάστημα ή εντελώς να μην λαμβάνει γεγονότα που συνέβησαν μετά την αρχική αγορά.

Ακόμα και χωρίς την παρέμβαση του χρήστη, η εφαρμογή αυτή αποτελεί κακά αξιόπιστη πηγή τελικής κατάστασης της συνδρομής.

Για παράδειγμα, ο χρήστης εξασφαλίζει μια συνδρομή και λαμβάνει πρόσβαση. Αργότερα, η συναλλαγή μπορεί να επιστραφεί ή ο διακομιστής να ακυρώσει την καταχώριση.

Εάν ο διακομιστής γνωρίζει μόνο το αρχικό μήνυμα του πελάτη, συνεχίζει να θεωρεί την αγορά ενεργή.

Σε άλλη περίπτωση, ο χρήστης μπορεί να απενεργοποιήσει την αυτόματη ανανέωση. Το ήδη πληρωμένο χρονικό διάστημα εξακολουθεί να ισχύει μέχρι την λήξη του.

Αν η σύστημα λειτουργεί με απλό καταστάτη «υπάρχει/δεν υπάρχει συνδρομή», τότε μπορεί εύκολα να κλείσει πρόωρα την πρόσβαση ή να την αφήσει ενεργή αφού έχουν λήξει τα δικαιώματα χρήσης.

Το BillingMeld βασίζεται σε διαφορετική λογική: ο πελάτης δεν επιβεβαιώνει τα δικαιώματά του. Ο πελάτης αναφέρει το γεγονός, και ο διακομιστής καθορίζει την πραγματική κατάσταση της αγοράς.

Η αγορά δεν είναι ένα γεγονός

Μία από τις βασικές λάθη στην αρχιτεκτονική του billing είναι η αντιμετώπιση της αγοράς ως ένα μοναδικό γεγονός.

Πρακτικά, έχει κύκλο ζωής.

Αρχικά, εμφανίζεται μια συναλλαγή. Μετά επιβεβαιώνεται από το κατάστημα. Ξεκινούν η πληρωμένη περίοδος και η ανανεώσιμη συνδρομή. Αργότερα, μπορεί να γίνει ανανέωση.

Ο χρήστης μπορεί να απενεργοποιήσει την αυτόματη ανανέωση, αλλά να συνεχίσει να χρησιμοποιεί τη συνδρομή μέχρι το τέλος της ήδη πληρωμένης περιόδου.

Η πληρωμή μπορεί να αποτύχει στο επόμενο ανανέωση.

Μπορεί να γίνει επιστροφή.

Μπορεί να ακυρωθεί η αγορά.

Γι’ αυτό, μια μόνο βεβαίωση «αυτή η αγορά υπήρχε κάποτε» δεν αρκεί. Το σημαντικό είναι να γνωρίζει ο διακομιστής το τρέχον status.

Η ακύρωση αγοράς και το τέλος πρόσβασης δεν είναι το ίδιο

Εδώ υπάρχει μια σημαντική διαφορά.

Αν ο χρήστης απενεργοποιήσει την αυτόματη ανανέωση, αυτό δεν σημαίνει απαραίτητα ότι η πρόσβαση πρέπει να κλείσει άμεσα.

Ο τρέχων πληρωμένος χρόνος μπορεί ακόμα να ισχύει.

Το BillingMeld πρέπει να αποθηκεύσει ότι η ανανέωση έχει απενεργοποιηθεί, αλλά και να κατανοήσει την ημερομηνία λήξης της ήδη πληρωμένης περιόδου.

Μόλις περάσει το τέλος της, η πρόσβαση θεωρείται ληγμένη αν δεν έχει επιβεβαιωθεί νέα ανανέωση.

Αυτό δείχνει γιατί το απλό boolean subscription = true δεν επαρκεί για έναν σωστό billing.

Η κατάσταση της συνδρομής συνδέεται πάντα με τον χρόνο και τα γεγονότα του κύκλου ζωής της.

Η ανανέωση είναι επίσης μια ξεχωριστή διαδικασία ελέγχου

Η συνδρομή δεν τελειώνει με την πρώτη πληρωμή.

Ο διακομιστής πρέπει να γνωρίζει αν έγινε η επόμενη ανανέωση και αν το επόμενο πληρωμένο διάστημα επιβεβαιώνεται από το κατάστημα.

Το BillingMeld παρακολουθεί αυτές τις αλλαγές και ανανεώνει την κατάσταση της συνδρομής.

Αν η ανανέωση επιβεβαιωθεί, η πρόσβαση συνεχίζεται.

Αν η επόμενη χρέωση αποτύχει ή το κατάστημα δεν επιβεβαιώνει την επόμενη περίοδο, η πρόσβαση δεν πρέπει απλώς να συνεχίζει χωρίς έλεγχο.

Αυτό αρέσει στους χρήστες και δείχνει ότι η πραγματική κατάσταση συνδρομής ανταποκρίνεται στο ενεργό πληρωμένο διάστημα.

Για τους προγραμματιστές, σημαίνει ότι δεν χρειάζεται να υλοποιούν ξεχωριστό κώδικα ανανέωσης σε κάθε εφαρμογή.

Τι σημαίνει ένα τυπικό σενάριο

Ο χρήστης δίνει μια συνδρομή σε μια εφαρμογή κινητού.

Ο πελάτης μεταφέρει τα δεδομένα αγοράς στο BillingMeld. Αλλά αυτό το μήνυμα μόνο του δεν αποτελεί τεκμηρίωση για την επιβεβαίωση της αγοράς.

Το BillingMeld ελέγχει τη συναλλαγή μέσω του αντίστοιχου καταστήματος.

Αν το App Store ή το Google Play επιβεβαιώσουν την αγορά και η κατάσταση είναι σύμφωνα με τους κανόνες, το BillingMeld καταγράφει το ενεργό δικαίωμα.

Μετά, η συνδεδεμένη υπηρεσία παρέχει στους χρήστες τις πληρωμένες λειτουργίες.

Ούτως ή άλλως, η κατάσταση συνεχίζει να υφίσταται ανεξάρτητα από το αρχικό μήνυμα του πελάτη.

Αν η συνδρομή ανανεωθεί, το BillingMeld λαμβάνει υπόψη το νέο πληρωμένο διάστημα.

Αν ο χρήστης απενεργοποιήσει την αυτόματη ανανέωση, το τρέχον διάστημα συνεχίζει μέχρι την λήξη του.

Αν γίνει επιστροφή ή ακύρωση, η κατάσταση αλλάζει πάλι.

Σε αυτό το σενάριο, η εφαρμογή δεν διατηρεί δική της «αλήθεια» για την αγορά. Λειτουργεί με την κατάσταση που επιβεβαιώνεται και αποθηκεύεται από το BillingMeld.

Τι συμβαίνει σε αλλαγή συσκευής

Η διακομιστική προσέγγιση είναι ιδιαίτερα χρήσιμη όταν ο χρήστης αλλάζει συσκευή ή εγκαθιστά ξανά την εφαρμογή.

Το δικαίωμα αγοράς δεν πρέπει να υπάρχει μόνο επειδή ένα συγκεκριμένο αντίγραφο της εφαρμογής είχε κάποτε μια επιτυχημένη συναλλαγή.

Και η επανεγκατάσταση της εφαρμογής δεν πρέπει να διαγράφει το επικυρωμένο δικαίωμα χρήστη.

Αν η κατάσταση της αγοράς είναι αποθηκευμένη στον διακομιστή και συνδέεται με επιβεβαιωμένη συναλλαγή από το κατάστημα, η νέα συσκευή μπορεί να λάβει την τρέχουσα κατάσταση μέσω του διακομιστή.

Αυτός είναι ακόμα ένας λόγος να κρατάμε την λογική πρόσβασης εκτός της κινητής συσκευής.

Τι προσφέρει στους προγραμματιστές

Για μια ομάδα που αναπτύσσει πολλά κινητά ή δουλεύει και με iOS και Android, το billing σύντομα μετατρέπεται σε μια ξεχωριστή υποδομή.

Πρέπει να λαμβάνει υπόψη:

  • διαφορετικά formats δεδομένων της Apple και της Google;

  • επιβεβαίωση πρώτης αγοράς;

  • ανανεώσεις συνδρομών;

  • λήξη πληρωμένου διαστήματος;

  • απενεργοποίηση αυτόματης ανανέωσης;

  • επιστροφές;

  • ακύρωση συναλλαγής;

  • επανεγκατάσταση εφαρμογής;

  • αλλαγή συσκευής;

  • αποκατάσταση αγορών;

  • καταστάσεις αλλαγής χωρίς συμμετοχή του πελάτη.

Το BillingMeld μεταφέρει αυτή τη λογική σε ένα ξεχωριστό εξειδικευμένο επίπεδο.

Οι διακομιστές προϊόντων συνεργάζονται μαζί του μέσω μιας ενιαίας σύμβασης και δεν χρειάζεται να ερμηνεύουν μόνοι τους όλες τις ιδιαιτερότητες κάθε καταστήματος.

Αυτό μειώνει τον διπλό κώδικα και, το σημαντικότερο, μειώνει την πιθανότητα διαφορετικών εφαρμογών μιας εταιρείας να ερμηνεύουν διαφορετικά το ίδιο οικονομικό σενάριο.

Το κυριότερο: όχι το αποδεικτικό, αλλά τα πραγματικά δικαιώματα

Με γοήτευσε περισσότερο στην αρχιτεκτονική αυτή η μετάβαση από τον έλεγχο μιας μεμονωμένης αγοράς σε έλεγχο της τρέχουσας κατάστασης.

Το ιστορικό πληρωμής δεν απαντά αυτόματα στο κύριο ερώτημα του προϊόντος:

έχει ο χρήστης το δικαίωμα στη πληρωμένη λειτουργία αυτήν τη στιγμή;

η πρώτη αγορά μπορεί να ήταν πετυχημένη, αλλά το διάστημα έχει λήξει;

η αυτόματη ανανέωση μπορεί να έχει απενεργοποιηθεί, αλλά η ήδη πληρωμένη περίοδος να ισχύει ακόμα;

υπάρχει επιβεβαιωμένη ανανέωση;

υπάρχει επιστροφή χρήμάτων;

η συναλλαγή μπορεί να έχει ακυρωθεί από το κατάστημα.

Έτσι, το κρίσιμο είναι όχι το αποδεικτικό ή η αρχική απάντηση του πελάτη, αλλά το τρέχον δικαίωμα του χρήστη που βασίζεται στην επιβεβαιωμένη κατάσταση της αγοράς. Αυτό το status το μεταφέρει το BillingMeld στα άλλα συστήματα.

BillingMeld ως διαχωριστική γραμμή μεταξύ καταστημάτων και προϊόντων

Το αποτέλεσμα είναι ένας σαφής αρχιτεκτονικός διαχωρισμός.

Από τη μία, το App Store και το Google Play με τα formats, τα γεγονότα, τους κανόνες και τον κύκλο ζωής των αγορών τους.

Από την άλλη, οι εφαρμογές και οι εσωτερικές υπηρεσίες που χρειάζονται κυρίως μια πιο απλή απάντηση: ποια δικαιώματα έχει ο χρήστης τώρα.

Μεταξύ βρίσκεται το BillingMeld.

Λαμβάνει τα δεδομένα από το κατάστημα, τα ελέγχει, τα μετατρέπει σε δικό του μοντέλο και παρέχει το φυσιολογικό αποτέλεσμα στην υπόλοιπη υποδομή.

Αυτό επιτρέπει στις εταιρείες να μην χρειάζεται να γνωρίζουν όλες τις εσωτερικές ιδιαιτερότητες κάθε πλατφόρμας πληρωμών.

Γιατί είναι σημαντικό για τον χρήστη

Για τον χρήστη, μια σωστή αρχιτεκτονική billing θα πρέπει στην πραγματικότητα να παραμένει αόρατη.

Αν η αγορά είναι επιβεβαιωμένη και η πληρωμένη περίοδος ισχύει, η πρόσβαση πρέπει να λειτουργεί.

Αν ο χρήστης απενεργοποιήσει την αυτόματη ανανέωση, το ήδη πληρωμένο διάστημα δεν πρέπει να λήξει πρόωρα.

Αν πραγματοποιηθεί μια νέα επιβεβαιωμένη ανανέωση, η πρόσβαση πρέπει να συνεχιστεί.

Αν το κατάστημα επιβεβαιώσει μια επιστροφή ή ακύρωση, η κατάσταση πρέπει να αντικατοπτρίζεται σωστά.

Κατά την αλλαγή συσκευής ή την επανεγκατάσταση της εφαρμογής, ο χρήστης δεν θα πρέπει να χρειάζεται να αποδείξει χειροκίνητα σε κάθε μέρος της υποδομής ότι η αγορά υπάρχει πραγματικά.

Το βασικό απλό κανόνα είναι:

ο πελάτης αναφέρει την αγορά, το κατάστημα αποτελεί εξωτερική πηγή της κατάστασής της, το BillingMeld ελέγχει και κανονικοποιεί το status, και οι υπόλοιπες υπηρεσίες λαμβάνουν αποφάσεις βάσει αυτών των επιβεβαιωμένων δεδομένων.

Γι’ αυτό το BillingMeld δεν είναι απλώς ένα ακόμα module πληρωμών, αλλά ένα διακομιστικό στρώμα εμπιστοσύνης μεταξύ της κινητής εφαρμογής, των καταστημάτων της Apple και της Google, και των προϊόντων που πρέπει να γνωρίζουν με ακρίβεια ποια πληρωμένα δικαιώματα ανήκουν στον χρήστη αυτή τη στιγμή.

Περισσότερα για το έργο: billingmeld.de.