Comment accepter les paiements avec stripe

Le traitement des cartes de crédit est malheureusement beaucoup plus difficile que nous pourrions l'espérer, en tant que développeurs. Étant donné que la tâche est si commune, est-il vraiment nécessaire de franchir d'innombrables obstacles (entourés par le feu, bien entendu) dans le seul but de traiter un paiement? Des marchands? Des passerelles? SSL? Sécurité? Très rapidement, une opération apparemment simple peut devenir une tâche extrêmement déroutante et, plus important encore, dangereuse. Chaque fois que vous manipulez des données sensibles d'un utilisateur, vous ferez mieux de rester sur vos gardes..

Stripe traduit une opération compliquée, déroutante et dangereuse en un simple appel d'API.

Ce ne serait pas étonnant s'il y avait un service qui rendait ce processus aussi facile que possible? Un service construit par les développeurs pour les développeurs. Quelle pensée! Entrez Stripe; pas de comptes marchands, pas de passerelles. Un appel API, accompagné de quelques consignes de sécurité, est tout ce dont vous avez besoin pour commencer à accepter les paiements par carte de crédit dès aujourd'hui..

Bien que Stripe ne soit pas gratuit, ils ne demandent que 2,9% de chaque charge (plus .30 cents). C'est tout. Pas de frais d'installation, de stockage, de coûts cachés, rien de tout cela. Seulement 2,9%. Pas mal!


Caractéristiques de la bande 5 touches

  1. Simple: Le traitement manuel des cartes de crédit est difficile et dangereux. Avec Stripe, le faire est un jeu d'enfant! Vous pouvez même traiter les frais à partir de la ligne de commande!
  2. Pas cher: Divers marchands de paiement sont notoires pour leurs frais cachés. Stripe vous indique dès le départ exactement ce que vous pouvez vous attendre à payer: 2,9% par charge + 30 cents. Pas de frais d'installation. Pas de frais cachés. Pas de frais de stockage de carte.
  3. API intuitive: L'API de Stripe est propre, reposante et facile à utiliser.
  4. Utilisé par Cool Kids: Si l'adoption est une préoccupation, ce n'est pas nécessaire. De nombreux services exploitent Stripe, notamment Reddit, Grooveshark et Shopify..
  5. Construit par les développeurs: Très clairement, Stripe a été conçu pour gratter les démangeaisons des développeurs. L'équipe est pleine de développeurs et d'entrepreneurs, tout comme vous.

Faisons cela

Vendu? Moi aussi. Traitons notre premier paiement test. Bien sûr, avant de commencer, visitez stripe.com, créer un nouveau compte (gratuit) et remplir les différents formulaires, tels que le descripteur de relevé et vos informations bancaires.

L'attention de Stripe sur l'élégance s'étend à son département de design.

Charger un utilisateur nécessite deux étapes principales:

  1. Récupère les informations de carte de crédit de l'utilisateur et envoie une requête AJAX au serveur de Stripe, qui retournera un jeton unique représentant ces données sécurisées..
  2. En utilisant la langue de votre choix côté serveur (PHP pour cet article), créez une nouvelle charge Stripe, en passant par le jeton unique..

Construire un formulaire de paiement

Naturellement, la première étape consiste à créer un formulaire de paiement pour votre produit. Vous avez deux options: utiliser Stripe's check-out script, qui créera automatiquement le formulaire, validera la saisie de l'utilisateur et générera le jeton unique pour les données de carte de crédit de l'utilisateur. Dans les situations où la configuration et le style sont flexibles, c'est un excellent chemin à prendre. Insérez une balise de script, ainsi qu'une poignée d'attributs HTML5 personnalisés, et vous avez terminé.!

 
Stripe offre un formulaire intégrable qui accélère encore le processus d’acceptation des paiements..

Cependant, dans la plupart des situations, vous aurez besoin d'un contrôle total. En tant que tel, pour les besoins de cet article, nous utiliserons un formulaire personnalisé. Dans cette section, nous accomplirons trois choses:

  1. Utilisez un formulaire pour collecter les informations de carte de crédit de l'utilisateur
  2. Convertir ces données en un jeton à usage unique unique
  3. Soumettez le formulaire au serveur, avec le jeton

Un formulaire de paiement de base pourrait ressembler à:

 

Notez que nous n’avons pas besoin de beaucoup d’informations pour traiter une carte de crédit. Techniquement, la seule information requise par Stripe est un numéro de carte de crédit et sa date d'expiration. Cependant, en règle générale, plus vous obtiendrez d'informations de l'utilisateur, mieux ce sera. Si les frais sont contestés, ces informations supplémentaires vous seront utiles. Autrement dit, plus vous demandez d'informations, plus il est probable que le véritable propriétaire de la carte de crédit effectue la transaction. La clé est de trouver la ligne entre assez et tellement que l'utilisateur ne se donne pas la peine de remplir le formulaire. Demander au minimum le nom de l'utilisateur, son adresse électronique, le numéro de sa carte de crédit, sa date d'expiration et son numéro CVC.

Pour continuer à analyser en profondeur, n'autorisez jamais les données sensibles des cartes de crédit à toucher votre serveur. Cela risquerait de créer un monde de blessures, s'il est mal effectué. Au lieu de cela, prenez la route facile: assurez-vous que le contributions pour les données de carte de crédit de l'utilisateur ne contiennent pas prénom les attributs. En omettant cet attribut, les données ne peuvent pas être publiées sur votre serveur..

Portez une attention particulière aux attributs personnalisés sur les entrées, tels que bande de données = "nombre". Stripe propose un plugin, stripe.js, qui aide au processus de compilation des données fournies par l'utilisateur et de génération du jeton. Stripe va rechercher ces attributs et récupérer leurs valeurs respectives.

Faire usage de stripe.js, référencez le script dans votre projet et définissez votre clé publiable, qui vous sera fournie lors de votre inscription à Stripe. Nous utiliserons également jQuery dans cet article, bien que ce ne soit certainement pas nécessaire.

   

Penser à setPublishableKey comme moyen d’identifier votre site Web lors de la communication avec Stripe. Lors de votre inscription, vous recevrez deux versions différentes de cette clé, respectivement pour les tests et la production..

Ensuite, nous devons créer le jeton unique à usage unique pour les données de carte de crédit de l'utilisateur. Nous pouvons utiliser le Bande objet, fourni par le script que nous avons importé, à cette fin. Mieux encore, nous n'avons pas à nous soucier de la sérialisation des données du formulaire de paiement; il suffit de passer à travers le formulaire jQuery, et Stripe se chargera du reste.

 // Event Listeners $ ('# payment-form'). On ('submit', generateToken); var generateToken = function (e) var form = $ (this); // Pas d'appuyer plusieurs fois sur le bouton acheter maintenant form.find ('button'). Prop ('disabled', true); // Crée le jeton, basé sur l'objet de formulaire Stripe.create (form, stripeResponseHandler); // Empêche le formulaire de soumettre e.preventDefault (); ; var stripeResponseHandler = fonction (statut, réponse) ;

Avec ce bit de JavaScript, lors de la soumission du formulaire de paiement, Stripe tentera de générer un jeton à usage unique, en utilisant les données connexes des entrées comprenant: Bande- attributs personnalisés spécifiques. Le deuxième argument à la créer méthode est un rappel qui recevra le jeton (response.id) du serveur de Stripe, et procédez en conséquence.

Dans ce rappel, il est important de vérifier le résultat (toutes les informations ont été fournies correctement), insérer le jeton dans un contribution, et envoyez le formulaire sur votre serveur. Encore une fois, notez que les informations de carte de crédit ne doivent pas toucher votre serveur, mais uniquement les données de jeton et les données non sensibles. Ceci est important, alors écrivez les tests d'acceptation ou fonctionnels pour le vérifier.

Votre rappel pourrait ressembler à ceci:

 var stripeResponseHandler = fonction (statut, réponse) var form = $ ('# payment-form'); // Des erreurs de validation? if (response.error) // Montre à l'utilisateur ce qu'il a fait de mal form.find ('. payment-errors'). text (response.error.message); // Rendre la soumission cliquable à nouveau form.find ('button'). Prop ('disabled', false);  else // Sinon, nous sommes prêts à partir! Soumettez le formulaire. // Insère le jeton unique sous la forme $ ('', ' type ':' caché ',' nom ':' stripeToken ',' valeur ': response.id). appendTo (formulaire); // Appelez la méthode de soumission native sur le formulaire // pour que la soumission ne soit pas annulée form.get (0) .submit (); ;

C'est vraiment très simple! Soumettez une requête AJAX à l'API de Stripe (à l'aide de son plugin JavaScript utile), récupérez le jeton généré, insérez-le dans le formulaire et postez-le sur votre serveur.!

Charge

Si vous suivez, à ce stade, vous avez généré avec succès un jeton à usage unique et soumis le formulaire de paiement. Maintenant, il est temps que votre langue de choix côté serveur crée physiquement la charge. Rappelez-vous, dans la section précédente, aucun frais n'a été facturé. Nous avons uniquement généré un jeton représentant les données de la carte de crédit..

Stripe propose un certain nombre de bibliothèques côté serveur pour enregistrer de nouveaux frais, voire organiser des abonnements. Il y a de fortes chances que votre langue préférée soit représentée (PHP, Ruby, Python, etc.).

Semblable à la section précédente, la présentation d'une nouvelle accusation peut être accomplie en quelques étapes:

  1. Déclarez votre clé API
  2. À l'aide de la bibliothèque Stripe, passez un appel API en passant par les détails de la transaction.
  3. Valider les frais et procéder en conséquence.

Reportez-vous à la page Library de Stripe pour les instructions d'installation. Si vous utilisez PHP, comme nous le verrons dans cet article, il est recommandé d'utiliser Composer pour télécharger le package Stripe..

 "require": "stripe / stripe-php": "dev-master"

Composer est le futur de la gestion des dépendances PHP, alors n'hésitez plus, si ce n'est déjà fait. Une charge de base Stripe pourrait prendre la forme de:

 // Définit votre clé d'API Stripe :: setApiKey ("VOTRE CLÉ D'API"); try Stripe_Charge :: create (['amount' => 2000, // ceci est en cents: 20 $ 'devise' => 'usd', 'carte' => $ _POST ['stripeToken'], 'description' => 'Décrivez votre produit']);  catch (Stripe_CardError $ e) // Refusé. Ne traitez pas leur achat. // Revenez en arrière et dites à l'utilisateur d'essayer une nouvelle carte

C'est tout! La clé API vous authentifiera en tant qu'utilisateur Stripe valide. Semblable à la clé publiable, Stripe vous fournira deux versions différentes de cette clé: une pour les tests et la production, respectivement.

Veuillez noter que tous les frais facturés à Stripe doivent être déclarés en cents (en fonction de la devise, bien sûr). Si les prix sont stockés dans votre base de données en dollars, en euros ou en livres, vous devrez compenser en conséquence, lors de la facturation..

Si aucune exception n'est levée, vous pouvez être assuré que la charge a été traitée avec succès. Continuez en offrant à l'utilisateur son téléchargement numérique ou en enregistrant son achat avec votre système..

Croyez-le ou non, le travail de Stripe est terminé. Vous pouvez certainement en faire plus, par exemple créer des clients et gérer des abonnements, mais pour traiter simplement un paiement unique, vous avez terminé!… Sauf que vous n'êtes pas.


SSL

Si, oui, le travail de Stripe est terminé, le vôtre, en revanche, ne l’est pas. Quel que soit le fournisseur de paiement, la sécurité doit être une préoccupation majeure, que vous utilisiez des informations de carte de crédit. Nous avons déjà pris les mesures nécessaires en veillant à ce que les données de carte de crédit ne touchent jamais le serveur, mais il reste encore beaucoup à faire. Nous devons ensuite sécuriser la connexion de l'utilisateur à votre serveur. En d'autres termes, vous avez besoin d'un certificat SSL. En aucun cas vous ne devez sauter cette étape!

«SSL (Secure Sockets Layer) est la technologie de sécurité standard utilisée pour établir un lien crypté entre un serveur Web et un navigateur. Ce lien garantit que toutes les données transmises entre le serveur Web et les navigateurs restent privées et intégrales. ”- info.ssl.com

Lorsqu'un utilisateur offre à un site Web ses informations de carte de crédit, il s'attend à voir https dans la barre d'adresse. Heureusement, l'achat d'un certificat SSL est beaucoup plus simple qu'auparavant. En fait, la plupart des hôtes proposent un add-on SSL, qui transforme tout le processus en un seul clic. Il en va de même pour diverses options SaaS, telles que Pagoda Box ou Heroku..

Pointe: Une fois que vous avez activé le protocole SSL, il est possible que des images et des ressources se brisent. Pour résoudre ce problème, assurez-vous que toutes les URL utilisent https, plutôt que http. Ou, comme meilleure solution, utilisez des URL relatives au protocole..

  Foo Bar  Foo Bar

Avec cette technique, popularisée par Paul Irish, si la page actuelle utilise HTTPS, l'actif sera également demandé avec HTTPS..

En supposant que votre hôte propose un add-on SSL en un clic, il vous suffit de diriger votre utilisateur vers le https: // version de la page de commande, et vous êtes prêt à partir!


Trucs et astuces

Les exemples de cet article sont simples et principalement procéduraux. Il y a toutefois de fortes chances que vous travailliez avec une infrastructure prenant en charge plusieurs environnements, installations de routage et de test. Suivez les conseils ci-dessous pour intégrer Stripe au cadre de votre choix..

1. Numéros de carte de crédit spéciaux

De toute évidence, vous ne voulez pas utiliser de vrais numéros de carte de crédit pour tester vos formulaires de paiement! Heureusement, Stripe a déjà pensé à cela. ils incluent un certain nombre de numéros de cartes de crédit simulant des réponses spécifiques, telles que la facturation réussie, un numéro invalide, un code CVC incorrect, etc..

Voici quelques numéros de cartes auxquels vous vous référerez fréquemment:

  • Visa approuvé: 4242424242424242
  • Mastercard approuvé: 5555555555554444
  • Carte refusée: 4000000000000002
  • Numéro incorrect: 4242424242424241

2. Utilisez judicieusement les environnements

Lorsque vous travaillez avec Stripe, vous disposez de deux clés uniques, qui représentent l'API et les clés publiables. En outre, il existe des variantes de test et de production pour chacune d’elles. La plupart des frameworks offrent un moyen de gérer plusieurs environnements. De cette façon, pour le développement, votre application utilisera correctement les clés de test, tandis qu'une fois déployées, les versions de production seront référencées..

Vous trouverez ci-dessous un projet spécifique à Laravel. Laravel fournit un système d'environnement simple. Ajoutez un fichier de configuration dans un dossier qui correspond au nom de l’environnement, et ces valeurs prendront le dessus sur les valeurs par défaut..

Tout d'abord, nous définissons les clés de production:

  'PRODUCTION API KEY', 'publishableKey' => 'PRODUCTION PUBLISHABLE KEY'];

Et pour le développement, nous substituons les clés de production à leurs homologues de test:

  'TEST API KEY', 'publishableKey' => 'TEST PUBLISHABLE KEY'];

Maintenant, lorsque l’application requiert la clé API, utilisez Config :: get ('stripe.apiKey'), la valeur renvoyée sera déterminée par l'environnement. Succès!

3. Ne câblez pas votre application à la bande

Les développeurs débutants commettent souvent une erreur en liant leurs applications à divers fournisseurs, tels que Stripe. Votre application ne doit pas se soucier du fournisseur de facturation utilisé. Cela ne concerne que le fait qu'il y en a un de disponible. En codant en dur les références à Stripe dans vos classes, vous créez un lien direct entre les deux - un lien qui sera probablement difficile à modifier.

Posez-vous la question suivante: «Si, à l'avenir, je dois échanger Stripe avec un fournisseur différent, ce sera difficile?» Conseil: quelque chose de plus grand que «juste un moment"Est une odeur de code.

Au lieu de cela, codez sur une interface - peut-être BillingProvider ou BillingGateway. De cette façon, vous pouvez créer différentes implémentations de l'interface: une pour Stripe, ou une pour un service entièrement différent, le cas échéant. Ces différentes implémentations hébergeront la fonctionnalité spécifique au service. Si, à un moment donné, vous trouvez un fournisseur de facturation moins cher que Stripe, remplacez la mise en oeuvre de Stripe. BillingProvider avec un ServiceX la version ne prendra que quelques instants - c’est-à-dire, une fois que vous avez créé la nouvelle implémentation qui interroge le ServiceX API de facturation.

Voici un squelette pour voir à quoi cela pourrait ressembler:

 // Définit l'interface d'interface BillingProvider public function charge ($ creditInfo);  // Crée une classe d'implémentation de Stripe StripeBilling charge de la fonction publique ($ creditInfo) // Stripe_Charge :: charge (…);  // Créer une classe d'implémentation ServiceX ServiceXBilling charge de la fonction publique ($ creditInfo) // charger l'utilisateur avec ServiceX

Maintenant que nous avons deux implémentations, nous pouvons référencer notre service de facturation préféré actuel, en utilisant l'injection de dépendance..

 class PaymentController protected $ billing; fonction publique __construct (BillingProvider $ billing) $ this-> billing = $ billing; 

Avec ce style de développement, si vous finissez par avoir besoin de vous éloigner de Stripe, vous n'aurez plus besoin de toucher au contrôleur. Parce que Stripe n'est pas codé en dur, il ne sait pas la différence!

4. Ne laissez pas l'acheteur suspendu

Lorsque vous vendez des produits numériques, posez-vous la question suivante: "Que doit faire l'acheteur si quelque chose ne va pas de mon côté?" Donnez-lui toujours le moyen de vous contacter ou de contacter votre entreprise. Que se passe-t-il si l'e-mail de confirmation contenant un lien permettant de télécharger le fichier numérique n'arrive jamais dans la boîte de réception de l'acheteur? Que devraient-ils faire?

Un site de support, ou même une simple adresse e-mail sur la page d'accueil devrait aider dans ces situations inévitables.

5. Certificats SSL

DigiCert est le fournisseur de certificat SSL recommandé par Stripes.

Si vous devez acheter manuellement un certificat SSL, vous avez le choix entre plusieurs services. En vous basant sur votre expérience, vous pouvez vous attendre à consacrer de 30 minutes à une heure à l’installation. N'oubliez pas que la plupart des certificats ne sont pas gratuits et peuvent aller de 10 à 500 USD, en fonction du fournisseur..

L’équipe Stripe recommande DigiCert et Namecheap. Toutefois, si vous préférez, vous pouvez envisager une solution gratuite, telle que StartSSL..

6. Ne comptez pas sur le prix du formulaire

Une erreur fréquente provient de l’utilisation de données de formulaire pour contenir le prix du produit acheté, éventuellement via une entrée masquée. Comme un utilisateur peut facilement modifier la valeur de cette entrée, il est déconseillé d'en dépendre. Toujours chercher le prix du produit du côté serveur. Ne comptez jamais sur le formulaire pour vous le dire. Une requête de base de données simple est l'option préférée.

7. Le fichier numérique ne doit pas être accessible publiquement

Le bien que vous vendez ne devrait jamais être accessible au public, même si l’URL est, à votre avis, assez longue et déroutante au point que la plupart ne l’apprendraient jamais. C'est une mauvaise pratique pour un certain nombre de raisons.

Au lieu de cela, créez un téléchargements table contenant des codes d’achat uniques, ainsi que leurs identifiants de produits associés. De cette façon, quand un URI, tel que / Téléchargements / 23gsfga831g, est demandé, votre candidature:

  1. Vérifier le jeton fourni par rapport à ce qui est stocké dans la table de base de données.
  2. Répondez en proposant un téléchargement pour le fichier associé au jeton d'achat..

Pour aller plus loin, vous pouvez également imposer une limite de téléchargement. Pour cela, il faudrait simplement qu’un nombre_déchargement champ soit ajouté à la achats table. A chaque demande, ce nombre devrait être incrémenté de un. Une fois que ce nombre atteint votre seuil désigné, le téléchargement ne doit plus être fourni. Cela peut être utile dans les cas où vous voulez vous assurer que les liens de téléchargement ne sont pas partagés..


Conclusion

Ce qui est merveilleux avec Stripe, c’est qu’il traduit une opération complexe, déroutante et dangereuse en un simple appel API. Pas de comptes marchands, pas de passerelles, pas de frais cachés. Il y a une raison pour laquelle ils disent que Stripe est ridiculement facile à utiliser. Il est!