Payez en ligne simplement avec Stripe

Payez en ligne simplement avec Stripe

Tags : API, Android, Java, PHP, Tutoriel, iOS
Catégorie : Programmation
Mise en ligne : 21 Août 2014 à 00:00

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.

<Laisser un commentaire/>

* Champs obligatoire

Sebastien

Posté le 25 Août 2018 à 12:51

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.

Cedric

Posté le 31 Juillet 2018 à 17:21

"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é ;)

BaBeuloula

Posté le 4 Juin 2016 à 02:00

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

HAMDAOUI

Posté le 4 Juin 2016 à 02:00

Bonjour,
Merci pour ce tuto très utile. Par contre je rencontre un problme :Fatal error: Class 'StripeCharge' not found in.....
Savez-vous d'où ça vient?
Cordialement

BaBeuloula

Posté le 13 Mai 2016 à 02:00

Un contrat de VAD avec qui ?

gaborit

Posté le 13 Mai 2016 à 02:00

Bonjour,
a t-on besoin d'un contrat VAD ?

merci.

BaBeuloula

Posté le 29 Mars 2016 à 02:00

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

Melki

Posté le 29 Mars 2016 à 02:00

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