Utilisation des Elements Issuing
Découvrez comment afficher les informations de carte bancaire dans votre application Web, conformément à la norme PCI.
Stripe.js fournit une bibliothèque JavaScript côté navigateur qui vous permet d’afficher les données sensibles de vos cartes Issuing sur le Web en conformité avec les normes PCI. Les données sensibles sont affichées dans des iframes hébergés par Stripe et ne transitent jamais sur vos serveurs.
Remarque
Stripe.js collecte des données supplémentaires pour protéger ses utilisateurs. En savoir plus sur la façon dont Stripe collecte des données pour la détection avancée de la fraude.
Authentification par clé éphémère
Stripe.js utilise des clés éphémères pour récupérer les informations de carte bancaire en toute sécurité à partir de l’API Stripe sans révéler publiquement vos clés secrètes. Pour ce faire, vous devez effectuer une partie de l’échange de clés éphémères côté serveur.
Le processus de création d’une clé éphémère commence dans le navigateur par la création d’un nonce à l’aide de Stripe.js. Un nonce est un token à usage unique qui crée une clé éphémère. Ce nonce est envoyé à votre serveur, où vous l’échangez contre une clé éphémère en appelant l’API Stripe (à l’aide de votre clé secrète).
Après avoir créé une clé éphémère côté serveur, renvoyez-la au navigateur pour que Stripe.js puisse l’utiliser.
Créer un endpoint sécuriséCôté serveur
La première étape de l’intégration à Issuing Elements consiste à créer un endpoint sécurisé côté serveur afin de générer des clés éphémères pour la carte que vous souhaitez afficher. Votre intégration Web Issuing Elements appelle cet endpoint.
Voici comment implémenter un endpoint de création de clés éphémères dans un framework d’applications Web dans différents langages :
Remarque
Vous devez spécifier la version de l’API lors de la création de clés éphémères. La version actuellement requise est la 2020-03-02
. Vous devez également transmettre un nonce de clé éphémère, que vous pouvez créer dans votre intégration web.
Intégration à l'API WebCôté client
Tout d’abord, ajoutez Stripe.js à votre page. Pour en savoir plus sur la configuration de Stripe.js, consultez la rubrique sur l’intégration de Stripe.js.
Créez une instance Stripe
et un nonce de clé éphémère pour la carte que vous souhaitez récupérer à l’aide de stripe.createEphemeralKeyNonce. Utilisez le nonce pour récupérer la clé éphémère en appelant l’endpoint côté serveur que vous avez créé :
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'
Maintenant que vous avez une clé éphémère, vous pouvez afficher les informations sensibles de votre carte bancaire. Pour ce faire, vous pouvez utiliser l’un des composants Elements suivants et réutiliser la même paire de nonce et clé éphémère pour plusieurs Elements sur la même page :
Element | Nom | Disponibilité |
---|---|---|
Numéro (PAN) | issuingCardNumberDisplay | Cartes virtuelles uniquement |
CVC | issuingCardCvcDisplay | Cartes virtuelles uniquement |
Date d’expiration | issuingCardExpiryDisplay | Cartes virtuelles uniquement |
PIN | issuingCardPinDisplay | Cartes physiques uniquement |
Chaque composant Element prend la configuration suivante :
Nom | Type | Utilisation |
---|---|---|
style | Objet Style | Gardez à l’esprit que certaines variantes, pseudo-classes et propriétés sont destinées aux Elements de saisie et ne s’appliqueront pas à ces Elements. ::placeholder est un exemple de pseudo-classe destinée uniquement à la saisie. |
issuingCard | string | L’ID de la carte (par exemple, ic_ ) |
nonce | string | Votre nonce de clé éphémère |
ephemeralKeySecret | string | Le composant secret de votre clé éphémère |
Remarque
Si vous décidez d’utiliser issuingCardPinDisplay
, vous devez implémenter des méthodes appropriées pour vous assurer que l’accès est limité à vos utilisateurs autorisés. Vous devez notamment appliquer l’authentification à deux facteurs (2FA) avant de fournir l’accès à une page à l’aide de issuingCardPinDisplay
. Si Stripe estime que vous n’avez pas mis en place de mesures de sécurité suffisantes, nous pourrons suspendre votre accès à cet Element.
Voici un exemple d’affichage de l’un de ces Elements à l’aide de la paire nonce et clé éphémère créée dans l’exemple ci-dessus :
const number = elements.create('issuingCardNumberDisplay', { issuingCard: cardId, nonce: nonce, ephemeralKeySecret: ephemeralKeySecret, style: { base: { color: '#fff', fontSize: '16px' }, }, }); number.mount('#card-number');
Ajout d’un bouton de copie
Outre les « Elements d’affichage des données de carte » dont nous avons déjà parlé, nous fournissons également un Element issuingCardCopyButton
. Ce dernier génère, à partir d’un argument toCopy
, un bouton « Copier dans le presse-papiers » qui prend la place de son parent <div>
. Ce bouton intercepte tous les événements de clics grâce à un gestionnaire de clics qui reprend les données de carte correspondantes spécifiées lors de l’initialisation et qui les copie dans le presse-papiers.
Ainsi, vous pouvez afficher des boutons « Copier dans le presse-papiers » à côté du numéro, de la date d’expiration et du cvc de la carte bancaire, ce qui évite aux titulaires de carte d’avoir à copier manuellement les données de leur carte. Nous limitons la fonctionnalité de copie à l’<iframe>
, conformément aux exigences PCI de Stripe.
L’Element issuingCardCopyButton
présente la configuration suivante :
Nom | Type | Utilisation |
---|---|---|
style | Objet Style | Gardez à l’esprit que certaines variantes, pseudo-classes et propriétés sont destinées aux Elements de saisie et ne s’appliqueront pas à ces Elements. ::placeholder est un exemple de pseudo-classe destinée uniquement à la saisie. |
toCopy | 'expiry' ou 'cvc' ou 'number' ou 'pin' |
Voici un exemple d’utilisation de ce composant :
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');
Si votre bouton ne réagit pas comme il se doit aux clics, veillez à bien aligner l’iframe sur votre bouton. Vous pouvez personnaliser à votre guise l’image et le conteneur <div>
dans vos feuilles de style.
#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,...'); }
Pour finir, offrez à vos utilisateurs l’option « commentaire post-clic ». Pour ce faire, utilisez l’événement de clic du composant Element issuingCardCopyButton
. Il est possible qu’une nouvelle icône s’affiche temporairement, comme illustré ci-dessous.
#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'); });
Informations supplémentaires
Les champs PCI (tels que le numéro) de l’objet Card renvoyé sont entièrement supprimés de la charge utile result.
.
En plus de .
dans l’exemple ci-dessus, les Elements prennent également en charge les méthodes suivantes :
.
destroy() .
unmount() .
update({style})
Issuing Elements et applications natives
Issuing Elements ne prend pas directement en charge les plateformes d’applications natives telles qu’iOS, Android ou React Native.
Pour afficher les informations sensibles des cartes avec Issuing Elements dans votre application native, utilisez une vue Web. Créez une intégration Web sur vos serveurs en suivant ce guide, puis faites pointer l’URL d’une vue Web vers cette intégration. Pour en savoir plus sur l’implémentation des vues Web pour les applications natives, consultez ces ressources externes :
- iOS et iPadOS : WKWebView
- Android : WebView
- React Native : react-native-webview
- Flutter : webview-flutter