Οδηγός και διορατικότητα

Idempotent Partner API Automation: Παροχή πελατών AI, κλειδιά και πιστώσεις χωρίς διπλότυπες παρενέργειες

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

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

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

Το πρακτικό μοτίβο είναι απλό: αντιμετωπίζετε κάθε μεταλλαγμένη ενέργεια του Partner API ως μια ανθεκτική επιχειρηματική λειτουργία, όχι ως ένα αίτημα HTTP για να σβήσετε και να ξεχάσετε. Αυτό σημαίνει αποθήκευση τοπικών εγγραφών λειτουργίας, σκόπιμη χρήση κλειδιών αδυναμίας, ανάλυση χρημάτων με ακρίβεια, επεξεργασία webhook ασύγχρονα και συμφωνία άγνωστων αποτελεσμάτων πριν από την έκδοση αντισταθμιστικών αλλαγών.

Χωριστά γεγονότα, συστάσεις και προβλέψεις

Γεγονότα

Η τεκμηρίωση του Partner API του Model Gate δηλώνει ότι τα αιτήματα POST, PATCH και DELETE απαιτούν ένα Idempotency-Key, το οποίο οι επαναλήψεις μετά από χρονικά όρια θα πρέπει να επαναχρησιμοποιήσουν το ίδιο κλειδί και ότι οι εγγραφές idempotency είναι επαναληπτικές.

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

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

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

Η καθοδήγηση AWS και Azure ενισχύουν τον ίδιο κανόνα κατανεμημένων συστημάτων: οι επαναλήψεις είναι χρήσιμες, αλλά οι λειτουργίες μετάλλαξης χρειάζονται ένα αναγνωριστικό αιτήματος που παρέχεται από τον καλούντα ή ένα ισοδύναμο συμβόλαιο επαναληψιμότητας, ώστε ο διακομιστής να μπορεί να διατηρήσει την πρόθεση του καλούντος.

Προτάσεις

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

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

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

Προβλέψεις

Καθώς περισσότερες εταιρείες και πλατφόρμες SaaS μεταπωλούν πρόσβαση σε τεχνητή νοημοσύνη, τα ζητήματα υποστήριξης θα μετακινηθούν από τη βασική συνδεσιμότητα API στη συμφωνία: διπλότυπη παροχή πελατών, αμφισβητούμενες πιστώσεις, αναντιστοιχία υπολοίπων πορτοφολιού και ασαφείς διαδρομές ελέγχου. Οι ενσωματώσεις που διατηρούν μόνιμες τοπικές εγγραφές λειτουργιών θα είναι πιο εύκολο να υποστηριχθούν από τις ενσωματώσεις που βασίζονται μόνο σε αποκρίσεις και αρχεία καταγραφής HTTP.

Δημιουργήστε μια Λογιστική Λειτουργίας Τοπικών Συνεργατών

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

Ένα χρήσιμο σχήμα μοιάζει με αυτό:

partner_operations
- Operation_id // εσωτερικό UUID
- external_customer_id // το αναγνωριστικό πελάτη, μισθωτή ή λογαριασμού σας
- action // create_group, create_key, set_limit, top_up_credit
- idempotency_key // αποστέλλεται στο Partner API για αιτήματα μετάλλαξης
- request_fingerprint // κανονικός κατακερματισμός μεθόδου, διαδρομής και ουσιαστικού σώματος
- model_gate_request_id // X-Request-ID ή ισοδύναμο αναγνωριστικό απάντησης όταν είναι διαθέσιμο
- target_public_id // αναγνωριστικό ομάδας, αναγνωριστικό κλειδιού, αναγνωριστικό συναλλαγής ή άλλο αντικείμενο που προκύπτει
- κατάσταση // σε εκκρεμότητα, πέτυχε, αποτυχία_επαναδοκιμήσιμο, αποτυχία_τελικό, συμφιλίωση
- προσπάθεια_μέτρησης
- last_error_code
- last_error_message
- δημιουργήθηκε_στο
- updated_at
- κλειδωμένο_μέχρι

Ο σημαντικός περιορισμός είναι η μοναδικότητα από την επιχειρηματική πρόθεση. Για παράδειγμα, το external_customer_id + action + signup_version μπορεί να είναι μοναδικό για την αρχική παροχή. Μια δεύτερη σκόπιμη συμπλήρωση δεν πρέπει να συγκρούεται με την πρώτη. θα πρέπει να έχει διαφορετική ταυτότητα λειτουργίας και κλειδί αδυναμίας.

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

Δημιουργήστε Κλειδιά Idempotency από Business Intent

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

create-group-for-customer:{customer_id}:{signup_version}
create-key-for-customer:{customer_id}:{group_id}:{key_purpose}:{version}
set-spend-limit:{customer_id}:{group_id}:{limit_policy_version}
ανανέωση:{customer_id}:{payment_event_id}:{ledger_entry_id}

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

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

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

Παροχή πελατών ως κρατική μηχανή

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

εκκρεμεί_δημιουργία_ομάδας
  - δημιουργία τοπικής εγγραφής λειτουργίας
  - αποστολή αιτήματος δημιουργίας ομάδας με Idempotency-Key
  - αποθήκευση αναγνωριστικού αιτήματος και δημόσιας ταυτότητας ομάδας

group_created_key_pending
  - δημιουργία αρχείου βασικής λειτουργίας
  - αποστολή αιτήματος δημιουργίας κλειδιού με Idempotency-Key
  - αποθηκεύστε τα βασικά μεταδεδομένα και το μυστικό σύμφωνα με την πολιτική ασφαλείας σας

key_created_limit_pending
  - δημιουργία αρχείου λειτουργίας ορίου δαπανών
  - αποστολή ενημέρωσης ορίου με Idempotency-Key
  - αποθήκευση της έκδοσης πολιτικής ή του αναγνωριστικού στόχου που προκύπτει

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

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

Χειρισμός χρημάτων ως δεκαδικά δεδομένα

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

Στο JavaScript, μην γράφετε λογική χρέωσης γύρω από το Αριθμός. Χρησιμοποιήστε μια δεκαδική βιβλιοθήκη ή διατηρήστε τις τιμές ως συμβολοσειρές μέχρι να φτάσουν σε μια ειδική μονάδα χρημάτων. Στην Python, χρησιμοποιήστε Decimal από συμβολοσειρές, όχι floats. Σε βάσεις δεδομένων, χρησιμοποιήστε αριθμητικές στήλες σταθερής κλίμακας όπου απαιτείται αριθμητική και στήλες κειμένου όπου η διατήρηση της ακριβούς αναπαράστασης ανάντη είναι χρήσιμη για έλεγχο.

// Κακό: δυαδική μετατροπή κινητής υποδιαστολής
const limit = Number(apiResponse.spend_limit);

// Καλύτερα: ακριβές δεκαδικό όριο
const limit = new Decimal(apiResponse.spend_limit);

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

Κάντε την κατάποση Webhook βαρετή

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

payment_webhook_events
- πάροχος
- event_id
- event_type
- έλαβε_στο
- payload_hash
- κατάσταση_επεξεργασίας
- related_customer_id
- related_operation_id
- last_error

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

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

Επανάληψη δοκιμής κανόνων για μετάλλαξη κλήσεων API συνεργατών

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

Για χρονικά όρια δικτύου, επαναφορές σύνδεσης και άγνωστα αποτελέσματα 5xx, δοκιμάστε ξανά το ίδιο αίτημα με το ίδιο Idempotency-Key μέσα στο τεκμηριωμένο παράθυρο διατήρησης. Καταγράψτε κάθε προσπάθεια στο καθολικό λειτουργίας.

Για 429 απαντήσεις, σεβαστείτε το Επανάληψη-Μετά όταν παρέχεται και κρατήστε το ίδιο κλειδί αδυναμίας για την ίδια λειτουργία. Ο περιορισμός τιμών δεν αλλάζει την επιχειρηματική πρόθεση.

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

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

Συμφωνία άγνωστων αποτελεσμάτων πριν από την αντιστάθμιση

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

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

Μια πρακτική ακολουθία συμφιλίωσης είναι:

  1. Φορτώστε ξανά την εγγραφή τοπικής λειτουργίας με ένα κλείδωμα.
  2. Δοκιμάστε ξανά την αρχική μετάλλαξη με το ίδιο κλειδί αδυναμίας, εάν εξακολουθεί να βρίσκεται μέσα στο παράθυρο διατήρησης και το δακτυλικό αποτύπωμα αιτήματος ταιριάζει.
  3. Εάν η επανάληψη δεν επιλύσει την κατάσταση, υποβάλετε ερώτημα στη σχετική λίστα ή λάβετε τελικά σημεία χρησιμοποιώντας μεταδεδομένα πελατών, αναγνωριστικά ομάδας, αναγνωριστικά κλειδιών, αναγνωριστικά συναλλαγών ή χρονικές σημάνσεις.
  4. Ελέγξτε συμβάντα ελέγχου για επιτυχημένες μεταλλάξεις διαχείρισης που συνδέονται με το αναγνωριστικό αιτήματος, την ενέργεια, τον στόχο και τη χρονική σήμανση UTC.
  5. Ενημερώστε την τοπική λειτουργία σε επιτυχία, failed_final ή reconciliation_needed με αποδεικτικά στοιχεία.
  6. Εκδώστε μια αντισταθμιστική μετάλλαξη μόνο αφού επιβεβαιώσετε την ανοδική κατάσταση και καταγράψετε μια νέα λειτουργία για την αντιστάθμιση.

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

Runbook for Stuck States

εκκρεμεί_δημιουργία_ομάδας

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

group_created_key_pending

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

key_created_local_save_failed

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

topup_requested_unknown

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

webhook_received_processing_failed

Διατηρήστε το συμβάν webhook επισημασμένο ως ληφθέν και ανεκπλήρωτο. Επαναλάβετε το μέσω του εργαζόμενου αφού διορθώσετε την αιτία. Η μοναδική εγγραφή συμβάντος αποτρέπει την διπλότυπη εκπλήρωση.

απαιτείται_συμφιλίωση

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

Λίστα ελέγχου δοκιμής

  • Διπλότυπα κλικ κουμπιών εγγραφής για τον ίδιο πελάτη δημιουργούν μία ομάδα και ένα προβλεπόμενο κλειδί.
  • Ένα τρακάρισμα εργαζομένου μετά από επιτυχία στο upstream αλλά πριν συνεχιστεί η τοπική αποθήκευση χωρίς διπλές παρενέργειες.
  • Ένα χρονικό όριο λήξης HTTP πριν από τον χειρισμό του σώματος απάντησης, δοκιμάζοντας ξανά το ίδιο κλειδί αδυναμίας.
  • Ένα διπλότυπο webhook πληρωμής δεν δημιουργεί διπλότυπη ανανέωση πίστωσης.
  • Μια εργασία webhook πληρωμών και παροχής εκτός παραγγελίας συγκλίνουν στη σωστή κατάσταση πελάτη.
  • Μια απόκριση 429 με Επανάληψη-Μετά καθυστερεί την επανάληψη χωρίς αλλαγή της ταυτότητας λειτουργίας.
  • Η επαναχρησιμοποίηση ενός κλειδιού αδυναμίας με αλλαγμένο ωφέλιμο φορτίο αποτυγχάνει τοπικά.
  • Οι δεκαδικές τιμές γύρω από τα 0.01, 0.10, 100.00 και τα όρια ορίου δαπανών δεν στρογγυλοποιούνται απροσδόκητα.
  • Η συμφωνία ελέγχου-συμβάντος μπορεί να εξηγήσει ποιος άλλαξε μια ομάδα, ένα κλειδί ή ένα όριο και πότε.
  • Οι λειτουργίες παλαιότερες από το παράθυρο διατήρησης ανικανότητας συμβιβάζονται μέσω τοπικών εγγραφών και επιφανειών αναφοράς API Partner, όχι με τυφλή επανάληψη.

Διαπραγματεύσεις

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

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

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

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

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

Δράσιμο συμπέρασμα

Ο αυτοματισμός του αξιόπιστου συνεργάτη API είναι ένα πρόβλημα λογιστικού και λειτουργικού όσο και πρόβλημα ενσωμάτωσης HTTP. Ξεκινήστε ορίζοντας βιώσιμες επιχειρηματικές δραστηριότητες: δημιουργία ομάδας πελατών, δημιουργία κλειδιού, αλλαγή ορίου, συμπλήρωση πίστωσης, συμφωνία πορτοφολιού και επεξεργασία webhook. Δώστε σε κάθε λειτουργία ένα σταθερό κλειδί αδυναμίας, ένα δακτυλικό αποτύπωμα αίτησης, ένα μηχάνημα κατάστασης και μια μόνιμη τοπική εγγραφή.

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

Σχετική ανάγνωση

FAQ

Συχνές ερωτήσεις

Πρέπει κάθε αίτημα Partner API να χρησιμοποιεί κλειδί αδυναμίας;
Τα αιτήματα API συνεργατών με μετάλλαξη όπως POST, PATCH και DELETE θα πρέπει να χρησιμοποιούν κλειδί αδυναμίας σύμφωνα με την τεκμηριωμένη σύμβαση. Τα αιτήματα μόνο για ανάγνωση δεν χρειάζονται συνήθως την ίδια αντιμετώπιση, αλλά τα αποτελέσματά τους μπορούν να χρησιμοποιηθούν κατά τη διάρκεια της συμφωνίας.
Μπορεί ένα κλειδί ανικανότητας να επαναχρησιμοποιηθεί για πολλαπλές ανανεώσεις πελατών;
Όχι. Χρησιμοποιήστε ξανά το ίδιο κλειδί μόνο για επαναλήψεις της ίδιας επιχειρηματικής λειτουργίας. Μια δεύτερη σκόπιμη ανανέωση είναι μια νέα επιχειρηματική λειτουργία και θα πρέπει να λάβει νέο αρχείο λειτουργίας και κλειδί αδυναμίας.
Τι πρέπει να συμβεί μετά από ένα τάιμ άουτ κατά τη δημιουργία ομάδας;
Καταγράψτε το χρονικό όριο λήξης, διατηρήστε την αρχική λειτουργία σε εκκρεμότητα ή δυνατότητα επανάληψης δοκιμής και δοκιμάστε ξανά το ίδιο αίτημα δημιουργίας ομάδας με το ίδιο κλειδί αδυναμίας εντός του παραθύρου διατήρησης. Εάν το αποτέλεσμα παραμένει ασαφές, συμφιλιώστε τα αρχεία της ομάδας και τα συμβάντα ελέγχου πριν δημιουργήσετε οτιδήποτε άλλο.
Γιατί να αποθηκεύετε χρήματα ως δεκαδικές συμβολοσειρές ή ακριβείς δεκαδικούς αριθμούς;
Τα υπόλοιπα πορτοφολιού, τα ποσά πίστωσης, τα σύνολα χρήσης και τα όρια δαπανών είναι οικονομικά δεδομένα. Η δυαδική μετατροπή κινητής υποδιαστολής μπορεί να εισάγει σφάλματα στρογγυλοποίησης, επομένως η απορρόφηση θα πρέπει να διατηρήσει τις δεκαδικές συμβολοσειρές ή να τις μετατρέψει σε ακριβείς δεκαδικούς τύπους.