|
Πρόσφατα, έκανα ανάπτυξη επίσημου λογαριασμού WeChat και αντιμετώπισα κάποια προβλήματα με την πληρωμή WeChat και μπερδεύτηκα για 3 ημέρες, αλλά σήμερα τελικά τα κατάφερα. Κατά τη διάρκεια αυτής της περιόδου, θα ήθελα να ευχαριστήσω μερικούς μεγάλους θεούς για τη βοήθειά τους και θα μοιραστώ την εμπειρία μου μαζί τους όσο είναι ζεστοί. Πριν από την εφαρμογή του WeChat Pay, Πρέπει να πάω στην πλατφόρμα ανάπτυξης WeChat για πιστοποίηση, δεν θα πω πολλά για αυτές τις πληροφορίες ελέγχου ταυτότητας και διαμόρφωσης, εδώ είναι κυρίως από το επίπεδο κώδικα για να πραγματοποιηθεί η πληρωμή. Επίσημη τεκμηρίωση: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7. Αντιμετωπίζοντας πολλές παραμέτρους στο JS, θα δώσω μια κύρια εξήγηση:
Κατά τη διαδικασία ανάπτυξης, υπάρχουν 4 πολύ σημαντικές παράμετροι: η μία είναι το appid, το AppSecret, το apikey και ο αριθμός εμπόρου. Το appID στο js παραπάνω είναι ένα από αυτά. Το timeStamp είναι μια χρονική σήμανση, 10 ψηφία, το nonceStr είναι ένας τυχαίος αριθμός, εντός 32 bit, οι δύο πιο σημαντικές παράμετροι εδώ και οι πιο επιρρεπείς σε σφάλματα είναι το πακέτο και το paySign. Επιτρέψτε μου να σας πω ένα προς ένα. Ας μιλήσουμε πρώτα για το πακέτο, πρέπει να χρησιμοποιήσουμε prepay_id εδώ, αυτή η παράμετρος είναι ο αριθμός παραγγελίας που δημιουργείται από το WeChat, πρέπει να καλέσουμε την ενοποιημένη διεπαφή παραγγελίας για να το λάβουμε. Επίσημη τεκμηρίωση: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1. Όπως μπορείτε να δείτε από την τεκμηρίωση, για να λάβετε prepay_id, χρειάζονται πολλές παράμετροι και μία από τις πιο σημαντικές παραμέτρους είναι η υπογραφή. Σημείωση: Η υπογραφή εδώ είναι διαφορετική από την υπογραφή πληρωμής στο JS. Υπάρχουν δύο σημεία στο έγγραφο του υπογεγραμμένου αλγορίθμου και απλώς τονίζω δύο σημεία. Το ένα είναι η σειρά των παραμέτρων, οι οποίες πρέπει να συνδεθούν σύμφωνα με το ASCII από μικρό σε μεγάλο, και το άλλο είναι ότι το apikey δεν πρέπει να είναι λάθος, πού είναι αυτό το apikey; Συνδεθείτε στην πλατφόρμα εμπόρου για να το ρυθμίσετε. Μετά τη συναρμογή των συμβολοσειρών που απαιτούνται για την υπογραφή, μπορεί να χρησιμοποιηθεί κρυπτογράφηση MD5 για τη λήψη της υπογραφής. Στη συνέχεια, συνδυάστε την υπογραφή και όλες τις προηγούμενες παραμέτρους σε μια συμβολοσειρά μορφής xml και καλέστε τη διεύθυνση URL της διεπαφής:
https://api.mch.weixin.qq.com/pay/unifiedorder就可以返回一个xml结果,解析出其中的prepay_id,这样这个参数就成功获取到了。 Ας μιλήσουμε για την τελευταία παράμετρο στο JS, PaySign: PaySign. Το ίδιο ισχύει και για τον αλγόριθμο υπογραφής πληρωμής, συνδέοντας τις άλλες 5 παραμέτρους στο JS με τη σειρά, συν apikey, κρυπτογράφηση MD5, εντάξει. Ο αλγόριθμος υπογραφής είναι ο ίδιος, αλλά οι τιμές των παραμέτρων είναι διαφορετικές. Εδώ είναι ένα πράγμα που πρέπει να σημειώσετε. Κατά την πληρωμή για την υπογραφή, χρησιμοποιούνται ο τυχαίος αριθμός nonceStr και η χρονική σήμανση timeStamp και αυτές οι δύο παράμετροι χρησιμοποιούνται κατά την υπογραφή Εάν οι τιμές αυτών των δύο παραμέτρων στο JS είναι ίδιες, είναι ο ίδιος τυχαίος αριθμός και η ίδια χρονική σήμανση. Γιατί? Αν και η τεκμηρίωση δεν το λέει, καταλαβαίνω ότι οι υπογραφές πληρωμής δημιουργούνται από τυχαίους αριθμούς και χρονικές σημάνσεις, Στη συνέχεια, κατά την πληρωμή, στείλτε τον τυχαίο αριθμό, τη χρονική σήμανση και την υπογραφή πληρωμής μαζί και, στη συνέχεια, όταν το WeChat επαληθεύσει, θα βασίζεται επίσης στον τυχαίο αριθμό και τη χρονική σήμανση στο JS για να δημιουργήσετε μια υπογραφή και να τη συγκρίνετε με την υπογραφή πληρωμής που στείλατε. Εάν λάβετε ξανά τον νέο τυχαίο αριθμό και τη χρονική σήμανση στο js, η υπολογιζόμενη υπογραφή θα είναι διαφορετική από την υπογραφή που στείλατε και θα αναφερθεί ένα σφάλμα: η υπογραφή απέτυχε.
Αυτά είναι όλα για το επίπεδο κώδικα, και φυσικά, υπάρχουν μερικά άλλα σημεία που πρέπει να σημειωθούν. Για παράδειγμα, η χρήσιμη παράμετρος openid πρέπει επίσης να ληφθεί καλώντας τη διεπαφή και εάν ο κατάλογος για εξουσιοδότηση πληρωμής έχει ρυθμιστεί σωστά. Η περίληψη της τελευταίας πρότασης: Κοιτάξτε προσεκτικά το έγγραφο και, τέλος, ρωτήστε άλλους, μπορείτε να βρείτε ομάδες που σχετίζονται με πληρωμές WeChat, υπάρχουν πολλοί θεοί σε αυτό, αντιμετώπισα ένα πρόβλημα στο παρελθόν και πάλεψα για 2 ημέρες χωρίς να το λύσω, (μερικές φορές δεν αρκεί μόνο να κοιτάξετε το έγγραφο), Στη συνέχεια πρόσθεσε θυμωμένος 8 ομάδες ανάπτυξης WeChat και τελικά βγήκε υπό την καθοδήγηση των ειδικών. Σας ευχαριστώ και πάλι. Οι προγραμματιστές είναι μια ομάδα ανθρώπων που αγαπούν να μοιράζονται και είναι περισσότερο από ευτυχείς να μοιράζονται αυτά που γνωρίζουν. Έτσι, όταν δεν καταλαβαίνετε, ρωτήστε περισσότερα.
|