Πραγματοποίηση πληρωμής
Αυτό το θέμα περιγράφει τα βήματα που πρέπει να ακολουθήσετε για να πραγματοποιήσετε μια πληρωμή χρησιμοποιώντας μια περίοδο λειτουργίας όπου συλλέγετε ευαίσθητα δεδομένα πληρωμής από τον πληρωτή με hosted πεδία στη σελίδα πληρωμής σας. Αυτό επιτυγχάνεται χρησιμοποιώντας το Session JavaScript library
(session.js) επιπλέον του WSAPI. Για ένα πλήρες παράδειγμα αποσπάσματος κώδικα ολόκληρης της υλοποίησης της σελίδας πληρωμής σε έναν ιστότοπο, βλ. το Παράδειγμα κώδικα σελίδας πληρωμής.
Βήμα 1: Δημιουργία περιόδου λειτουργίας
Δημιουργήστε μια περίοδο λειτουργίας υποβάλλοντας ένα αίτημα Create Session
από τον διακομιστή σας. Ορίστε το όριο ταυτοποίησης περιόδου λειτουργίας σε 25. Η απόκριση επιστρέφει ένα μοναδικό ID περιόδου λειτουργίας που πρέπει να χρησιμοποιήσετε στα επακόλουθα βήματα για να γίνει αναφορά σε αυτή την περίοδο λειτουργίας.
Διεύθυνση URL | https://na-gateway.mastercard.com/api/rest/version/72/merchant/<merchant_ID>/session |
Μέθοδος HTTP | POST |
{ "session": { "authenticationLimit": 25 } }
Βήμα 2: Ενημερώστε την περίοδο λειτουργίας με τις λεπτομέρειες της παραγγελίας
Ενημερώστε την περίοδο λειτουργίας με τουλάχιστον το νόμισμα και το ποσό παραγγελίας υποβάλλοντας ένα αίτημα Update Session
από τον διακομιστή σας. Το νόμισμα παραγγελίας είναι απαραίτητο για να μπορείτε να προσδιορίσετε αν υποστηρίζεται η πιστωτική κάρτα που θέλει να χρησιμοποιήσει ο πληρωτής και αν πρέπει να δώσει τον κωδικό ασφαλείας κάρτας (CSC).
Διεύθυνση URL | https://na-gateway.mastercard.com/api/rest/version/72/merchant/<merchant_ID>/session/<session_ID> |
Μέθοδος HTTP | PUT |
{ "order": { "amount": 100, "currency": "USD" } }
Βήμα 3: Συμπεριλάβετε τη βιβλιοθήκη JavaScript της περιόδου λειτουργίας
Συμπεριλάβετε τη βιβλιοθήκη JavaScript πελάτη session.js που φιλοξενείται από την πύλη στη σελίδα πληρωμής προσθέτοντας ένα στοιχείο script
εντός του στοιχείου head
. Η διαδρομή προς αυτό το αρχείο περιλαμβάνει τόσο την έκδοση API όσο και το αναγνωριστικό εμπόρου για την περίοδο λειτουργίας (session). Αυτό τοποθετεί ένα αντικείμενο PaymentSession
στο χώρο ονομάτων παραθύρων.
<html> <head> <script src="https://na-gateway.mastercard.com/form/version/72/merchant/<MERCHANTID>/session.js"></script> </head> </html>
Βήμα 4: Δημιουργήστε τη σελίδα πληρωμής
Δημιουργήστε τον κώδικα HTML για τη σελίδα πληρωμής σας, συμπεριλαμβανομένων των πεδίων για τη συλλογή των απαραίτητων λεπτομερειών πληρωμής από τον πληρωτή.
readonly
και παραλείψτε το χαρακτηριστικό name
.Μπορείτε να χρησιμοποιήσετε έναν ή περισσότερους από τους παρακάτω τρόπους πληρωμής για να καταγράψετε τις λεπτομέρειες πληρωμής από τον πληρωτή. Τα πεδία που πρέπει να συμπεριλάβετε στη σελίδα πληρωμής σας εξαρτώνται από τον τρόπο πληρωμής:
Πιστωτικές και χρεωστικές κάρτες
Μπορείτε να καταγράψετε τις ακόλουθες λεπτομέρειες της κάρτας στα hosted πεδία:
card.number
card.expiryMonth
card.expiryYear
card.securityCode
card.nameOnCard
card.expiryMonth
, τότε το card.expiryYear
είναι υποχρεωτικό και το αντίστροφο.Δωροκάρτες
Μπορείτε να καταγράψετε τις ακόλουθες λεπτομέρειες δωροκάρτας στα hosted πεδία:
giftCard.number
giftCard.pin
Για περισσότερες πληροφορίες, βλ. Δωροκάρτες.
Πληρωμές Automated Clearing House (ACH)
Μπορείτε να καταγράψετε τις λεπτομέρειες πληρωμής για απευθείας πληρωμές (πληρωμές) και απευθείας καταθέσεις (επιστροφές χρημάτων) μέσω Automated Clearing House. Μπορείτε να καταγράψετε τις ακόλουθες λεπτομέρειες Automated Clearing House στα hosted πεδία:
ach.routingNumber
ach.bankAccountNumber
ach.bankAccountNumberConfirmation
ach.bankAccountHolder
ach.accountType
Για περισσότερες πληροφορίες, βλ. Automated Clearing House.
Click to Pay
Μπορείτε να καταγράψετε τις λεπτομέρειες πληρωμής από την αλληλεπίδραση Click to Pay. Για περισσότερες πληροφορίες, βλ. την ενοποίηση Click to Pay Hosted Session.
Το ακόλουθο δείγμα κώδικα απεικονίζει τα απαραίτητα πεδία της σελίδας πληρωμής για μια πληρωμή με πιστωτική κάρτα.
<!-- CREATE THE HTML FOR THE PAYMENT PAGE --> <div> Please enter your payment details: </div> <div> Cardholder Name: <input type="text" id="cardholder-name" class="input-field" title="cardholder name" aria-label="enter name on card" value="" tabindex="1" readonly> </div> <div> Card Number: <input type="text" id="card-number" class="input-field" title="card number" aria-label="enter your card number" value="" tabindex="2" readonly> </div> <div> Expiry Month: <input type="text" id="expiry-month" class="input-field" title="expiry month" aria-label="two digit expiry month" value="" tabindex="3" readonly> </div> <div> Expiry Year: <input type="text" id="expiry-year" class="input-field" title="expiry year" aria-label="two digit expiry year" value="" tabindex="4" readonly> </div> <div> Security Code: <input type="text" id="security-code" class="input-field" title="security code" aria-label="three digit CCV security code" value="" tabindex="5" readonly> </div> <div> <button id="payButton" onclick="pay();"> Pay Now </button> </div>
Βήμα 5: Διαμόρφωση της περίοδος λειτουργίας
Πραγματοποιήστε επίκληση της συνάρτησης PaymentSession.configure() με ένα αντικείμενο διαμόρφωσης ως όρισμα για να επισυνάψετε τα hosted πεδία στη σελίδα πληρωμής σας και να διαμορφώσετε την αλληλεπίδραση πληρωμής. Πρέπει να παρέχετε τα ακόλουθα στο αντικείμενο διαμόρφωσης:
- Το ID περιόδου λειτουργίας λήφθηκε όταν δημιουργήσατε την περίοδο λειτουργίας.
- Επιλογείς πεδίων για hosted πεδία για συγκεκριμένους τρόπους πληρωμής. Η διαμόρφωση τα αντικαθιστά με αντίστοιχα πεδία διακομιστή μεσολάβησης που είναι ενσωματωμένα σε iFrames που φιλοξενούνται από το Mastercard Gateway. Τα πεδία μεσολάβησης έχουν την ίδια εμφάνιση και αίσθηση με τα αντικατεστημένα πεδία.
- Επιλογές μετριασμού για την αποτροπή του clickjacking. Το clickjacking, γνωστό και ως "επίθεση επανόρθωσης UI", είναι όταν ένας εισβολέας χρησιμοποιεί πολλαπλά διαφανή ή αδιαφανή επίπεδα για να εξαπατήσει έναν χρήστη να κάνει κλικ σε ένα κουμπί ή σε έναν σύνδεσμο σε άλλη σελίδα ενώ σκόπευε να κάνει κλικ στη σελίδα του ανώτερου επιπέδου. Για να χρησιμοποιήσετε το Hosted Session, πρέπει να εφαρμόσετε μία ή περισσότερες από τις ακόλουθες άμυνες κατά των επιθέσεων clickjacking και να καθορίσετε ποιες άμυνες υλοποιούνται χρησιμοποιώντας το πεδίο frameEmbeddingMitigation:
- Javascript: Συμπεριλάβετε ένα JavaScript "frame-breaker" στη σελίδα πληρωμής σας.
- x-frame-options: Ο διακομιστής σας επιστρέφει μια κεφαλίδα απόκρισης X-Frame Options HTTP.
- csp: Ο διακομιστής σας επιστρέφει μια κεφαλίδα απόκρισης Content-Security-Policy HTTP που περιέχει μια οδηγία frame-ancestors.
Για πληροφορίες σχετικά με την άμυνα από επιθέσεις clickjacking, βλ. το Clickjacking Defense Cheat Sheet στον εξωτερικό ιστότοπο του OWASP.
- Ανακλήσεις για τον χειρισμό διαφόρων συμβάντων κατά τη διάρκεια της αλληλεπίδρασης Hosted Session:
- Γίνεται επίκληση της συνάρτησης initialized() όταν τα hosted πεδία επισυνάπτονται στη σελίδα πληρωμής σας.
- Η formSessionUpdate() καλείται ως απόκριση στη συνάρτηση PaymentSession.updateSessionFromForm(paymentType) (δείτε το επόμενο βήμα).
- Λεπτομέρειες αλληλεπίδρασης που καθορίζουν τις επιλογές ορατότητας και αλληλεπίδρασης με πληρωτή για ορισμένες εμφανιζόμενες πληροφορίες.
PaymentSession.configure({ session: “<your_session_ID>”, fields: { // ATTACH HOSTED FIELDS TO YOUR PAYMENT PAGE FOR A CREDIT CARD card: { number: “#card-number”, securityCode: “#security-code”, expiryMonth: “#expiry-month”, expiryYear: “#expiry-year”, nameOnCard: “#cardholder-name” } }, //SPECIFY YOUR MITIGATION OPTION HERE frameEmbeddingMitigation: [“javascript”], callbacks: { initialized: function(response) { // HANDLE INITIALIZATION RESPONSE }, formSessionUpdate: function(response) { // HANDLE RESPONSE FOR UPDATE SESSION }, }, interaction: { displayControl: { formatCard: “EMBOSSED”, invalidFieldCharacters: “REJECT” } } });
Βήμα 6: Ενημέρωση της περιόδου λειτουργίας με τις λεπτομέρειες πεδίων
Αφού ο πληρωτής εισαγάγει τις λεπτομέρειες πληρωμής του στα hosted πεδία, πραγματοποιήστε επίκληση της συνάρτησης PaymentSession.updateSessionFromForm() με τον ισχύοντα τρόπο πληρωμής ως όρισμα. Η συνάρτηση αποθηκεύει τις καταγεγραμμένες πληροφορίες πληρωμής στο session πληρωμής (payment session). Μόλις ολοκληρωθεί η πράξη, γίνεται επίκληση της ανάκλησης formSessionUpdate() με μια παράμετρο αποτελέσματος. Επιλέξτε το πεδίο result.status για να προσδιορίσετε αν η πράξη ήταν επιτυχής. Για περισσότερες πληροφορίες, βλ. Χειρισμός αποκρίσεων ανάκλησης.
function pay() { // UPDATE THE SESSION WITH THE INPUT FROM HOSTED FIELDS PaymentSession.updateSessionFromForm('card'); }
Βήμα 7: Δημιουργία πληρωμής χρησιμοποιώντας την περίοδο λειτουργίας
Στείλτε τη συναλλαγή πληρωμής (ή άλλη σχετική λειτουργία) από τον διακομιστή σας στην πύλη χρησιμοποιώντας το ID περιόδου λειτουργίας (session.id) στο αίτημα:
- Στείλτε το αίτημα Retrieve Session για να επαληθεύσετε τις λεπτομέρειες που περιλαμβάνονται στην περίοδο λειτουργίας (session).
- Δημιουργήστε το αίτημα συναλλαγής προσθέτοντας τυχόν απαραίτητα πεδία που δεν περιλαμβάνονται στην περίοδο λειτουργίας.
- Στείλτε το αίτημα συναλλαγής.
Μπορείτε να στείλετε πολλές πράξεις που σχετίζονται με την πληρωμή χρησιμοποιώντας την ίδια περίοδο λειτουργίας. Για παράδειγμα, μπορείτε να εκκινήσετε μια πληρωμή με πράξη PAY και να αποθηκεύσετε ένα token που αντιπροσωπεύει τις λεπτομέρειες πληρωμής (για χρήση σε μελλοντικές συναλλαγές) με την πράξη Create or Update Token.
Παράδειγμα κώδικα σελίδας πληρωμής
Το ακόλουθο δείγμα κώδικα απεικονίζει τον κώδικα HTML για μια πλήρη σελίδα πληρωμής.
<html> <head> // INCLUDE SESSION.JS JAVASCRIPT LIBRARY <script src="https://na-gateway.mastercard.com/form/version/<version>/merchant/<merchant_ID>/session.js"></script> // APPLY CLICK-JACKING STYLING AND HIDE CONTENTS OF THE PAGE <style id="antiClickjack">body{display:none !important;}>/style> </head> <body> // CREATE THE HTML FOR THE PAYMENT PAGE <div>Please enter your payment details:</div> <h3>Credit Card</h3> <div>Card Number: <input type="text" id="card-number" class="input-field" title="card number" aria-label="enter your card number" value="" tabindex="1" readonly></div> <div>Expiry Month:<input type="text" id="expiry-month" class="input-field" title="expiry month" aria-label="two digit expiry month" value="" tabindex="2" readonly></div> <div>Expiry Year:<input type="text" id="expiry-year" class="input-field" title="expiry year" aria-label="two digit expiry year" value="" tabindex="3" readonly></div> <div>Security Code:<input type="text" id="security-code" class="input-field" title="security code" aria-label="three digit CCV security code" value="" tabindex="4" readonly></div> <div>Cardholder Name:<input type="text" id="cardholder-name" class="input-field" title="cardholder name" aria-label="enter name on card" value="" tabindex="5" readonly></div> <div><button id="payButton" onclick="pay('card');">Pay Now</button></div> // JAVASCRIPT FRAME-BREAKER CODE TO PROVIDE PROTECTION AGAINST IFRAME CLICK-JACKING <script type="text/javascript"> if (self === top) { var antiClickjack = document.getElementById("antiClickjack"); antiClickjack.parentNode.removeChild(antiClickjack); } else { top.location = self.location; } PaymentSession.configure({ session: "<your_session_ID>", fields: { // ATTACH HOSTED FIELDS TO YOUR PAYMENT PAGE FOR A CREDIT CARD card: { number: "#card-number", securityCode: "#security-code", expiryMonth: "#expiry-month", expiryYear: "#expiry-year", nameOnCard: "#cardholder-name" } }, //SPECIFY YOUR MITIGATION OPTION HERE frameEmbeddingMitigation: ["javascript"], callbacks: { initialized: function(response) { // HANDLE INITIALIZATION RESPONSE }, formSessionUpdate: function(response) { // HANDLE RESPONSE FOR UPDATE SESSION if (response.status) { if ("ok" == response.status) { console.log("Session updated with data: " + response.session.id); //check if the security code was provided by the user if (response.sourceOfFunds.provided.card.securityCode) { console.log("Security code was provided."); } //check if the user entered a Mastercard credit card if (response.sourceOfFunds.provided.card.scheme == 'MASTERCARD') { console.log("The user entered a Mastercard credit card.") } } else if ("fields_in_error" == response.status) { console.log("Session update failed with field errors."); if (response.errors.cardNumber) { console.log("Card number invalid or missing."); } if (response.errors.expiryYear) { console.log("Expiry year invalid or missing."); } if (response.errors.expiryMonth) { console.log("Expiry month invalid or missing."); } if (response.errors.securityCode) { console.log("Security code invalid."); } } else if ("request_timeout" == response.status) { console.log("Session update failed with request timeout: " + response.errors.message); } else if ("system_error" == response.status) { console.log("Session update failed with system error: " + response.errors.message); } } else { console.log("Session update failed: " + response); } } }, interaction: { displayControl: { formatCard: "EMBOSSED", invalidFieldCharacters: "REJECT" } } }); function pay() { // UPDATE THE SESSION WITH THE INPUT FROM HOSTED FIELDS PaymentSession.updateSessionFromForm('card'); } </script> </body> </html>
Ανακλήσεις στη σελίδα πληρωμής
Το Hosted Session σάς επιτρέπει να χρησιμοποιείτε διάφορες συναρτήσεις ανάκλησης για να προσαρμόσετε τον τρόπο συμπεριφοράς της σελίδας πληρωμής και το είδος της ανατροφοδότησης που παρέχει στον πληρωτή.
Ανακλήσεις για τη διαμόρφωση της περιόδου λειτουργίας (session)
Αυτή η ενότητα ορίζει τις συναρτήσεις ανάκλησης για τη διαμόρφωση της περιόδου λειτουργίας (session) και τις αποκρίσεις που επιστρέφονται από τις ανακλήσεις αποτελεσμάτων. Για ένα παράδειγμα του τρόπου χειρισμού των ανακλήσεων στον κώδικα της σελίδας πληρωμής, βλ. το Παράδειγμα κώδικα σελίδας πληρωμών.
Οι ανακλήσεις που χρησιμοποιούνται στη συνάρτηση PaymentSession.configure():
- Γίνεται επίκληση στην ανάκληση initialized(result) όταν τα hosted πεδία επισυνάπτονται στη σελίδα πληρωμής:
- Αν result.status=="ok", τα hosted πεδία επισυνάπτονται με επιτυχία στη σελίδα πληρωμής σας.
- Αν result.status=="system_error" or result.status=="request_timeout", παρουσιάστηκε σφάλμα κατά την επισύναψη των hosted πεδίων. Δοκιμάστε ξανά μετά από μια μικρή καθυστέρηση.
Παράδειγμα απόκρισης επιτυχούς προετοιμασίας// An ok response { "status":"ok", }
Παράδειγμα απόκρισης αποτυχημένης προετοιμασίας// An error response (system_error) { "status": "system_error", "message": "System error message." } // An error response (request_timeout) { "status" : "request_timeout", "message": "Request timeout error message." }
- Γίνεται επίκληση στην ανάκληση formSessionUpdate(result) όταν το περιεχόμενο του field πεδίου αποθηκεύεται στην περίοδο λειτουργίας (session):
- Αν result.status=="ok", η περίοδος λειτουργίας (session) περιέχει τώρα τις λεπτομέρειες πληρωμής που έχουν συλλεχθεί.
Παράδειγμα ενημέρωσης περιόδου λειτουργίας φόρμας για επιτυχή απόκριση// An ok response { "status":"ok", "merchant": "TESTMERCHANT", "session": { "id": "SESSION000218450948092491657986" "updateStatus":"SUCCESS", "version":"e3f144ce02" }, "sourceOfFunds": { "provided": { "card": { "brand": "MASTERCARD", "expiry": { "month": "1", "year": "39" }, "fundingMethod": "DEBIT", "nameOnCard": "John Smith", "number": "512345xxxxxx8769", "scheme": "MASTERCARD" } }, "type": "CARD" }, "version": "43" }
- Αν result.status=="fields_in_error", η εισαγωγή του πληρωτή δεν είναι έγκυρη. Ζητήστε από τον πληρωτή να ενημερώσει τις πληροφορίες που εισάγει. Η δομή απόκρισης errors περιέχει πληροφορίες σχετικά με τα μη έγκυρα πεδία.
- Αν result.status=="system_error" or result.status=="request_timeout", έχει προκύψει σφάλμα κατά την επεξεργασία της ενημέρωσης. Δοκιμάστε ξανά την ενημέρωση της περιόδου λειτουργίας (session) μετά από μια μικρή καθυστέρηση.
// An error response (fields_in_error) { "status": "fields_in_error", "session": { "id": "SESSION000218450948092491657986" }, "errors": { "cardNumber": "invalid", "securityCode": "invalid" }, version: "43" }
// An error response (system_error) { "status": "system_error", "session": { "id": "SESSION000218450948092491657986" }, "errors": { "message": "System error message." }, "version": "43" } // An error response (request_timeout) { "status": "request_timeout", "session": { "id": "SESSION000218450948092491657986" }, "errors": { "message": "Request timeout error message." }, "version": "43" }
Ανακλήσεις για hosted πεδία
Το Hosted Session σάς επιτρέπει να καταχωρήσετε συναρτήσεις ανάκλησης για τον χειρισμό συμβάντων που μπορεί να προκύψουν στα hosted πεδία κατά την αλληλεπίδραση του πληρωτή. Τα συμβάντα σάς επιτρέπουν να παρακολουθείτε τι κάνει ο πληρωτής και να του παρέχετε σχόλια επικύρωσης κατά τη διάρκεια διαφόρων σταδίων αλληλεπίδρασης πληρωμών.
Μπορείτε να καταχωρήσετε συναρτήσεις ανάκλησης για τα ακόλουθα συμβάντα:
- onChange(): Επίκληση όταν έχει αλλάξει η τιμή εισόδου στο hosted πεδίο στο iFrame.
- onFocus(): Επίκληση όταν το hosted πεδίο στο iFrame βρίσκεται στο επίκεντρο.
- onBlur(): Επίκληση όταν το hosted πεδίο στο iFrame δεν βρίσκεται στο επίκεντρο. Μόλις ο πληρωτής ολοκληρώσει την πληκτρολόγηση και αποχωρήσει από το πεδίο, και ενεργοποιηθεί αυτό το συμβάν, καλέστε τη συνάρτηση validate() και εμφανίστε τυχόν σφάλματα για το πεδίο από την ανάκληση της συνάρτησης validate().
- onMouseOver(): Επίκληση όταν συμβεί ένα συμβάν με τον δείκτη του ποντικιού από επάνω στο hosted πεδίο.
- onMouseOut(): Επίκληση όταν συμβεί ένα συμβάν με τον δείκτη του ποντικιού εκτός στο hosted πεδίο.
- onValidityChange(): Επίκληση μετά από κάθε πάτημα πλήκτρου που κάνει ο πληρωτής, παρέχοντας ανατροφοδότηση για την εγκυρότητα των δεδομένων που έχει εισάγει ο πληρωτής μέχρι εκείνη τη στιγμή.
/** * Provide an array of field roles for proxy fields as the first parameter * Each callback function is invoked with the selector for the field whose proxy triggered the event. */ PaymentSession.onBlur( ["card.number", "card.nameOnCard", "card.securityCode", "card.expiryYear", "card.expiryMonth"], function (selector, role) { PaymentSession.validate('card', function (allresult) { if (allresult.card[role].isValid) { console.log("The field is valid"); document.querySelector(selector).style.borderColor = "green"; } else { console.log("The field is invalid"); document.querySelector(selector).style.borderColor = "red"; } }); PaymentSession.onFocus(['card.number', 'card.securityCode'], function(selector) { //handle focus event }); PaymentSession.onChange(['card.securityCode'], function(selector) { //handle change event }); PaymentSession.onMouseOver(['card.number'], function(selector) { //handle mouse over event }); PaymentSession.onMouseOut(['card.number'], function(selector) { //handle mouse out event }); PaymentSession.onValidityChange(["card.number", "card.nameOnCard"], function (selector, result) { if (result.isValid) { console.log("The field value is valid"); document.querySelector(selector).style.borderColor = "green"; } else if (result.isIncomplete) { console.log("The field value is not yet valid"); document.querySelector(selector).style.borderColor = "grey"; } else { console.log("The field value is invalid"); document.querySelector(selector).style.borderColor = "red"; } });
Συχνές ερωτήσεις
Πώς μπορώ να χειριστώ το συμβάν στο οποίο ο τύπος κάρτας που εισήγαγε ο πληρωτής δεν υποστηρίζεται στο προφίλ εμπόρου μου;
Για να χειριστείτε αυτό το συμβάν, χρησιμοποιήστε πρώτα την πράξη PAYMENT OPTIONS INQUIRY για να λάβετε μια λίστα των υποστηριζόμενων τύπων καρτών. Στη συνέχεια, επιθεωρήστε τις πληροφορίες τύπου κάρτας (sourceOfFunds.provided.card.brand και sourceOfFunds.provided.card.scheme) στην απόκριση PaymentSession.updateSessionFromForm('card'), επικυρώστε τις έναντι της λίστας των υποστηριζόμενων τύπων καρτών και εμφανίστε ένα μήνυμα σφάλματος αν ο τύπος της κάρτας δεν γίνει αποδεκτός.
Πώς μπορώ να ξέρω αν το CSC ή το CVV του πληρωτή είναι απαραίτητο και έχει δοθεί;
Για να μάθετε αν απαιτείται το CSC ή το CVV, χρησιμοποιήστε την πράξη PAYMENT OPTIONS INQUIRY. Αν ο πληρωτής δεν παρέχει CSC/CVV, το πεδίο securityCode ΔΕΝ επιστρέφεται στην απόκριση PaymentSession.updateSessionFromForm('card'). Αν χρειάζεστε το CSC/CVV και δεν υπάρχει τιμή, πρέπει να εμφανίσετε ένα σφάλμα στον πληρωτή.
Οι ανακλήσεις συμβάντων για hosted πεδία λειτουργούν σε όλους τους browser;
Υπάρχουν γνωστά ζητήματα με τις ανακλήσεις συμβάντων στα ακόλουθα λειτουργικά συστήματα και browser:
- Internet Explorer 11 σε Windows 10: Αν interaction.displayControl.formatCard=EMBOSSED, το συμβάν onChange() δεν ενεργοποιείται όταν αλλάζετε την τιμή ενός hosted πεδίου.
- iOS9 σε iPhone 6+: Τα συμβάντα onChange() και onBlur() δεν ενεργοποιούνται όταν ο πληρωτής εισάγει δεδομένα σε ένα hosted πεδίο και αγγίζει ένα άλλο πεδίο στη σελίδα πληρωμής. Επιπλέον, ο πληρωτής δεν μπορεί να πλοηγηθεί από hosted πεδία σε άλλα πεδία στη σελίδα πληρωμής και αντίστροφα.