Payez en ligne simplement avec Stripe

Payez en ligne simplement avec Stripe

Tags : API, Android, Java, PHP, Tutorial, 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

BaBeuloula

Posté le 4 Juin 2016 à 00:00

Salut, <br>
<br>
De rien.<br>
Pour ce qui est de ton probl&egrave;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 à 00:00

Bonjour, <br>
Merci pour ce tuto tr&egrave;s utile. Par contre je rencontre un problme :Fatal error: Class 'StripeCharge' not found in.....<br>
Savez-vous d'o&ugrave; &ccedil;a vient?<br>
Cordialement

BaBeuloula

Posté le 13 Mai 2016 à 00:00

Un contrat de VAD avec qui ?

gaborit

Posté le 13 Mai 2016 à 00:00

Bonjour,<br>
a t-on besoin d'un contrat VAD ?<br>
<br>
merci.

BaBeuloula

Posté le 29 Mars 2016 à 00:00

Cela est peut &ecirc;tre normal car j'ai juste dit : /path/to/stripe-php/lib/Stripe.php<br>
car ce dossier veut juste dire qu'il faut juste mettre ton chemin &agrave; toi Path To Stripe PHP Lib

Melki

Posté le 29 Mars 2016 à 00:00

Bonjour,<br>
<br>
Tr&egrave;s bon tuto, mais incomplet &agrave; mon avis.<br>
j'ai suivi ton lien en t&eacute;l&eacute;changeant la librairie mais je n'ai pas la m&ecirc;me direction des fichiers. require_once(&quot;/path/to/stripe-php/lib/Stripe.php&quot;<br>
<br>
Je veux plus de d&eacute;tails.<br>
<br>
Merci d'avance