Payez en ligne simplement avec Stripe
Je ne publierai plus rien sur ce blog. Un nouveau blog existe maintenant. Il se nomme Hardly Smart.
Vous pourrez y retrouver des astuces plus larges sur l'informatique ainsi que mes anciens billets de blog.
Je vous souhaite une bonne lecture sur Hardly Smart.
La dernière fois que j'ai programmé un site de vente en ligne, j'ai dû utiliser Paypal car le client ne voulait pas utiliser le système de sa banque. Vous allez dire que c'est cool car l'API de Paypal est simple. Le seul souci c'est que pour payer on est forcément redirigé vers leur site Internet. Et bien grâce à Stripe vous pourrez créer votre propre page de paiement avec vos petits doigts.
Stripe est donc un système de paiement en ligne un peu comme Paypal car il intègre un système de porte-monnaie en ligne. Mais pas seulement, vous pouvez aussi gérer des coupons de réductions, des abonnements et en plus super simplement et sans devoir allez sur le site de Stripe pour les gérer.
La documentation de l'API est très bien écrite et super simple. Vous pouvez l'utiliser en :
- CURL
- Ruby
- Python
- PHP
- Java
- NodeJS
Pour ma part de vais utiliser la version PHP.
Installation
Pour l'installation rien de plus simple, soit vous utilisez composer, soit comme moi (car je suis sur un mutualisé), vous faites tout à la main. Rendez-vous sur leur github, clonez le dépôt et faites un petit require :
require_once("/path/to/stripe-php/lib/Stripe.php");
Créer un achat
Je considère que vous créé votre page de paiement avec votre certificat SSL (car sinon je n'irai jamais payer sur votre site). Si vous souhaitez tester des cartes bleues : https://stripe.com/docs/testing
Voici comment créer facilement votre premier paiement :
Stripe::setApiKey('VOTRE_CLE_API_STRIPE'); $myCard = array( 'number' => '4242424242424242', 'exp_month' => 5, 'exp_year' => 2015, 'cvc' => '123' ); $charge = Stripe_Charge::create(array('card' => $myCard, 'amount' => 2000, 'currency' => 'eur')); echo $charge;
La clé API vous la trouvez votre dashboard. number, le numéro de carte, exp_month, le mois d'expiration de la date et exp_year, l'année d'expiration de la date et cvc, le cryptograme de la carte. La valeur retournée est du JSON et structurée comme ceci :
{ "id": "ch_14TxMy2eZvKYlo2CUIIvVb9Z", "object": "charge", "created": 1408634456, "livemode": false, "paid": true, "amount": 1000, "currency": "usd", "refunded": false, "card": { "id": "card_14TxMw2eZvKYlo2CtHUYQP6J", "object": "card", "last4": "4242", "brand": "Visa", "funding": "credit", "exp_month": 5, "exp_year": 2015, "fingerprint": "Xt5EWLLDS7FJjR1c", "country": "US", "name": null, "address_line1": null, "address_line2": null, "address_city": null, "address_state": null, "address_zip": null, "address_country": null, "cvc_check": "pass", "address_line1_check": null, "address_zip_check": null, "customer": "cus_4dDo4VEnSTnOLu" }, "captured": true, "refunds": { "object": "list", "total_count": 0, "has_more": false, "url": "/v1/charges/ch_14TxMy2eZvKYlo2CUIIvVb9Z/refunds", "data": [ ] }, "balance_transaction": "txn_14RYFK2eZvKYlo2CPhRVrMFQ", "failure_message": null, "failure_code": null, "amount_refunded": 0, "customer": "cus_4dDo4VEnSTnOLu", "invoice": null, "description": "1000 Test Coins", "dispute": null, "metadata": { "division_profile_id": "Bingo|www|0c1234567890", "offer_id": "test_offer_id", "cobra_app_id": "393048167382719" }, "statement_description": null, "receipt_email": null }
On y retrouve un id, qui correspond à l'identifiant unique du paiement, created, le timestramp du paiement, paid, si le paiement est réussi ou non, amount, le prix en centimes, card, les données de la carte bancaire que je vous conseille de sauvegarder, et c'est sans risque pour la personne car vous n'avez que les 4 derniers chiffres sur les 16 de sa carte ...
Remboursement d'un achat
La création des remboursements se déroule presque pareil :
$ch = Stripe_Charge::retrieve("NUMERO_DE_TRANSACTION"); $re = $ch->refunds->create(); echo $re;
Le numéro de la transaction est le numéro qui a été donné plus haut. Pensez donc à le sauvegarder. La valeur de retour est encore du JSON :
{ "id": "ch_14TxMy2eZvKYlo2CUIIvVb9Z", "object": "charge", "created": 1408634456, "livemode": false, "paid": true, "amount": 1000, "currency": "usd", "refunded": true, "card": { "id": "card_14TxMw2eZvKYlo2CtHUYQP6J", "object": "card", "last4": "4242", "brand": "Visa", "funding": "credit", "exp_month": 5, "exp_year": 2015, "fingerprint": "Xt5EWLLDS7FJjR1c", "country": "US", "name": null, "address_line1": null, "address_line2": null, "address_city": null, "address_state": null, "address_zip": null, "address_country": null, "cvc_check": "pass", "address_line1_check": null, "address_zip_check": null, "customer": "cus_4dDo4VEnSTnOLu" }, "captured": true, "refunds": { "object": "list", "total_count": 0, "has_more": false, "url": "/v1/charges/ch_14TxMy2eZvKYlo2CUIIvVb9Z/refunds", "data": [ { "id": "re_4dDpFxqEDLVlWW", "amount": 1000, "currency": "usd", "created": 1408634512, "object": "refund", "balance_transaction": "txn_4dDp5mQgp22BuT", "metadata": { }, "charge": "ch_4dDpJRBKEbfzoy" } ] }, "balance_transaction": "txn_14RYFK2eZvKYlo2CPhRVrMFQ", "failure_message": null, "failure_code": null, "amount_refunded": 1000, "customer": "cus_4dDo4VEnSTnOLu", "invoice": null, "description": "1000 Test Coins", "dispute": null, "metadata": { "division_profile_id": "Bingo|www|0c1234567890", "offer_id": "test_offer_id", "cobra_app_id": "393048167382719" }, "statement_description": null, "receipt_email": null }
On y retrouve les mêmes infos que plus haut mais cette fois refunded est passé à true.
Création d'un coupon
La création d'un coupon est elle aussi très simple :
Stripe_Coupon::create(array( "percent_off" => 25, "duration" => "repeating", "duration_in_months" => 3, "id" => "25OFF") );
percent_off, le pourcentage de réduction, duration, indique le si coupon est valable pour une durée déterminée, duration_in_months, indique combien de temps il peut être utilisé, et id, ce que doit rentrer l'utilisateur pour avoir la réduction.
Le retour est comme d'habitude du JSON.
Conclusion
J'ai volontairement survolé la doc dans ce petit tuto, mais si vous avez un anglais pas trop nul (si j'ai pu comprendre vous devriez pouvoir) vous arriverez à faire ce que vous souhaitez.
Ce système est très complet, simple et permet vraiment de créer son propre site de e-commerce très facilement et sans se soucier du système mit en place par les banques.
Il faut juste savoir que pour le moment le système est en beta en France, car seulement certains cartes sont accéptés (VISA, MasterCard et American Express).
Au niveau de la commission c'est 2,9% + 0.30€ / paiement.
Articles liés
Les commentaires ont été désactivés.
8 commentaires
Cela est peut être normal car j'ai juste dit : /path/to/stripe-php/lib/Stripe.php
car ce dossier veut juste dire qu'il faut juste mettre ton chemin à toi Path To Stripe PHP Lib
Bonjour,
a t-on besoin d'un contrat VAD ?
merci.
Un contrat de VAD avec qui ?
Bonjour,
Merci pour ce tuto très utile. Par contre je rencontre un problme :Fatal error: Class 'Stripe\Charge' not found in.....
Savez-vous d'où ça vient?
Cordialement
Salut,
De rien.
Pour ce qui est de ton problème, le mieux est d'aller directement poser ta question sur le Github de Stripe : https://github.com/stripe/stripe-php
"Pour l'installation rien de plus simple, soit vous utilisez composer, soit comme moi (car je suis sur un mutualisé), vous faites tout à la main."
Merci vieux pour ton explication sur la manip pour une install à la mano, moi aussi j'ai er le pb du mutualisé ;)
Bonjour,
Merci pour se tutoriel mais je suis bloquer. J'aimerais suite au paiement vérifier que celui ci est un succès mais je ne trouve pas la solution. Aujourd'hui sur les moyens de paiement type tpe virtuel on fourni à la banque un lien retour pour nous renvoyer l'état du paiement la je ne comprend pas le fonctionnement pouvez vous m'aider me donner un exemple de script php.
Bonjour,
Très bon tuto, mais incomplet à mon avis.
j'ai suivi ton lien en téléchangeant la librairie mais je n'ai pas la même direction des fichiers. require_once("/path/to/stripe-php/lib/Stripe.php"
Je veux plus de détails.
Merci d'avance