Alors, vous voulez accepter les cartes de crédit en ligne?

Jusqu'à récemment, accepter les cartes de crédit sur un site Web était coûteux et compliqué. Mais c'était avant Stripe: une entreprise de traitement de cartes de crédit radicalement différente et incroyablement impressionnante. Aujourd'hui, je vais vous montrer comment accepter les cartes en 30 minutes ou moins, sans dépenser un centime.

Tutoriel republié

Toutes les quelques semaines, nous revoyons certains des articles préférés de nos lecteurs tout au long de l'histoire du site. Ce tutoriel a été publié pour la première fois en juin 2012.


La façon dont les choses étaient

Sans Stripe, accepter les cartes de crédit sur un site Web est une entreprise de grande envergure. Premièrement, vous devez ouvrir un "compte marchand", qui ressemble à un compte bancaire classique, mais avec des frais supplémentaires. Ensuite, vous avez besoin d’une "passerelle de paiement" - car le traitement des cartes de crédit se déroule apparemment dans une dimension distincte, où les banquiers règnent avec une poigne de fer et où Lindsey Lohan mène une carrière d'acteur réussie. Et puis viennent les sangsues: 25 $ de frais mensuels. Frais d'installation de 99 $. Frais annuels de 50 $. Des frais de transaction ayant échoué de 0,35 USD (VOUS payez lorsque la carte de votre client ne parvient pas à passer!). 0,25 $ + 2,0% de frais de transaction réussis. Frais de lot de 2,00 $. Frais de 5,00 $ pour les besoins d'un nouveau-père. C'est ridicule. Authorize.net est le processeur de cartes le plus populaire, et les employés de cette société (et de ses nombreux revendeurs) passent chaque jour à réfléchir à de nouvelles façons ridicules de prendre votre argent..


Entrez Stripe

L'installation prend environ cinq minutes.

Malheureusement, ça est Il est illégal de kidnapper le PDG d’Autorize.net, de le recouvrir de sauce barbecue et de le laisser tomber dans une fosse de blaireaux. Mais, vous pouvez faire la meilleure chose suivante: n'utilise pas son service. Basculer vers Stripe. Vous n'aurez pas besoin d'un compte marchand ou d'une passerelle de paiement. Stripe déposera de l'argent dans tout compte bancaire que vous aimez. Il n'y a aucun frais. L'installation prend environ cinq minutes. (Oui, sérieusement.) Et vous payez exactement une chose: 2,9% + 0,30 $ sur chaque transaction effectuée avec une carte. (Donc, si vous vendez quelque chose à 30 $, vous conservez 28,83 $ et Stripe gagne 1,17 $.) Le site Web est simple et intuitif et le personnel est extrêmement utile. Le seul inconvénient est que Stripe est actuellement indisponible en dehors des États-Unis. (Remarque: Stripe accepte les cartes de crédit de l’étranger; c’est juste que vous ne pouvez pas ouvrir un compte Stripe en dehors des États-Unis.) Ils travaillent à l’extension vers d’autres pays..

La suite de ce tutoriel expliquera comment implémenter Stripe sur votre site web avec PHP et Javascript (jQuery). Le service dispose également d’API pour Ruby, Python, Java et d’autres plateformes. Bien qu'il puisse sembler que beaucoup de travail reste à faire, il n'y en a pas vraiment; vous serez opérationnel en un rien de temps. Commençons:


Étape 0: Installer un certificat SSL

Nous traitons des informations de carte de crédit, nous devons donc bien sûr sécuriser la connexion de l'utilisateur à notre serveur. Nous faisons cela en utilisant un certificat SSL et ce n'est pas facultatif. Les utilisateurs s'attendent non seulement à voir le protocole "https: //" sur une page de commande, mais Stripe le requiert. Mais ne vous inquiétez pas: la mise en œuvre de SSL est très simple. Presque tous les fournisseurs d'hébergement proposent l'installation automatique de certificats SSL. Vous achetez simplement le certificat auprès de votre fournisseur et celui-ci l'installe et le configure automatiquement pour vous. Vous n'avez rien d'autre à faire sur votre site. Si votre formulaire de commande se trouve à l'adresse http://mydomain.com/order.php, vous envoyez simplement le client à l'adresse https://mydomain.com/order.php. La connexion sera sécurisée avec votre nouveau certificat SSL. C'est tout!

Remarque: il y a une exception. Si votre page de commande charge des ressources telles que des feuilles de style, des scripts ou des images à l'aide d'une URL absolue (par opposition à une adresse relative), vous devez vous assurer que ces URL utilisent le protocole "https: //". Par exemple, si vous incluez une image sur votre page de commande sécurisée de ce type, le navigateur vous avertira que la page contient des éléments sécurisés et non sécurisés:

 

Pour résoudre ce problème, chargez l'image à partir d'une URL sécurisée, comme ceci:

 

Vous n'avez pas à vous soucier de ce problème pour les URL relatives (telles que "… /images/someImage.jpg") car votre serveur chargera automatiquement ces éléments en toute sécurité..


Étape 1: Créer un compte

Visitez Stripe.com et créez un nouveau compte. Une fois que vous avez dépassé l'invite initiale du nom d'utilisateur / mot de passe, cliquez sur le menu "Votre compte" en haut à droite et ouvrez le volet "Paramètres du compte", illustré ci-dessous. Tout d’abord, assurez-vous de définir un bon "descripteur de déclaration". C’est ce que les clients verront sur leurs relevés de carte de crédit. Un bon descripteur aide le client à se souvenir de ce qu'il a acheté pour ne pas confondre votre transaction avec une fraude et annuler les frais. (Lorsque cela se produit, cela s'appelle un "rejet de débit" et vous paierez des frais de 15 USD en plus de la perte de la vente, alors assurez-vous que votre descripteur est défini!) Ensuite, spécifiez le compte bancaire sur lequel vous souhaitez que votre argent soit déposé . Vous êtes invités à utiliser le mien. Et enfin, jetez un coup d'œil à l'onglet "API Keys". Nous les utiliserons bientôt, alors gardez-les à portée de main.


Étape 2: Créez votre formulaire de paiement

Nous avons ensuite besoin d’un formulaire que nos clients remplissent pour passer une commande par carte de crédit avec nous. Aujourd'hui, nous allons utiliser cette page PHP extrêmement simplifiée, appelée "buy.php":

       

Formulaire de paiement

Prénom:

Nom de famille:

Adresse électronique:

Numéro de Carte de Crédit:

Date d'expiration:

CVC:

Il y a trois choses à noter à propos de l'extrait de code ci-dessus.

  1. Premièrement, nous avons défini l'action du formulaire sur "javascript:" plutôt que de fournir un chemin d'accès à un script côté serveur. (Vous verrez pourquoi dans une minute.)
  2. Deuxièmement, il y a un court extrait de PHP qui renseigne automatiquement notre champ années d'expiration avec les 20 prochaines années afin que nous n'ayons pas à le mettre à jour manuellement à l'avenir..
  3. Troisièmement, aucun des champs de formulaire n’a un ensemble de paramètres "name". Ceci est crucial car cela empêchera que la valeur du champ (tel que le numéro de carte de crédit) soit envoyée à notre serveur lors de l'envoi du formulaire. Nous allons parler de pourquoi c'est important dans une minute.

Combien d'informations devrais-je collecter??

Les seules choses que vous avez absolument doit doivent débiter une carte de crédit sont le numéro de carte et la date d'expiration. Mais vous devriez toujours recueillir au moins quelques informations supplémentaires. Voici pourquoi: si un client conteste le montant de sa carte, vous devrez prouver qu'il a effectivement passé une commande avec vous..

Plus vous collectez d'informations, plus il sera facile de prouver que le client (par opposition à un voleur d'identité) a passé la commande sur votre site..


Quelle est la prochaine: La grande image

OK, nous avons SSL installé et un formulaire de paiement prêt à l'emploi. Supposons que nous facturons le client 20,00 $ pour cette commande. (En réalité, vous calculeriez le total en fonction des commandes du client, etc. C'est à vous de décider.) Lorsqu'il remplit le formulaire et appuie sur le bouton de validation, trois choses se produisent dans cet ordre:

  1. En utilisant Javascript (jQuery), nous collectons la valeur de chaque champ de formulaire. Nous transmettons ces informations directement au serveur de Stripe, en utilisant Stripe.js.
  2. Le serveur de Stripe s'assurera que les données de carte de crédit sont bien formées, préparera une transaction et nous renverra un "jeton à usage unique".
  3. Nous transmettons le jeton à un script côté serveur sur notre propre serveur, qui contacte à nouveau Stripe et déclenche le chargement effectif sur la carte de crédit. C'est tout!

Pourquoi le faire de cette façon?

Sécurité. Les informations de carte de crédit de l'utilisateur ne touchent jamais notre propre serveur. Nous le transmettons directement à Stripe côté client à l'aide de Javascript. Le serveur de Stripe prend ces informations et prépare une transaction. Le "jeton" qu'il nous renvoie ne contient PAS les détails de la carte de crédit, mais contient un identifiant nous permettant de déclencher la transaction préparée par Stripe. Ainsi, nous pouvons transmettre en toute sécurité le jeton à notre propre serveur sans risquer de compromettre la sécurité des détails de la carte de crédit de l'utilisateur..

Note: pendant que vous pouvez utiliser Stripe sans le processus de jeton, je fortement décourage-le. Si vous transmettez les détails bruts d'une carte de crédit à votre propre serveur, vous devez être extrêmement prudent pour les protéger et il y a de nombreuses façons de tout rater. Par exemple, les journaux d'erreurs du serveur peuvent facilement enregistrer des informations sensibles. Vous devez donc les nettoyer régulièrement et en toute sécurité. Si vous êtes sur un plan d'hébergement partagé, vous n'avez probablement pas le contrôle requis pour le faire. De plus, si votre serveur est piraté, vous risquez d'être poursuivi en justice par des clients excités. Et si tu fais quelque chose vraiment stupide comme stocker des informations de carte non chiffrées dans une base de données, je vais personnellement conduire à votre maison et vous battre avec un cactus. Jouer la prudence; utiliser le processus de jeton.


Étape 3: Recueillir les valeurs du formulaire

Créez un nouveau fichier Javascript, appelé "buy-controller.js". Commençons par coder ce fichier avec quelques vérifications de validation élémentaires:

 function showErrorDialogWithMessage (message) // Pour le tutoriel, nous ne faisons qu'une alerte. Vous devez personnaliser cette fonction pour // présenter de "jolis" messages d'erreur sur votre page. alerte (message); // Réactive le bouton de commande pour que l'utilisateur puisse réessayer $ ('# achat-soumission-bouton'). RemoveAttr ("disabled");  $ (document) .ready (fonction () $ ('# achat-formulaire'). submit (fonction (événement) // désactive immédiatement le bouton d'envoi pour éviter les doubles soumissions $ ('# achat-soumission-bouton' ) .attr ("disabled", "disabled"); var fName = $ ('# # prénom'). val (); var lName = $ ('# nom de famille'). val (); var email = $ ('# email'). val (); var numéroCarte = $ ('# numéro-de-carte'). val (); var cardCVC = $ ('# code-de-sécurité-carte'). val (); // Champs Prénom et Nom: assurez-vous qu'ils ne sont pas vides if (fName === "") showErrorDialogWithMessage ("Entrez votre prénom."); Return; if (lName === "") showErrorDialogWithMessage ( "Veuillez saisir votre nom de famille."); Return; // Validez l'adresse électronique: var emailFilter = /^([a-zA-Z0-9_\.\-]-+)@(([a-zA- Z0-9 \ -]) + (.) + ([A-zA-Z0-9] 2,4) + $ /; if (email === "") showErrorDialogWithMessage ("Veuillez entrer votre adresse email. . "); return; else if (! emailFilter.test (email)) showErrorDialogWithMessage (" Votre adresse email n'est pas valide. "); return; // Stripe validera le numéro de carte et le CVC pour nous, assurez-vous simplement qu'ils ne sont pas vierges si (numéroCarte === "") showErrorDialogWithMessage ("Veuillez entrer votre numéro de carte."); revenir;  if (cardCVC === "") showErrorDialogWithMessage ("Entrez le code de sécurité de votre carte."); revenir;  // Boom! Nous avons passé la validation de base, nous sommes donc prêts à envoyer les informations à // Stripe pour créer un jeton! (Nous ajouterons ce code bientôt.)); );

Ensuite, nous devons ajouter ce nouveau fichier JavaScript à la élément de notre page "buy.php". Nous allons également ajouter "Stripe.js", un fichier hébergé sur le serveur de Stripe qui nous permet de contacter Stripe du côté client pour transmettre les informations de carte de crédit et recevoir notre jeton. (Notez que nous chargeons Stripe.js en utilisant le protocole "https: //"!) Modifier le élément de "buy.php" pour ressembler à ceci:

     

Clés API

Avant de pouvoir soumettre des informations à Stripe, nous devons en quelque sorte dire à Stripe qui nous sommes. Pour ce faire, nous utilisons une paire de "clés", qui sont des chaînes uniques identifiant notre compte. Pour localiser ces clés, accédez au volet des paramètres de votre compte Stripe et ouvrez l'onglet Clés de l'API, illustré ici:

Comme vous pouvez le constater, il y a un total de quatre clés dans deux ensembles: "Test" et "Live". Vous utilisez l'ensemble de test pendant le développement pour pouvoir vérifier votre code sans charger de carte. Lorsque vous êtes prêt à déployer un site Web, remplacez simplement les clés de test par les clés actives. Il y a deux clés dans chaque ensemble: "publiable" et "secret". (Nous utiliserons la clé "secrète" dans notre script côté serveur une fois que nous aurons reçu un jeton de Stripe.) Pour l'instant, prenez la clé de test publiable et ajoutez-le à l'élément HEAD de "buy.php" comme ceci:

      

Attention: Vous DEVEZ inclure Stripe.js AVANT de définir la clé publiable. De plus, veillez à ne pas créer un site Web en direct sans passer aux touches "live"! Et enfin, assurez-vous de garder vos clés secrètes en sécurité et secret!


Étape 4: Demander un jeton

De retour au bas de "buy-controller.js", nous sommes prêts à ajouter le code qui demande un jeton à Stripe. C'est juste quelques lignes:

 // Boom! Nous avons passé la validation de base. Demandez donc un jeton à Stripe: Stripe.createToken (numéro: cardNumber, cvc: cardCVC, exp_month: $ ('# expiration-month'). Val (), exp_year: $ ('# expiration- année '). val (), stripeResponseHandler); // Empêche l'action d'envoi par défaut sur le formulaire return false;

La fonction "createToken" (définie dans Stripe.js) accepte deux paramètres. Le premier est un objet avec les détails de la carte de crédit. Le second est le nom de la fonction de rappel qui sera appelée lorsque le serveur de Stripe aura fini de préparer la transaction et retournera le jeton. Dans ce cas, notre fonction de rappel s'appelle "stripeResponseHandler". Ajoutons cette fonction au sommet de "buy-controller.js":

 function stripeResponseHandler (status, response) if (response.error) // Stripe.js n'a pas réussi à générer un jeton. Le message d'erreur expliquera pourquoi. // Habituellement, c'est parce que le client a mal saisi les informations de sa carte. // Vous devez le personnaliser pour présenter le message d'une manière élégante: alert (response.error.message);  else // Stripe.js a généré un jeton avec succès. Nous sommes prêts à charger la carte! var token = response.id; var firstName = $ ("# # prénom"). val (); var lastName = $ ("# # nom"). val (); var email = $ ("# email"). val (); // Nous devons savoir quel montant facturer. Supposons 20,00 $ pour le tutoriel. // Vous calculeriez évidemment ceci vous-même: var price = 20; // Appelle le script serveur pour traiter la commande. // Transmet le jeton et les informations de formulaire non sensibles. var request = $ .ajax (type: "POST", url: "pay.php", dataType: "json", data: "stripeToken": jeton, "prénom": prénom, "nom dernier": nom dernier, " email ": email," price ": price); request.done (function (msg) if (msg.result === 0) // Personnalisez cette section pour présenter un message de réussite et afficher tout ce que // devrait être affiché à l'utilisateur. alert ("La carte de crédit a été débitée successful! "); else // La carte n'a PAS été chargée avec succès, mais nous nous sommes interfacés avec Stripe //. Tout va bien. Il y a probablement un problème avec la carte de crédit de l'utilisateur. // Personnalisez cette section pour afficher une alerte d'explication d'erreur (" La carte de crédit de l'utilisateur a échoué. ");); request.fail (function (jqXHR, textStatus) // Nous n'avons pas réussi à appeler AJAX vers pay.php. Quelque chose ne va pas de notre côté. // Cela ne devrait normalement pas se produire, mais nous devons le gérer s'il le fait. alert ("Erreur: impossible d'appeler pay.php pour traiter la transaction.");); 

Cette fonction vérifie d’abord si une erreur est survenue lors de la création du jeton. Si Stripe.js ne parvient pas à renvoyer un jeton valide, c'est généralement parce que le client a mal saisi certaines de ses informations de carte de crédit. Ils ont peut-être mal saisi un numéro ou choisi une mauvaise date d'expiration. Heureusement, le message d'erreur qui accompagne la réponse vous expliquera exactement pourquoi la création du jeton a échoué. Stripe garantit que ce message d'erreur convient à l'affichage, mais il n'est pas commenté. Attendez-vous à voir des chaînes telles que "date d'expiration non valide" ou "CVC incorrect" plutôt que des phrases complètes.

Si, par contre, tout est validé et que Stripe a créé un jeton, nous sommes prêts à le remettre à notre script côté serveur et à placer la charge. Dans le code ci-dessus, nous utilisons la fonction Ajax de jQuery pour le faire. Nous transmettons le jeton ainsi que certaines informations que nous pourrions vouloir enregistrer dans une base de données: le nom du client et son adresse électronique. Enfin, nous devons savoir combien d’argent doit être chargé pour charger la carte. Nous supposons 20,00 $ aujourd'hui, mais vous transmettriez une valeur calculée à partir de votre panier, etc. Nous jettons toutes ces informations dans un objet JSON et passons l'appel Ajax à notre script côté serveur, "pay.php" ( que nous allons créer ci-dessous). Ensuite, nous examinons simplement la réponse et présentons à l'utilisateur un message de réussite ou d'erreur. Vous devez évidemment personnaliser ce code pour l'adapter à la conception de votre site..


Étape 5: Créer un script côté serveur

La seule chose qui reste à faire est de créer le script PHP côté serveur qui déclenche la charge sur la carte de notre client. Premièrement, nous aurons besoin de la bibliothèque PHP de Stripe. Pour le télécharger, allez sur le site web de Stripe, cliquez sur le lien "Documentation" en haut à droite, puis choisissez la section "Bibliothèques API". (Ou vous pouvez y aller directement en cliquant ici.) Faites défiler la page jusqu'à la section PHP, qui ressemble à ceci:

Téléchargez la dernière version et décompressez-la. Vous verrez deux éléments: "Stripe.php" et un dossier nommé "Stripe" qui contient un tas d'autres fichiers PHP. Déposez ces deux éléments dans le dossier de votre site Web.

Créez maintenant un nouveau fichier appelé "pay.php". Nous allons commencer à coder ce fichier avec quelques éléments de base:

  1, 'errorMessage' => $ message); echo json_encode ($ a);  // Facturation par carte de crédit require_once ('Stripe.php'); // change ce chemin où que vous soyez dans la bibliothèque PHP Stripe! $ trialAPIKey = "oRU5rYklVzp94Ab0RbBTP0soVdlaEtvm"; // Ce sont les clés SECRET! $ liveAPIKey = "4BYrmtvwLb8iiiq9KIdbnRh5KCeSfPsX"; Stripe :: setApiKey ($ trialAPIKey); // Basculer entre les environnements en direct et les environnements de test // Obtenir toutes les valeurs du formulaire $ token = $ _POST ['stripeToken']; $ email = $ _POST ['email']; $ firstName = $ _POST ['firstName']; $ lastName = $ _POST ['lastName']; $ price = $ _POST ['price']; $ priceInCents = $ price * 100; // Stripe exige que le montant soit exprimé en cents

En haut, nous avons une fonction simple que nous appellerons chaque fois que notre script rencontrera une erreur. Il retourne un objet JSON avec deux éléments: "result" et "errorMessage". Cet objet JSON est renvoyé à "buy-controller.js" (où nous avons utilisé la fonction AJAX de jQuery pour appeler ce script côté serveur). Là, nous pouvons inspecter la valeur de "résultat" pour voir ce qui s'est passé. Si c'est 0, le script de paiement s'est terminé avec succès. Si c'est 1, le script rencontre une erreur et nous pouvons utiliser l'élément "errorMessage" pour signaler ce qui est arrivé à l'utilisateur.

Ensuite, nous apportons la bibliothèque PHP de Stripe que nous avons téléchargée plus tôt. Il n'y a rien de trop compliqué ici; Assurez-vous simplement de mettre à jour le chemin dans l'instruction require vers l'emplacement relatif de la bibliothèque PHP Stripe. Après cela, nous avons nos deux SECRET Clés API. Nous appelons la fonction "setApiKey" (qui fait partie de la bibliothèque PHP de Stripe) et lui passons notre clé d'essai. Combinée à la clé "publiable" que nous avons définie précédemment, Stripe dispose désormais de toutes les informations nécessaires pour vérifier notre identité et associer cette transaction à notre compte. Bien sûr, lorsque nous mettons le site Web en direct, nous changerions cette déclaration pour utiliser $ liveAPIKey!

Avertissement: n'oubliez pas de passer aux clés de l'API LIVE lorsque vous publiez votre site! Vous devez activer la clé "publiable" dans l'élément HEAD de "buy.php" et la clé "secrète", qui apparaît dans "pay.php", ci-dessus..

Et finalement, nous récupérons toutes les données que nous avons transmises de l'appel AJAX dans "buy-controller.js". Notez que Stripe exige que nous spécifions le montant de la charge en cents. Ici, nous avons passé la valeur en dollars, nous avons donc multiplié par 100 pour la convertir en cents.

Charge réellement la carte

Voici le reste du code pour pay.php:

 try // Nous devons avoir toutes ces informations pour continuer. S'il manque, rechigne. if (! isset ($ token)) émet une nouvelle exception ("Erreur de site Web: le jeton Stripe n'a pas été généré correctement ou transmis au script du gestionnaire de paiement. Votre carte de crédit n'a PAS été débitée. Veuillez signaler ce problème au webmaster."); if (! isset ($ email)) génère une nouvelle exception ("Erreur de site Web: l'adresse électronique était NULL dans le script du gestionnaire de paiement. Votre carte de crédit n'a PAS été débitée. Veuillez signaler ce problème au webmaster."); if (! isset ($ firstName)) émet une nouvelle exception ("Erreur de site Web: FirstName était NULL dans le script du gestionnaire de paiement. Votre carte de crédit n'a PAS été débitée. Veuillez signaler ce problème au webmaster."); if (! isset ($ lastName)) génère une nouvelle exception ("Erreur de site Web: LastName était NULL dans le script du gestionnaire de paiement. Votre carte de crédit n'a PAS été débitée. Veuillez signaler ce problème au webmaster."); if (! isset ($ priceInCents)) émet une nouvelle exception ("Erreur de site Web: le prix était NULL dans le script du gestionnaire de paiement. Votre carte de crédit n'a PAS été débitée. Veuillez signaler ce problème au webmaster."); essayez // créer la charge sur les serveurs de Stripe. CECI CHARGE LA CARTE! $ charge = Stripe_Charge :: create (array ("amount" => $ priceInCents, "currency" => "usd", "card" => jeton, "description" => $ email)); // Si aucune exception n'a été levée, l'accusation a réussi! // Vous pouvez ici enregistrer les informations de l'utilisateur dans une base de données, envoyer un accusé de réception, par courrier électronique, etc. // Renvoyer le code de résultat «0» et les autres informations souhaitées. // Ceci est accessible au gestionnaire de retour d'appel jQuery Ajax dans "buy-controller.js" $ array = array ('result' => 0, 'email' => $ email, 'price' => $ price, ' message '=>' Merci, votre transaction a réussi! '); echo json_encode ($ array);  catch (Stripe_Error $ e) // La charge a échoué pour une raison quelconque. Le message de Stripe va expliquer pourquoi. $ message = $ e-> getMessage (); returnErrorWithMessage ($ message);  catch (Exception $ e) // Une ou plusieurs variables étaient NULL $ message = $ e-> getMessage (); returnErrorWithMessage ($ message); ?>

Étonnamment simple, non? Tout d'abord, nous vérifions qu'aucune de nos variables n'est nulle. Bien que nous n'ayons pas besoin de tous les utilisateurs pour charger la carte, nous pouvons enregistrer ces informations dans une base de données ou les utiliser pour envoyer un reçu au client par courrier électronique. Nous ne souhaitons donc pas procéder si elle n'est pas disponible..

Ensuite, on utilise le "Stripe_Charge :: create ()"méthode, qui fait partie de la bibliothèque PHP Stripe. Il s’agit de la ligne qui charge réellement la carte de l’utilisateur (ou tente de le faire, de toute façon). Les deux premiers éléments du tableau sont explicites. Le troisième," carte ", est où nous transmettons le jeton que nous avons demandé précédemment à Stripe. Le quatrième élément, "description", est d’une importance capitale. Ce que nous verrons ici correspond à ce que NOUS verrons lorsque nous nous connecterons à Stripe et que nous afficherons nos transactions. Vous devez choisir un raccourci client ayant passé cette commande. Une adresse e-mail est votre meilleur choix, car de nombreux clients peuvent porter le même nom..

Pourquoi la charge peut-elle échouer à ce stade??

Si nous pouvions obtenir un jeton avec succès auprès de Stripe, pourquoi la charge échouerait-elle à ce stade? La réponse est que la validation effectuée précédemment par Stripe vérifiait uniquement que les données de la carte de crédit étaient bien formées; il n'a pas effectué de transaction via les réseaux de cartes de crédit. Il se peut que la carte du client dépasse sa limite. Ou, s'il s'agit d'une carte de débit, il se peut que le compte du client ne contienne pas assez d'argent pour couvrir cet achat. Il se peut également que la société émettrice de cartes de crédit signale simplement que la transaction est inhabituelle et requiert l’approbation du client pour la laisser passer (cela m’est arrivé avec les titulaires de cartes American Express). Dans de telles situations, la carte sera validée correctement lorsque nous demanderons un jeton, mais échouera lorsque nous tenterons de le facturer. Heureusement, Stripe facilite grandement la gestion de ces échecs. Nous utilisons simplement des blocs try / catch, comme vous voyez ci-dessus.

Charger la carte en dernier!

Si ce client est moi, vous êtes battu par un cactus.

Si votre site Web doit faire certaines choses, telles que générer un numéro de série pour une licence de logiciel, vous devez le faire AVANT de charger la carte du client. Si vous chargez d'abord la carte et que votre site échoue à générer une série pour une raison quelconque, votre client sera coché. (Si ce client est moi, vous êtes battu par un cactus.) Ils peuvent même appeler leur compagnie de carte de crédit pour annuler les frais, ce qui entraîne des frais de 15 $ et la perte d'une vente. Alors, jouez la sécurité: assurez-vous que tout est prêt avant de facturer le client!

C'est tout! C'est tout le code dont vous avez besoin pour charger une carte de crédit sur votre site web. La suite de l'article couvre quelques détails supplémentaires sur l'utilisation de Stripe que vous pourriez trouver utiles:


Tester et déboguer

Lorsque nous utilisons les clés d'API "test", nous pouvons utiliser des numéros de carte de crédit spéciaux qui obligent Stripe à renvoyer un certain type de réponse afin de pouvoir tester notre code de manière approfondie. Voici les numéros spéciaux:

  • 4242-4242-4242-4242: Simuler une transaction par carte réussie
  • 4000-0000-0000-0002: Forcer une réponse "carte refusée"
  • 4242-4242-4242-4241: Force une réponse "numéro de carte invalide"

En mode test, tout numéro CVC à 3 ou 4 chiffres est considéré comme valide. Toute date d'expiration future est valide. Vous pouvez transmettre un numéro CVC à deux chiffres pour tester ce cas d'erreur. De même, vous pouvez passer n'importe quelle date dans le passé pour tester la réponse à la date d'expiration non valide. Enfin, si vous souhaitez tester la réponse "montant non valide", indiquez simplement un nombre non entier (tel que 1,35) comme montant à facturer..

Pour des informations exhaustives sur les tests de Stripe, vous pouvez visiter leur page de documentation.


Abonnements, stockage des informations de carte et plus

Stripe vous permet d'effectuer plus de frais ponctuels sur la carte d'un client. Vous pouvez configurer un abonnement qui facturera à la carte un montant spécifié à un intervalle de votre choix. Les API dont vous avez besoin pour faire cela font partie de la bibliothèque PHP de Stripe et le site Web contient une excellente documentation qui vous guidera tout au long du processus..

Que faire si vous souhaitez stocker des informations de carte de crédit afin que les clients ne soient pas obligés de les saisir chaque fois qu'ils visitent votre site? Stripe vous permet de le faire aussi! Vous créez simplement un objet "client" de la même manière que nous avons créé un jeton. Cet objet contient toutes les données sensibles relatives à un client particulier. Stripe stockera ces informations de manière sécurisée à leur extrémité (ce qui signifie que vous n’aurez pas à risquer de vous faire battre par un cactus) et vous pourrez facturer l’utilisateur à tout moment en demandant simplement l’objet "client" approprié, comme nous le faisions avec le jeton. Encore une f