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 :
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. ;)
29 réflexions sur ce billet
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 :)
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.
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é" ^^
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
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. ;)
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.
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
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
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/'
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 '
Le 02/06/2014 à 22h57
Jeff : il manquait un petit quelque chose. C'est corrigé.
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 "
Le 24/06/2014 à 14h23
Bonjour Guillaume
Dans le fichier paiement.php, as-tu du code HTML avant le code PHP ?
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'];
Le 25/06/2014 à 11h55
Guillaume
Répondu par mail. :-)
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 ;-)
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 !
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.
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.
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
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
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.
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 :)
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).
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 :)
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.
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.
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. ;)
La création de site Internet sur mesure est le coeur de métier de l'agence web Infini'click.
D'autres prestations sont également proposées, découvrez-les !
- Tutoriel : installer un serveur Debian (wheezy)
- Tutoriel : Installer un certificat SSL
- Piwik : monitorez tous vos sites discrètement
- Tutoriel Paypal : Intégration et configuration du paiement en ligne
- Tutoriel PayPlug : intégration au panier d'achat
- Référencement des images : l'état de l'art
- Des onglets en CSS avec JQuery
- Gildas le 04/03/2022 à 18:00
Nop j'ai que le require('fpdf.php) ; Mais pas... - Hervé le 04/03/2022 à 17:58
Gildas Tu n'appelles pas de fichier externe via un... - Gildas le 04/03/2022 à 17:50
merci de ton retour rapide, effectivement dans ma... - Hervé le 04/03/2022 à 17:45
Bonjour Gildas Effectivement, 8 ans ça fait un bail.... - Gildas le 04/03/2022 à 17:37
Bonjour Hervé, Bon j'arrive 8 ans après la... - Olivier le 16/01/2022 à 23:09
C'est clair que les actions réalisées ne correspondent...