Tutoriel PayPlug : intégration au panier d'achat

Tutoriel PayPlug : intégration au panier d'achat

Je suis reparti une nouvelle fois dans les tutoriels, ça me change grandement des articles sur le SEO qui me paraissent bien moins enrichissants que le développement. Les habitués de ce blog ont sans doute lu mon tutoriel Paypal.

Présentation de PayPlug

Si j'ai choisi la solution PayPlug, c'est parce que Littlebuzz, pour qui je développe un CMS sur mesure, m'a demandé de trouver un système de paiement par carte bancaire sans avoir à souscrire un contrat VAD auprès de sa banque. Il propose déjà Paypal à ses clients mais il a constaté que certains d'entre eux étaient réfractaires à l'idée de payer chez ce fournisseur.

Donc PayPlug offre un net avantage par rapport à système de VAD bancaire. La bonne nouvelle concerne le montant des frais par transaction. Celui-ci est de 2,5%. C'est moins cher que Paypal. La première étape consiste à ouvrir un compte chez PayPlug : https://www.payplug.fr/inscription

Allez, je ne vous fait pas attendre plus longtemps. Voici donc le tutoriel pour intégrer PayPlug sur votre site. Nous allons partir du principe que vous avez développé un panier.

Récupération de la classe PHP

PayPlug propose une classe PHP que vous pouvez télécharger sur le site. Vous noterez que la doc en dessous est tout en anglais. Sympa pour une société française. :-) De plus, des plugins sont disponibles pour Prestashop, Magentoo ou Woo Commerce.

Vous déposez les fichiers du dossier lib-payplug/ sur votre serveur. Gardez-bien la hiérarchie des dossiers présents dans l'archive.

Vous êtes prêts ? Ouvrez le fichier de connexion.php où vous avez indiqué les identifiants de votre base de données. Cela devrait ressembler à ça :

<?php
// Ouverture de la session
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

// Connexion a la BDD 
$sql = new PDO('mysql:host=localhost;dbname=nom_de_la_base;charset=utf8', 'utilisateur', 'mot_de_passe');

En dessous, ajoutez les identifiants de votre compte Payplug (ceux que vous avez renseigné à l'ouverture du compte) :

// Identifiant PayPlug
$email_payplug = "email";
$mdp_payplug = "mot_de_passe";
$token_pp = "token_a_recuperer_dans_votre_compte_payplug";

Dans votre panier, une fois que le choix du mode de paiement a été effectué, créez un bouton :

<form method="post" action="http://www.mon-site.com/paiement.php">
<input name="payer" value="Payer" type="submit">
</form>

Nous allons donc créer une page paiement.php comme suit et je vous explique 3/4 subtilités ensuite :

<?php
// Connexion a la BDD
require("connexion.php");

// Enregistrement de la commande (facultatif mais conseille)
$req = "INSERT INTO...

// Construction des infos à envoyer à Payplug
require_once("votre_dossier_payplug/init.php"); use Payplug as PP; PayplugPayplug::setSecretKey($token_pp); $payment = PayplugPayment::create(array( 'amount' => intval(number_format($_SESSION['montant'], 2, '', ''), 'currency' => 'EUR', 'save_card' => false, 'customer' => array( 'email' => $_SESSION['email'], 'first_name' => $_SESSION['prenom'], 'last_name' => $_SESSION['nom'] ), 'hosted_payment' => array( 'return_url' => '/http://www.mon-site.com/commande-terminee.php', 'cancel_url' => '/http://www.mon-site.com/panier.php' ) )); $paymentUrl = $payment->hosted_payment->payment_url; header("Location: ".$paymentUrl); exit(); ?>

Comme indiqué plus haut, il y a 3/4 choses à savoir :

  • Le montant envoyé à PayPlug doit être sans centimes. Pour 4.90, il faut envoyer 490. D'où l'utilisation de la fonction number_format pour formater le montant.
  • Les champs montant et currency sont obligatoires. Il existe d'autres champs dont vous trouverez la liste sur la doc
  • Le champ returnUrl permet d'afficher un lien "Retour vers le site marchand" une fois que la personne a payé. S'il est facultatif dans la doc, je vous conseille fortement de l'indiquer.

Nous allons maintenant créer le fichier controle.php qui va nous permettre de finaliser la commande et envoyer les e-mails aux clients. Quand je parle de finaliser la commande, je vous conseille d'enregistrer la commande avant que le client ne paye. Il peut oublier de cliquer sur le lien de retour. :)

<?php
// Connexion a la BDD
require("connexion.php");

// Finalisation de la commande (notamment le statut) $req = "UPDATE ... // Envoi du mail $message = "Montant : ".$_SESSION['montant']; $message.= "Client : ".$_SESSION['prenom']." ".$_SESSION['nom']; $message.= "Email : ".$_SESSION['email']; mail('votre-email', 'Paiement Payplug', $message); ?>

Toutes les informations indiquées dans le premier mail peuvent bien sur être sauvegardées en BDD. Vous avez les infos, faites travailler un peu votre cerveau. ;)

Si vous avez bien suivi les infos, vous devriez obtenir ce bel écran :

Interface de paiement PayPlug

Maintenant que ce tutoriel est terminé, je vais distribuer les bonnes et les mauvaises notes.

Les mauvaises notes :

  • L'absence de retour automatique sur le site marchand
  • L'absence d'une plateforme de test qui oblige à payer avec sa CB et annuler ensuite les paiements (Edit : plateforme de test disponible)

Les bonnes notes :

  • Installation super simple à effectuer
  • Frais de transaction honorables (Edit : à priori, ils ont bien augmenté)
  • Aucun frais supplémentaire pour transférer le solde de son compte
  • Envoi d'une demande de paiement par mail ou par SMS
  • Pas de contrat VAD à souscrire auprès de sa banque (arrachage de cheveux en perspective)
  • Un support au top qui répond à toutes les questions et décroche le téléphone quand nécessaire pour vous appeler (coucou OVH ^^)

Voici une vidéo de présentation du service PayPlug :

Si vous avez apprécié ce tutoriel ou si vous avez des questions, laissez-moi un message. Ça fait toujours plaisir. ;)

Catégorie Tutoriels - Écrit par le 19/05/2016 - Article lu 17 693 fois - 29 commentaires

29 réflexions sur ce billet

Écrit par Brandon du site http://www.bsa-web.fr
Le 28/05/2014 à 10h55

Merci pour le tuto ! Ça peut toujours servir pour de l'intégration.

Je confirme en tout cas le support est tous simplement MAGIQUE ! Réponse direct etc.. Pour ceux qui souhaitent l'installer sur du Prestashop il y'a un module de dispo sur leur site :)

Écrit par Julien du site http://www.soref.fr/
Le 28/05/2014 à 11h34

Merci beaucoup pour ce tuto, qui couplé avec celui sur Paypal me permet de tester avant de choisir une solution de paiement en ligne pour une boutique. Dommage que Payplug ne propose pas de sandbox, car c'est quand même une plaie d'annuler a posteriori tous les tests d'achats.

Hello,

Effectivement pour avoir intégré leur solution sur l'un de mes projets je confirme que cela est assez simple (ce genre d'intégration était une première pour moi).

Tu ne parles pas du tout de la prise en compte de l'IPN dans ton tuto ... pas utilisé ? Quand même bien utile de connaitre le statut du paiement au moment de traiter la commande sans avoir à aller dans l'interface PayPlug, non ?

Vous savez quoi ? Ils sont aussi sympa en vrai qu'au téléphone :)

J'ai eu l'occasion de rencontrer une personne de chez eux et ils sont super ouverts aux projets proposés et pour ceux qui ne le savent pas (je ne sais pas s'ils le disent sur leur site) mais ils ont une offre "partenaire" pour ceux qui souhaitent mettre en avant leur service.

Écrit par Xavier
Le 28/05/2014 à 17h52

Bon en fait je n'ai rien dis ... je suis passé trop vite sur cette histoire d'IPN, c'est le fait que tu l'envoi dans un mail qui m'a "perturbé" ^^

Écrit par Geoffrey du site http://www.codeclic.com/
Le 28/05/2014 à 20h03

Bonjour,

Je pense que je connais la réponse mais on ne sait jamais. Est-il possible de faire des paiements récurrents (abonnements) avec cette solution ?

Merci d'avance,

Geoffrey

Écrit par Hervé
Le 29/05/2014 à 17h29

Brandon : tu me connais, ce sont les solutions maisons qui m'intéressent. :)

Julien : d'accord avec toi pour la sandbox. D'autant plus que j'ai bloqué ma CB lors des tests suite à de trop nombreux paiements.

Xavier : ça t'apprendre à commenter l'article sans réellement le lire. :-)

Geoffrey : ce n'est pas proposé en natif, mais ce n'est pas très compliqué à coder. ;)

Écrit par Xavier
Le 29/05/2014 à 18h23

@Geoffrey

Pour en avoir discuté avec quelqu'un de chez eux, ce n'est pas disponible pour le moment mais ça devrait arriver car ils ont beaucoup de demandes dans ce sens. A voir donc dans les mois à venir.

Écrit par Geoffrey
Le 30/05/2014 à 18h11

Bonjour,

Merci pour votre réponse.

Pour l'instant je continue à utiliser mon contrat VAD à la société générale + le prestataire de paiement "Payzen" (sans faire de pub c'est une super boîte, très à l'écoute !).

C'est beaucoup plus lourd à mettre en place mais c'était le seul moyen que j'avais trouvé à l'époque pour mettre en place des paiements récurrents.

A+
Geoffrey

Écrit par Jeff
Le 02/06/2014 à 11h19

Bonjour

Tout d'abord je voudrais vous remercier pour votre tutoriel simple et précis, mais je n'ai pas réussis

Déjà lorsqu'on décompresse la lib, on a bien un dossier "payplug" avec 5 fichiers dont Payplug.php (3 ko) mais dans le dossier "lib" on a aussi un fichier Payplug.php mais qui fait 1 ko

Je ne sais pas pourquoi il y en a 2, mais j'ai essayé avec les 2 et ça ne fonctionne toujours pas

Je n'ai pas fais la partie nip vu que mon problème arrive avant

Pour le 1er fichier payplug.php, j'ai le message d'erreur suivant :

"Fatal error: Class 'Parameters' not found in .../httpdocs/votre_dossier_payplug/Payplug.php on line 70"

Et pour le 2ème fichier :

Warning: require_once(.../votre_dossier_payplug/payplug/IPN.php) [function.require-once]: failed to open stream: No such file or directory in .../votre_dossier_payplug/Payplug.php on line 55

Fatal error: require_once() [function.require]: Failed opening required '.../votre_dossier_payplug/payplug/IPN.php' (include_path='.:') in .../votre_dossier_payplug/Payplug.php on line 55

Pour essayer de capter l'erreur, j'ai gardé dans mon fichier php que :

$email_payplug = "";
$mdp_payplug = "";

// Appel des fichiers PayPlug
require_once("votre_dossier_payplug/payplug.php");
Payplug::setConfigFromFile("votre_dossier_payplug/parameters.json");

(bien sur j'ai mis mon mail et mon mot de passe et les noms des dossiers correspondent)

Voilà je suis déçu ne n'avoir pas réussi :(

Qu'en pensez vous ?

Merci d'avance

Écrit par Hervé
Le 02/06/2014 à 12h08

Jeff : le message est clair : les chemins sont incorrects en ligne 55. Il ne faut pas recopier le tutoriel, il faut l'adapter à votre site.

Commence par vérifier les chemins. Je doute que les fichiers aient été déposés dans 'votre_dossier_payplug/payplug/'

Écrit par Jeff
Le 02/06/2014 à 17h08

Bonjour

J'ai enfin réussi à passer à une étape, malheureusement, je ne suis pas parvenu à arriver jusqu'au bout :(

J'ai eu un problème au début car j'ai mal interpréter :

"Vous déposez les fichiers du dossier lib/payplug/ sur votre serveur."

Loin de moi l'idée de vous critiquer, mais je vous proposerais de mettre plutôt :

"Vous déposez les fichiers du dossier lib/ sur votre serveur." : ce qui inclurait le fichier payplug.php ainsi que le dossier payplug avec les 5 fichiers

Aussi dans votre script vous avez mis :

// Creation du fichier json
Payplug::setConfigFromFile("parameters.json");

Ce n'est pas une erreur bien sur, mais le fichier json étant créé (par votre script) dans le répertoire "votre_dossier_payplug" autant donc mettre :

Payplug::setConfigFromFile("votre_dossier_payplugparameters.json");

Ou alors mentionner de déplacer le fichier json pour le mettre dans le même répertoire que notre fichier payment.php

Cela n'engage que moi, si vous trouvez que c'est assez explicite veuillez ne pas en tenir compte.

Fin de la parenthèse, je passe à mon problème :(

Mon message d'erreur est :

Fatal error: Uncaught exception 'MalformedURLException' with message '

Écrit par Hervé
Le 02/06/2014 à 22h57

Jeff : il manquait un petit quelque chose. C'est corrigé.

Écrit par Guillaume
Le 24/06/2014 à 14h17

Bonjour, merci pour ce tuto mais pour moi cela ne fonctionne pas, j'obtiens une page blanche ...

Pour mon test je pars d'une page de paiement ou l'utilisateur entre son nom, prenom, email, le montant est fixe (cotisation d'association). J'envoi tout cela en Post à la page paiement.php mais elle est blanche, pas de page de paiement de payplug ...

Une idée d’où proviens le problème ? J'ai pourtant bien suivi le tuto et remplacé tout ce qu'il fallait remplacer ...

J'obtenais aussi une erreur lié a la présence de "

Écrit par Hervé
Le 24/06/2014 à 14h23

Bonjour Guillaume

Dans le fichier paiement.php, as-tu du code HTML avant le code PHP ?

Écrit par Guillaume
Le 25/06/2014 à 09h56

Non, j'ai testé sans html du tout dans la page et avec du html après mon appel php mais rien. La seule chose que j'ai fait, c'est d'appeler une session :

session_start() ;

Et déclarer mes variables POST

$_SESSION['email'] = $_POST['email'];
$_SESSION['nom'] = $_POST['lastName'];
$_SESSION['prenom'] = $_POST['firstName'];

Écrit par Hervé
Le 25/06/2014 à 11h55

Guillaume

Répondu par mail. :-)

Écrit par Guillaume
Le 25/06/2014 à 12h06

Erreur toute bête, un espace avant la balise php. Cela m'a permis de constater que les sessions fonctionnent parfaitement avec payplug.

Merci Hervé pour ton aide ;-)

Écrit par Picsou
Le 09/12/2014 à 09h24

Bonjour,

Je cherche et recherche sur internet mais ne trouve pas vraiment de réponse à mes questions, alors au vu de ce tuto qui m'a l'air plutôt complet, peut-être saurez-vous m'aider :-)

J'utilise Website X5 pour la création de mon site internet, et mon problème est donc pour y intégrer Payplug...

D'après le logiciel il faudrait un code HTML pour introduire le bouton "payer maintenant".
N'étant pas un programmeur je suis un peu perdu là....
Le support Payplug me redirige vers la bibliothèque PHP, mais est-ce bien du PHP qu'il faut dans un premier temps?

Enfin bref, je ne sais pas trop comment le formuler mais si quelqu'un avait une solution ce serais EXTRA ! :-).

Je vous remercie d'avance !

Écrit par Nawfal FARES
Le 06/04/2015 à 12h05

Bonjour, je suis un freelance et je possède une web application où je souhaite intégrer ce système de payement en PHP pour que l'utilisateur effectue son abonnement à mon site régulièrement. Est-ce que c'est possible ?

Merci de me répondre.

Écrit par Hervé
Le 06/04/2015 à 12h33

@Nawfal : pour le coup, je n'ai aucune idée sur la possibilité d'intégrer Payplug à une application web sans voir le code. Le mieux est de te renseigner auprès du support Payplug.

Écrit par djbabou971
Le 28/04/2015 à 15h57

Bonjour a tous.

Nouvel utilisateur de Payplug, en essayant d'intégrer le script, j'ai une page blanche. J'ai bien sûr vérifié que je n'ai pas d'erreur.

Quelqu'un saurait-il à quoi cela est dû ?
Merci d'avance

Écrit par Frank
Le 15/01/2016 à 16h22

Bonjour,

Je viens de débarquer sur votre blog, j'utilise le lecteur de CB d'orange Pro, car je n'avais rien trouvé comme autre moyen Français pour me satisfaire comme sum up ou izettle et autre en paiement CB.

Je trouve que Payplug à l'air sympa comme système, mais quand je lis je ne comprends rien et il me parait très informatiquement éloigné de moi pour le mettre en place.

J'en ai besoin surtout pour me faire payer en ligne par le biais de mon site internet de loin et non dans mon bureau. Mais si je comprends bien cela pourrait faire les deux et remplacer finalement aussi mon lecteur CB.

Y a t'il une notice claire en Français ? Et pour les nuls comme moi ?

Frank

Écrit par Hervé
Le 16/01/2016 à 09h03

Bonjour Frank

Payplug est très intéressant pour éviter de souscrire un contrat VAD auprès de sa banque. Mais tout avantage a son inconvénient, il faut l'intégrer sur un site Internet et il est nécessaire d'avoir des connaissances pour le faire.

Écrit par Dge-06
Le 08/02/2018 à 15h59

Bonjour,

Merci pour ce tuto intéressant.

J'ai réussi à l'intégrer sans problème, mais j'ai quand même un petit problème.

Je souhaiterais récupérer des variables personnalisées (en post).

Quelqu'un a une solution ?

J'ai vu qu'n get c’était possible, mais le problème est que tout le monde peut voir les paramètres dans l'url, hors je ne veux pas que ça apparaisse.

J'ai essayé avec un urlencode, mais payplug ne se déclenche pas. Il faut que l'url soit claire. Donc je suis un peu bloqué :/

Merci :)

Écrit par Hervé
Le 08/02/2018 à 16h18

Ce que tu peux faire, c'est mettre les infos en session (le montant, l'email, etc.) et accéder à la page paiement.php via une url rewritée du genre paiement-1.html (le 1 étant une information que tu choisis comme par exemple un id de commande ou un token unique). N'oublies pas d'indiquer cette valeur dans l'URL de post de ton formulaire (donc créer la valeur avant le post).

C'est sur cette page que tu construis l'URL contenant les infos à envoyer à Payplug à partir du post du chiffre 1 (à modifier bien sur et qui doit être unique).

Écrit par Dge-06
Le 08/02/2018 à 16h27

Merci Hervé.

La solution que tu me propose est un GET déguisé :p

Ce que je recherche, c'est vraiment en post ou en session afin d'avoir une url du genre : http://www.monsite.com/confirmation

Surtout que c'est un site qui va avoir un fort trafic et il risque d'y avoir des petits malins qui vont chercher les failles :)

Écrit par Hervé
Le 08/02/2018 à 16h31

Ton site est en HTTPS ? Si oui, aucune donnée ne sera en clair. ;)

Le mieux, c'est de créer une page avant la confirmation qui va enregistrer les infos en BDD du genre monsite.com/retour-payplug-1.html. Si le traitement est OK, tu renvois vers ta page confirmation.

Écrit par Dge-06
Le 08/02/2018 à 16h36

Non, le site est en http (pour le moment).

Le problème est que même si je mets les infos dans la BDD, une fois que je reviens sur la page de confirmation, comment j'arrive à lier la transaction qui vient de se passer avec les infos enregistrées dans la BDD.

C'est chiant Payplug, en fait tu ne peux rien récupérer.

Écrit par Hervé
Le 08/02/2018 à 16h39

Tu crées un token unique par commande que tu stockes dans la BDD. Au retour, tu interroges la base via ce token qui est présent dans l'URL. Voilà ta liaison est faite.

PS : passes vite en HTTPS. ;)

Écrire un commentaire

Pseudo

E-mail (non publié)

Votre commentaire

Recevoir une notification par e-mail lorsqu'une réponse est postée

Veuillez recopier le code de sécurité : psv8ur9sy9

Haut de page