Craftyx Blog

Accepter des paiements sur votre site en moins de 5 minutes avec Laravel et Stripe

Accepter des paiements sur votre site en moins de 5 minutes avec Laravel et Stripe

Que ce soit pour votre boutique en ligne ou pour votre startup, avoir la possibilité de mettre à disposition des utilisateurs un formulaire de paiement est essentiel. Plusieurs solutions s'offrent à vous : les solutions proposées par votre banques, souvent basée sur la solution SIPS d'ATOS en France, et les solutions en ligne type Stripe, Paypal, Braintree...

J'ai eu l'occasion de mettre en place récemment deux de ces solutions :

  • La solution Merc@net de la BNP Paribas, basé sur SIPS, est plutôt compliqué à mettre en oeuvre : elle requiert d'installer un exécutable sur votre machine, puis d'utiliser cet exécutable - dans notre cas en PHP - pour chiffrer/déchiffrer les requêtes entre votre serveur et les serveurs de la banque. Mettre en place une telle solution requiert d'avoir bien sûr l'accord de la banque, le processus de mise en production est un peu hasardeux, dans le sens où nous n'avons aucun contrôle fort. Il s'agit d'une demande à faire par email... Un vrai sentiment de 1995 se dégage de ce genre d'expérience !
  • La solution Stripe, qui pour le coup est largement plus facile et accessible, tout est basé sur une API REST, donc très simple à utiliser, de plus il existe déjà un grand nombres de packages pour l'utiliser facilement.

Prérequis : une installation de Laravel 5.1 valide. La démonstration sera basée sur une installation fraiche.

Qu'est-ce que Stripe

Stripe est une société qui permet aux particuliers et aux entreprises d'accepter des paiements en ligne. Toutes les interactions avec Stripe se font via une API REST, mais il existe des packages pour presque tous les langages et framework qui offrent une couche d'abstraction. Nous allons pour notre part utiliser le package Stripe Laravel de Cartalyst, qui est une intégration pour Laravel de leur package Stripe

Mais pour commencer, je vous invite à vous rendre sur le site de stripe afin de créer un compte. Stripe propose un mode TEST aussi complet que le mode PROD, qui vous permet de tester sans aucune crainte toutes les fonctionnalitées offertes !

Nous reviendrons plus tard sur l'interface de stripe afin de récuperer nos clés d'API.

Préparons notre projet

La première chose que nous allons faire est d'ajouter le package Stripe Laravel de Cartalyst à notre projet en tappant dans notre terminal composer require "cartalyst/stripe-laravel:~2.0".

Après que le package soit installé, comme pour tous les packages Laravel, ouvrez le fichier de configuration config/app.php et ajoutez les lignes suivantes.

Dans le tableau $providers ajoutez le service provider : Cartalyst\Stripe\Laravel\StripeServiceProvider::class, dans le tableau $aliases ajoutez la ligne : 'Stripe' => Cartalyst\Stripe\Laravel\Facades\Stripe::class

Nous en avons presque terminé avec la configuration ! La dernière chose à faire est de mettre à jour la config stripe dans le fichier config/services.php. Vous trouverez vos clés d'API sur la page suivante : https://dashboard.stripe.com/account/apikeys. Veillez à bien récupérer vos clés pour le mode Test et non Prod !. key correspond à la clé publishable de Stripe, et secret correspond à la clé secret, vous l'aurez surement deviné. Vous pouvez ignorer le champ model, qui n'est utile que si vous utilisez Laravel Cashier.

Le formulaire de paiement

Nous allons maintenant créer un formulaire de paiement afin de tester tout cela. Pour cela, je vais ajouter une route de démo sur /pay qui affichera un formulaire de paiement.

Puis la vue associée, avec bootstrap

Voici quelques informations de test que vous pouvez utiliser sur le formulaire :

  • Nom : qu'importe
  • N° de carte : 4242424242424242 (plus de cartes ici : https://stripe.com/docs/testing#cards )
  • CVC : 123
  • Date expiration : qu'importe, dans le futur
  • Montant : Soyez fou :)

Voyons maintenant comment gérer la réception du formulaire, et terminer le processus de paiement.

Réception du formulaire et appel à Stripe

C'est maintenant que les choses intéressantes commencent ! Nous allons créer la route pour recevoir notre formulaire et utiliser l'API Charges de Stripe pour créer notre paiement. Je vous laisse regarder la page suivante afin d'appréhender plus facilement le code à venir : https://cartalyst.com/manual/stripe/1.0#charges.

Nous considérons dans cette démonstration que l'utilisateur ne fait aucune erreur, et que sa carte est forcement valide... bien sûr, sur vos projets, Never trust any input !

Vous ne revez pas, en une ligne (un peu étendue pour plus de lisibilité), vous avons réaliser notre paiement ! Nous avons utilisé directement l'entrée de l'utilisateur pour remplir l'ensemble des données (à l'exception de la devise), le montant pourrait provenir d'un panier par exemple. Vous remarquez qu'en utilisant cette méthode, nous n'enregistrons pas du tout les informations bancaires de l'utilisateur, ce qui est très rassurant dans le sens où nous n'avons pas à gérer la sécurité de ces données très sensibles.

Quelques petites notes concernant le code : J'injecte dans cette démonstration les objets Request ainsi que Stripe grace à la fonctionnalité d'autowiring (résolution automatique de dépendance lors de l'appel d'une fonction) de Laravel, vous pourriez tout aussi bien utiliser les façaces Request:: et Stripe:: respectivement.

En retour de la fonction create(), vous recevez un objet qui correspond à un objet charge de Stripe. Un champ important ici est status qui devrait être à succeeded pour confirmer que tout c'est bien déroulé. Vous pourriez aussi vouloir vous assurer que le montant est bien le bon.

Si vous vous rendez sur votre interface Stripe, vous pourrez observer le paiement qui a eu lieu !

Un monde d'opportunité s'offre à vous !

Il est possible également possible avec Stripe de créer des customers, de leurs associer des cartes bancaires afin de faire du paiement "rapide", mais également de gérer des abonnements et paiements récurrents, que j'ai eu l'occasion de mettre en oeuvre sur le projet Helpyway, et gérer des codes promos et des remboursements !

Le code source de la démo est disponible sur github : https://github.com/JulienTant/demo-laravel-stripe

Julien Tant

Julien Tant, expertise en développement PHP sur le framework Laravel, j'aide les startup à mettre en place des systèmes de paiement et d'abonnement efficaces et en un temps record. Vous recherchez un expert dans la mise en place de système de paiement ? A

Contactez moi

Julien Tant Par