IOSOR Γνώση

Το διπλό webhook δεν πρέπει να δημιουργήσει δεύτερη χρέωση

Διαδρομή σφάλματος: Οι επαναλήψεις και οι αναπαραγωγές παραμένουν idempotent στα προπ πληρωμένα χρήματα και τα εισερχόμενα — ένα ID γεγονότος, μία γραμμή χρέωσης, μία γραμμή εισερχομένων.

Η παράδοση τουλάχιστον μία φορά θα επαναληφθεί. Ένα διπλό webhook που καταχωρεί δεύτερη χρέωση ή δεύτερη γραμμή εισερχομένων είναι ένα περιστατικό χρημάτων και λειτουργιών, όχι ένα «αβλαβές ACK». Αυτή η σελίδα είναι η διαδρομή σφάλματος: οι επαναλήψεις και οι αναπαραγωγές παραμένουν idempotent στα προπληρωμένα χρήματα και τα εισερχόμενα — όχι το δοκίμιο idempotency αποστολής API και όχι το εγχειρίδιο επανάληψης εισερχόμενων SMS.

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

Το Idempotency είναι διαδρομή σφάλματος, όχι σύνθημα

Διαδρομή επιτυχίας: ένα υπογεγραμμένο γεγονός, μία αποδοχή, μία χρέωση. Η διαδρομή σφάλματος καίει την εμπιστοσύνη — χρονικό όριο, 5xx, αναπαραγωγή παρόχου, επαναπροώθηση χειριστή. Αποθηκεύστε το κλειδί idempotency από το Συμβόλαιο webhook πριν από την πρώτη αποστολή πριν από τις παρενέργειες: ledger, εισερχόμενα, CRM.

Τι μετράει ως διπλό

Σήμα Αντιμετώπιση ως διπλό όταν Ασφαλές αποτέλεσμα
ID γεγονότος Το ίδιο ID έγινε ήδη αποδεκτό στο παράθυρο ACK· καμία δεύτερη χρέωση
ID μηνύματος Το ίδιο μήνυμα συνδέθηκε ήδη με το ledger Επαναχρησιμοποίηση γραμμής· καμία νέα χρέωση
Κλειδί εισερχομένων Το ίδιο MO/MT καταχωρήθηκε ήδη Καμία δεύτερη γραμμή εισερχομένων
Έξω από παράθυρο επανάληψης Παλαιά επανάληψη μετά από απόρριψη πύλης Απόρριψη· καμία εγγραφή χρήματος/κατάστασης

Τα χρήματα δεν πρέπει να μετακινηθούν δύο φορές

Μια δεύτερη χρέωση για το ίδιο ID γεγονότος είναι σφάλμα ακόμα κι αν το προϊόν «δείχνει ακόμα παραδομένο». Τα οικονομικά φιλτράρουν ανά ID γεγονότος ή μηνύματος και βλέπουν μία προπληρωμένη γραμμή για αυτό το παράθυρο UTC. Οι μερικές παρενέργειες μετά το ACK — CRM πρώτα, ledger αργότερα — παράγουν διπλή αλήθεια. Εάν η επεξεργασία αποτύχει μετά την επιμονή, επαναλάβετε τον εργatή στο ίδιο κλειδί; μην αποδεχτείτε ξανά το σώμα HTTP ως νέα χρέωση.

Τα εισερχόμενα δεν πρέπει επίσης να διπλασιαστούν

Το Idempotency δεν αφορά μόνο τα χρήματα. Ένα αναπαραγόμενο εισερχόμενο γεγονός ή γεγονός παράδοσης που ανοίγει ένα δεύτερο νήμα εισερχόμενων εκπαιδεύει την υποστήριξη να κυνηγά φvσάντες και μπορεί να ενεργοποιήσει βρόχους αυτόματης απάντησης. Αποθηκεύστε το κλειδί εισερχομένων με το ίδιο ID γεγονότος που χρησιμοποιείται για τη χρέωση. Το προϊόν και τα οικονομικά μοιράζονται κανόνες απόρριψης και διπλασιασμού για να διατηρούνται τα εισερχόμενα καθαρά.

Λίστα ελέγχου αγοραστή για webhook ασφαλή από διπλότυπα

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

Ξεκινήστε με το IOSOR

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

Σύνοψη IOSOR

Η επανάληψη δεν είναι νέα αποστολή. Ένα event id γράφει μία χρέωση.

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

Ήταν χρήσιμος αυτός ο οδηγός;

Σχετικοί οδηγοί