Intégrer PayPal Express Checkout à son site en PHP

PrimFX Boris ('PrimFX') Le 10 mars 2018

Tests du système et passage en Live

Maintenant que notre système est entièrement intégré sur notre site, ils ne nous reste plus qu'à le tester afin d'être sûr que celui-ci fonctionne correctement et à le passer en live afin de pouvoir réellement recevoir des paiements sur notre compte PayPal ! Car, je vous le rappelle, nous sommes pour l'instant uniquement resté en mode Sandbox nous permettant de faire des tests.

Testons notre système de paiement

Pour tester notre système de paiement PayPal Express Checkout, il nous suffit de vérifier si l'ensemble des opérations que nous avons mises en place précédemment fonctionnent correctement. Nous effectuerons donc un paiement test qui nous permettra de voir si :

  • Le paiement a bien été créé dans la base de données lors du clique sur le bouton (fonction "payment" côté client)
  • Le paiement est ensuite correctement validé dans la base de données après paiement de l'utilisateur sur la fenêtre PayPal ouverte sur son navigateur (fonction "onAuthorize" côté client)

Afin de simplifier tout ça, je vous propose de rajouter des console.log() côté client à différents endroits. Il nous en faudra en réalité principalement 2 : un pour tester la fonction "payment", un autre pour "onAuthorize". Dans les deux cas, nous ferons passer la variable data dans ce console.log(), afin de visualiser dans la console les informations en transit sur notre page (de manière asynchrone). Voici ce que cela donne au niveau du code :

// Code de la fonction "payment"
payment: function() {
  var CREATE_URL = 'php/paypal_create_payment.php';
  return paypal.request.post(CREATE_URL)
    .then(function(data) {
    console.log(data);
    if (data.success) {
      return data.paypal_response.id;
    } else {
      alert(data.msg);
      return false;
    }
  });
}
// Code de la fonction "onAuthorize"
onAuthorize: function(data, actions) {
  var EXECUTE_URL = 'php/paypal_execute_payment.php';
  var data = {
    paymentID: data.paymentID,
    payerID: data.payerID
  };
  return paypal.request.post(EXECUTE_URL, data)
    .then(function (data) {
    console.log(data);
    if (data.success) {
      alert("Paiement approuvé ! Merci !");
    } else {
      alert(data.msg);
    }
  });
}

Je me répète encore une fois, mais il est essentiel de bien avoir compris la chose suivante : la fonction "payment" est celle qui va être appelée dès l'instant où quelqu'un cliquera sur notre bouton de paiement. "onAuthorize" sera ensuite appelée uniquement une fois le paiement autorisé par l'utilisateur !

A présent, voici le test en images de notre processus de paiement, console ouverte bien entendu !

  • On ouvre notre page affichant le bouton de paiement. Dans la console, juste une information de PayPal, rien de spécial à signaler ici.
  • On peut à présent cliquer sur le bouton de paiement. A cet instant, deux choses se passeront : on verra dans la console s'afficher le contenu de notre fameux "data", et on peut vérifier dans notre base de données, le paiement devrait avoir été créé.
  • Si ces deux points précédent se sont déroulés sans erreur, on devrait à présent voir s'afficher la demande d'autorisation de paiement côté client, après s'être connecté, bien entendu, avec le compte client Sandbox que nous avions créé plus tôt (vous savez, celui contenant "-buyer" dans l'adresse email 😉)
  • Enfin, pour terminer, si tout s'est bien passé, on devrait avoir une petite alerte qui s'affiche indiquant "Votre paiement a bien été approuvé !" comme nous l'avions mise en place dans notre fonction "onAuthorize" dans le cas où le paiement a bien réussi. Les informations du nouveau console.log(data), toujours dans "onAuthorize", devraient également s'afficher dans la console (vous remarquerez d'ailleurs l'ID de paiement généré par PayPal qui a transité à la fois dans "payment" où il a été créé puis dans "onAuthorize"). Finalement, le paiement devrait également être passé au statut "approved" dans la base de données. Vérifions tout cela.
  • Voilà, c'est terminé ! Notre système de paiement a bien été testé et est entièrement opérationnel 😀

Et si j'ai un bug / que le paiement ne fonctionne pas correctement ?
Si vous rencontrez le moindre bug et que votre paiement ne fonctionne pas, prenez le temps de reprendre votre code, de vous demander si tout est logique dans la mise en place de celui-ci et s'il n'y a pas d'erreur (une condition manquante, un console.log() ou autre information manquante ou qui traîne dans un endroit inapproprié, un var_dump() en PHP qui viendrait à causer une erreur dans le retour de fonction asynchrone, etc.).
Veillez également à bien identifier, dans un premier temps, d'où est susceptible de venir l'erreur : des informations qui n'apparaissent pas dans la base de données ? Il faut regarder côté serveur. Un bouton de paiement qui ne s'affiche pas ? Ça se passe forcément côté client.
Prenez aussi le temps de lire et d'étudier d'éventuels messages d'erreurs : même PayPal peut vous en faire parvenir à travers la console, dans le cas d'une requête mal formatée par exemple !
Enfin, si vous ne trouvez toujours pas de solution à votre problème, n'hésitez pas à passer demander un peu d'aide sur le forum 😉

Passer en live

Maintenant que notre système de paiement fonctionne correctement en mode Sandbox, il est temps de passer en Live. Et pour cela, rien de plus simple ! Grâce au switch Sandbox / Live disponible dans l'espace développeur PayPal (celui que nous avions découvert dans la partie "Obtenir des Credentials"), il nous suffira de modifier quelques paramètres dans notre code, et le tour est joué !

Après avoir récupéré vos Credentials Live depuis l'espace développeur PayPal, il vous faudra simplement mettre à jour dans votre code les éléments suivants :

  • Modifier les Credentials ("Client ID" et "Secret") dans le fichier "php/paypal_create_payment.php"
  • Modifier les Credentials dans le fichier "php/paypal_execute_payment.php"
  • Modifier dans le code côté client le paramètre env: 'sandbox' par env: 'production'

Et voilà, ce n'était pas plus compliqué, vous pouvez dès à présent recevoir des paiements directement sur votre compte PayPal !


A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃