Έχω χρησιμοποιήσει το GooglePay API σε αρκετές Android εφαρμογές και κάτι το οποίο δε μου ήταν ξεκάθαρο από την αρχή ήταν η σημασία των διαθέσιμων επιλογών για το authentication μιας κάρτας.
Σε αυτό το άρθρο θα εξηγήσω τι σημαίνει κάθε επιλογή και τι χρειάζεται να κάνεις σε κάθε περίπτωση.
Υπάρχουν δύο διαθέσιμες επιλογές: PAN_ONLY και CRYPTOGRAM_3DS.
PAN_ONLY Link to heading
Με το PAN_ONLY, το Google Pay εμφανίζει τις κάρτες που είναι αποθηκευμένες στο Google account του χρήστη (cards on file) και δεν είναι tokenized (δες την ενότητα CRYPTOGRAM_3DS για το τι σημαίνει αυτό).
Κατά τη διάρκεια της συναλλαγής, αν ο payment provider σου απαιτήσει 3DS authentication για τη συναλλαγή, θα πρέπει να υλοποιήσεις εσύ το 3DS flow.
Ανάλογα με το risk profile της συναλλαγής, το 3DS flow μπορεί να ολοκληρωθεί σιωπηλά (frictionless) ή να απαιτήσει επαλήθευση από τον χρήστη μέσω browser (challenge flow).
Η πολυπλοκότητα της υλοποίησης του 3DS flow στο Android app σου εξαρτάται από τον payment provider που θα επιλέξεις.
Σε ένα project που χρησιμοποίησα Stripe, δε χρειάστηκε να κάνω απολύτως τίποτα, ούτε καν να ορίσω ποια authentication methods θέλω να υποστηρίξω. Σε ένα άλλο που χρησιμοποίησα Worldpay, έπρεπε να χρησιμοποιήσω το Cardinal SDK για την υλοποίηση του 3DS flow. Τέλος, σε μια άλλη περίπτωση δε χρησιμοποίησα κανένα 3rd party SDK και έκανα χειροκίνητα το redirect σε WebView.
CRYPTOGRAM_3DS Link to heading
Με το CRYPTOGRAM_3DS, το Google Pay εμφανίζει τις κάρτες που προηγουμένως ο χρήστης έχει προσθέσει στο Google Wallet app.
Κατά την προσθήκη τους, ανάλογα με τις απαιτήσεις της τράπεζας, ο χρήστης μπορεί να χρειαστεί να επαληθεύσει την ταυτότητά του. Στο τέλος δημιουργείται ένα device-specific token και αυτές οι κάρτες λέμε ότι είναι “tokenized”.
Έτσι, επειδή το authentication έχει ήδη γίνει, δε χρειάζεται να υλοποιήσεις 3DS flow στην εφαρμογή σου.
Αν επιλέξει μια από αυτές τις κάρτες για κάποια συναλλαγή, δε θα περάσει από 3DS. Θα του ζητηθεί απλά να επιβεβαιώσει τη συναλλαγή με biometrics, PIN ή pattern, ανάλογα με τις ρυθμίσεις της συσκευής του.
Ακόμη κι αν ο χρήστης αλλάξει συσκευή, οι κάρτες αυτές θα συνεχίσουν να είναι διαθέσιμες για πληρωμή με Google Pay, καθώς βρίσκονται αποθηκευμένες στο Google Account του. Την πρώτη φορά όμως που θα προσπαθήσει να χρησιμοποιήσει κάποια από αυτές, θα χρειαστεί να δημιουργηθεί νέο device-specific token (με την ίδια διαδικασία που περιγράψαμε παραπάνω).
Τέλος, μια διευκρίνιση: το device-specific token (DPAN) δεν είναι ίδιο με το token που δημιουργεί το Google Pay API για να στείλουμε στον payment provider. Χρησιμοποιείται όμως για να το δημιουργήσει.
Ποια μέθοδο να επιλέξω; Link to heading
Καλό είναι να ορίσεις και τις δύο μεθόδους, αρκεί να υποστηρίζονται από τον payment provider σου. Η μέθοδος PAN_ONLY υποστηρίζεται από όλους τους providers, ενώ για την CRYPTOGRAM_3DS θα πρέπει να το ελέγξεις.
Το Google Pay API επιλέγει αυτόματα τη μέθοδο για κάθε κάρτα. Αν η κάρτα είναι tokenized προτιμά το πιο ασφαλές CRYPTOGRAM_3DS, αλλιώς χρησιμοποιεί PAN_ONLY.
Περισσότερες πληροφορίες Link to heading
Το step-by-step tutorial της Google για την υλοποίηση του Google Pay είναι εξαιρετικό και δε νομίζω ότι θα χρειαστείς κάτι πιο αναλυτικό:
https://developers.google.com/pay/api/web/guides/tutorial
Στο παρακάτω blogpost επίσης εξηγούν κάποια πράγματα σχετικά με τις διαθέσιμες authentication επιλογές αλλά είναι περισσότερο τεχνικά παρά πρακτικά. Αξίζει όμως να τα ρίξεις μια ματιά τώρα που ξέρεις στην πράξη τι σημαίνουν:
https://developers.googleblog.com/configure-google-pay-payment-options/
Αν θες να διαβάσεις περισσότερα σχετικά με το 3DS και να δεις το full specification: