Issuing Elements verwenden
Erfahren Sie, wie Sie Kartendaten auf PCI-konforme Weise in Ihrer Webanwendung anzeigen.
Stripe.js enthält eine browserseitige JavaScript-Bibliothek, mit der Sie die sensiblen Daten Ihrer Issuing-Karten im Web unter Einhaltung der PCI-Anforderungen anzeigen können. Die sensiblen Daten werden in von Stripe gehosteten iFrames gerendert und gelangen nicht auf Ihre Server.
Notiz
Stripe.js erfasst zusätzliche Daten zum Schutz unserer Nutzer/innen. Erfahren Sie mehr darüber, wie Stripe diese Daten für die erweiterte Betrugserkennung erhebt.
Authentifizierung mit temporären Schlüsseln
Stripe.js verwendet temporäre Schlüssel, um Karteninformationen sicher von der Stripe -API abzurufen, ohne Ihre geheimen Schlüssel öffentlich zugänglich zu machen. Um dies einzurichten, müssen Sie einen Teil des temporären Schlüsselaustauschs auf dem Server durchführen.
Der Erstellungsprozess eines temporären Schlüssels beginnt im Browser, indem eine Nonce mit Stripe.js erstellt wird. Eine Nonce ist ein einmalig verwendbares Token, das einen temporären Schlüssel erstellt. Diese Nonce wird an Ihren Server gesendet, wo Sie sie durch Aufrufen der Stripe -API (mithilfe Ihres geheimen Schlüssels) gegen einen temporären Schlüssel eintauschen.
Nachdem Sie auf der Serverseite einen temporären Schlüssel erstellt haben, übergeben Sie ihn zur Verwendung mit Stripe.js zurück an den Browser.
Sicheren Endpoint erstellenServerseitig
Der erste Schritt bei der Integration mit Issuing Elements besteht darin, einen sicheren, serverseitigen Endpoint zu erstellen, um temporäre Schlüssel für die Karte zu generieren, die Sie anzeigen möchten. Ihre Issuing Elements-Webintegration ruft diesen Endpoint auf.
So können Sie einen Endpoint zur Erstellung temporärer Schlüssel im Webanwendungs-Framework in verschiedenen Sprachen implementieren:
Notiz
Sie müssen die API-Version beim Erstellen von temporären Schlüsseln angeben. Derzeit ist die erforderliche Version 2020-03-02
. Sie müssen auch eine temporäre Schlüsselnonce übergeben, die Sie in Ihrer Webintegration erstellen können.
API-Integration auf WebClientseitig
Fügen Sie zunächst Stripe.js in Ihre Seite ein. Weitere Informationen zum Einrichten von Stripe.js finden Sie unter Einbindung von Stripe.js.
Erstellen Sie eine Stripe
-Instanz und eine temporäre Schlüsselnonce für die Karte, die Sie abrufen möchten, indem Sie stripe.createEphemeralKeyNonce verwenden. Verwenden Sie die Nonce, um den temporären Schlüssel abzurufen, indem Sie den von Ihnen erstellten serverseitigen Endpoint aufrufen:
const stripe = Stripe(
); // Initialize Elements which you'll need later const elements = stripe.elements(); // Use Stripe.js to create a nonce const cardId = 'ic_1ITi6XKYfU8ZP6raDAXem8ql'; const nonceResult = await stripe.createEphemeralKeyNonce({ issuingCard: cardId, }); const nonce = nonceResult.nonce; // Call your ephemeral key creation endpoint to fetch the ephemeral key const ephemeralKeyResult = await fetch('/ephemeral-keys', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ card_id: cardId, nonce: nonce, }) }); const ephemeralKeyResponse = await ephemeralKeyResult.json(); const ephemeralKeySecret = ephemeralKeyResponse.ephemeralKeySecret;'pk_test_TYooMQauvdEDq54NiTphI7jx'
Nachdem Sie nun einen temporären Schlüssel haben, können Sie sensible Kartendaten anzeigen. Dazu können Sie eines der folgenden Elemente verwenden und Sie können dasselbe Nonce- und temporäre Schlüsselpaar für mehrere Elemente auf derselben Seite wiederverwenden:
Element | Name | Verfügbarkeit |
---|---|---|
Number (PAN) | issuingCardNumberDisplay | Nur virtuelle Karten |
Prüfziffer/CVC | issuingCardCvcDisplay | Nur virtuelle Karten |
Ablaufdatum | issuingCardExpiryDisplay | Nur virtuelle Karten |
PIN | issuingCardPinDisplay | Nur physische Karten |
Jedes Element nimmt die folgende Konfiguration an:
Name | Typ | Nutzung |
---|---|---|
style | Style-Objekt | Beachten Sie, dass einige Varianten, Pseudo-Klassen und Eigenschaften für Eingabe-Elements gedacht sind und für diese Elements nicht gelten. Ein Beispiel für eine Pseudoklasse, die nur für Eingaben gilt, ist ::placeholder . |
issuingCard | string | Die ID Ihrer ausgestellten Karte (zum Beispiel ic_ ) |
nonce | string | Ihr temporärer Schlüsselnonce |
ephemeralKeySecret | string | Die secret -Komponente Ihres temporären Schlüssels |
Notiz
Wenn Sie sich für die Verwendung von issuingCardPinDisplay
entscheiden, müssen Sie geeignete Methoden implementieren, um sicherzustellen, dass der Zugriff auf Ihre autorisierten Nutzer/innen beschränkt ist. Insbesondere müssen Sie die Zwei-Faktor-Authentifizierung (2FA) anwenden, bevor Sie mit issuingCardPinDisplay
Zugriff auf eine Seite gewähren. Wenn Stripe entscheidet, dass Sie keine ausreichenden Sicherheitsmaßnahmen getroffen haben, sperren wir möglicherweise Ihren Zugriff auf dieses Element.
Im Folgenden finden Sie ein Beispiel dafür, wie eines dieser Elemente mithilfe des im obigen Beispiel erstellten Nonce- und temporären Schlüsselpaars angezeigt wird:
const number = elements.create('issuingCardNumberDisplay', { issuingCard: cardId, nonce: nonce, ephemeralKeySecret: ephemeralKeySecret, style: { base: { color: '#fff', fontSize: '16px' }, }, }); number.mount('#card-number');
Eine Schaltfläche zum Kopieren hinzufügen
Zusätzlich zu den bereits erläuterten „Elementen zur Darstellung von Kartendaten“ stellen wir auch das Element issuingCardCopyButton
zur Verfügung. Dieses akzeptiert das Argument toCopy
und stellt die transparente Schaltfläche „In Zwischenablage kopieren“ dar, die den Platz des übergeordneten <div>
einnimmt. Dadurch wird es ermöglicht, alle Klick-Ereignisse mit einem Klick-Handler abzufangen, der die entsprechenden Kartendaten, die bei der Initialisierung angegeben wurden, übernimmt und in die Zwischenablage kopiert.
Damit können Sie die Schaltfläche „In Zwischenablage kopieren“ neben der Kartennummer, dem Ablaufdatum und der Prüfziffer anzeigen. Dadurch wird verhindert, dass die Karteninhaber/innen die Kartendaten manuell kopieren. Die Kopierfunktion ist auf den PCI-konformen <iframe>
von Stripe beschränkt.
Das Element issuingCardCopyButton
erhält die folgende Konfiguration:
Name | Typ | Nutzung |
---|---|---|
Format | Style-Objekt | Beachten Sie, dass einige Varianten, Pseudo-Klassen und Eigenschaften für Eingabe-Elements gedacht sind und für diese Elements nicht gelten. Ein Beispiel für eine Pseudoklasse, die nur für Eingaben gilt, ist ::placeholder . |
toCopy | 'expiry' oder 'cvc' oder 'number' oder 'pin' |
Nachfolgend finden Sie ein Beispiel für die Verwendung dieser Komponente:
const cardNumber = elements.create('issuingCardNumberDisplay', { issuingCard: cardId, nonce: nonce, ephemeralKeySecret: ephemeralKeySecret, }); cardNumber.mount('#card-number'); const cardNumberCopy = elements.create('issuingCardCopyButton', { toCopy: 'number', style: { base: { fontSize: '12px', lineHeight: '24px', }, }, }); cardNumberCopy.mount('#card-number-copy');
Wenn Sie Schwierigkeiten mit der Reaktion Ihrer Schaltfläche auf Klicks haben, achten Sie darauf, den iframe richtig an Ihrer Schaltfläche auszurichten. Sie können Ihr Bild und die <div>
in Ihren Stylesheets nach Belieben anpassen.
#card-number-copy { height: 24px; width: 24px; position: relative; background-repeat: no-repeat; background-position: center; background-size: contain; background-image: url('data:image/svg+xml;base64,...'); }
Als letzten Schritt sollten Sie Ihren Nutzer/innen ein „After-Click-Feedback“ anbieten. Verwenden Sie dazu das On-Click-Ereignis des issuingCardCopyButton
-Elements. Dies könnte vorübergehend ein neues Symbol sein, wie unten dargestellt.
#card-number-copy-success { display: none; height: 24px; width: 24px; background-image: url('data:image/svg+xml;base64,...'); background-size: 100%; }
// Example of hiding, replacing, and re-showing icons upon click const timeout = (ms) => { return new Promise((resolve) => setTimeout(resolve, ms)); }; const hideAndShowSuccess = (iconElementId, successIconElementId) => { const el = document.getElementById(iconElementId); el.style.display = 'none'; const elSuccess = document.getElementById(successIconElementId); elSuccess.style.display = 'block'; timeout(2000).then(() => { elSuccess.style.display = 'none'; el.style.display = 'block'; }); }; cardNumberCopy.on('click', () => { hideAndShowSuccess('card-number-copy', 'card-number-copy-success'); });
Zusätzliche Informationen
Das zurückgegebene Kartenobjekt verfügt über PCI-Felder (z. B. die Nummer), die vollständig aus der Nutzlast result.
entfernt wurden.
Neben .
im oben genannten Beispiel unterstützen die Elemente auch die folgenden Methoden:
.
destroy() .
unmount() .
update({style})
Issuing Elements und native Anwendungen
Issuing Elements unterstützt keine nativen Anwendungsplattformen wie iOS, Android oder React Native.
Verwenden Sie eine Webansicht, um sensible Kartendaten mit Issuing Elements in Ihrer nativen App anzuzeigen. Erstellen Sie eine Webintegration auf Ihren Servern, indem Sie diesen Leitfaden befolgen, und verweisen Sie dann die URL einer Webansicht auf diese Integration. Informationen zur Implementierung von Webansichten für native Apps finden Sie in diesen externen Ressourcen:
- iOS und iPadOS: WKWebView
- Android: WebView
- React Native: react-native-webview
- Flutter: webview-flutter