Vous êtes ici : Nicolas Augé . com » Web » Intégration du paiement PayPal

Intégration du paiement PayPal

Jan 8 2013

PayPal comme moyen de paiement

PayPal est un moyen de paiement comme un autre et est de plus en plus utilisé au sein des sites web.

Les raisons sont multiples :

  • une adresse E-mail et un mot de passe pour payer,
  • la sensation de haute sécurisation des données bancaires,
  • la facilité d’intégration pour les développeurs,
  • la possibilité de payer et de vendre.

Bref, PayPal est un moyen de paiement qui offre véritablement une alternative aux moyens classiques par Carte Bancaire.

Moi ce qui m’a intéressé dans ce moyen et ce pour quoi j’ai fait le choix de l’utiliser, c’est l’intégration relativement facile à effectuer car nul besoin de signer un éventuel contrat avec une banque et ensuite d’attendre que tout le package d’installation nous soit envoyé par E-mail.

C’est instantané, vous ouvrez un compte, vous utilisez l’interface « SandBox » mis à disposition pour effectuer tous vos tests avant de passer en production et une fois que tout est opérationnel vous switchez l’interface en mode production et c’est parti ! C’est aussi simple que ça.

Bien sûr, il y a d’autres moyens de paiement comme PayBox par exemple qui a lui aussi ses avantages mais je reste pour le moment accro à PayPal pour les raisons évoquées ci-dessus.

Voyons maintenant comment mettre en oeuvre l’intégration de PayPal sur votre ou vos sites et surtout les spécificités à connaitre avant de se lancer.
 

L’intégration pour un unique site

Pour une intégration concernant un seul site, la méthode est simple : il suffit d’accéder à votre compte PayPal et d’aller dans les options adéquates.

Pour cela, une fois connecté à votre compte, il faut aller sur « Préférences » puis cliquer sur « Plus d’options ». Ensuite, il faut cliquer sur « Mes ventes ».

     

  • Le paramétrage du lien retour automatique
  • Image du renvoi automatique PayPal

    Image du renvoi automatique PayPal


    Dans l’encart « Vendre en ligne », il faut mettre à jour la ligne concernant les préférences de site marchand en choisissant « Oui » pour le renvoi automatique pour les paiements sur site marchand.

    Et enfin, saisir l’URL de renvoi vers la page destinée à définir que le paiement s’est bien déroulé comme l’image ci-contre.

    Voici ce que donne mon visuel concernant un paiement effectué avec succès : message de paiement effectué PayPal.
     

  • Le paramétrage de l’IPN
  • Image du paramétrage IPN PayPal

    Image du paramétrage IPN PayPal


    Dans l’encart « Vendre en ligne », il faut mettre à jour la ligne concernant les notifications instantanées de paiement (IPN) en cliquant sur le bouton « Choisir les paramètres IPN ».

    Ensuite, saisir l’URL de notification qui s’occupera d’insérer les données du paiement, de choisir de recevoir les messages IPN (activé) et enfin d’enregistrer comme l’image ci-contre.

Le paramétrage est finalisé et votre intégration du paiement PayPal effectif.
 

L’intégration multisite

Pour une intégration sur plusieurs sites, nul besoin d’effectuer le paramétrage ci-dessus.

Tout se situe au niveau du script du formulaire PayPal.

Voici le début du code que j’utilise sur la plupart de mes sites :

<form method="post" action="https://www.paypal.com/cgi-bin/webscr">
<input type="hidden" value="_s-xclick" name="cmd">
<input type="hidden" value="1" name="custom">
<input type="hidden" value="http://www.example.com/ipn-paypal.php" name="notify_url">
<input type="hidden" value="http://www.example.com/page_retour.php" name="return">
</form>

Comme vous pouvez le constater à la ligne 4 et 5, il y a 2 lignes concernant le lien de l’IPN (notify_url) et le lien du retour automatique (return).

Il suffit donc de les ajouter au formulaire en saisissant les bonnes URL comme nous l’avons vu auparavant, rien de plus MAIS également d’activer le paramétrage de l’IPN au sein du back office comme dans le cas d’un site unique !

A noter que le « notify_url » utilisé au sein du formulaire est prioritaire par rapport à celui qui est saisi au sein du back office, vous pouvez donc mettre n’importe quelle URL au sein du back office, le but étant que l’IPN soit activé.

Enfin, vous aurez également besoin de récupérer les notifications instantanées de paiement (IPN) de PayPal grâce au fichier que j’ai appelé « ipn-paypal.php ».

Pour éviter de vous obliger à chercher sur un moteur de recherche comment coder ce fichier, voici un extrait du mien :

<?php

// STEP 1: Read POST data
 
// reading posted data from directly from $_POST causes serialization 
// issues with array data in POST
// reading raw POST data from input stream instead. 
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
  $keyval = explode ('=', $keyval);
  if (count($keyval) == 2)
     $myPost[$keyval[0]] = urldecode($keyval[1]);
}
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($myPost as $key => $value) {
     $value = urlencode(stripslashes($value));
     $req.= "&$key=$value";
}
 
 
// STEP 2: Post IPN data back to paypal to validate
 
$ch = curl_init('https://www.paypal.com/cgi-bin/webscr');
//$ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
 
// In wamp like environments that do not come bundled with root authority certificates,
// please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path 
// of the certificate as shown below.
// curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
if( !($res = curl_exec($ch)) ) {
    // error_log("Got " . curl_error($ch) . " when processing IPN data");
    curl_close($ch);
    exit;
}
curl_close($ch);
 
 
// STEP 3: Inspect IPN validation result and act accordingly
 
if (strcmp ($res, "VERIFIED") == 0) {
    // check whether the payment_status is Completed
    if($_POST['payment_status'] == "Completed")
    {
	    // check that receiver_email is your Primary PayPal email
	    if($_POST['receiver_email'] == "mon-email-paypal@example.com")
	    {
		// check that payment_amount/payment_currency are correct
		// process payment
			 
		// assign posted variables to local variables
		$item_name = $_POST['item_name'];
		$item_number = $_POST['item_number'];
		$payment_status = $_POST['payment_status'];
		$payment_amount = $_POST['mc_gross'];
		$payment_currency = $_POST['mc_currency'];
		$txn_id = $_POST['txn_id'];
		$receiver_email = $_POST['receiver_email'];
		$payer_email = $_POST['payer_email'];
		$custom = $_POST['custom'];
		$nbcredits = $_POST['option_selection1'];
	    }
    }
} else if (strcmp ($res, "INVALID") == 0) {
    // log for manual investigation
}
?>

Remarque : comme vous pouvez le constater à la ligne 70, j’ai utilisé la variable « custom » pour sauvegarder l’identifiant du payeur.

La ligne 71, quant à elle, concerne le nombre de crédits choisi grâce à une liste déroulante au sein du formulaire PayPal.

Attention, ce code en l’état ne sera pas suffisant, il vous faudra l’adapter en fonction de vos besoins.

MAJ du 23/01/2013 : Après avoir testé, cette méthode ne semble pas fonctionner avec un compte Business.
MAJ du 31/01/2013 : J’ai finalement trouvé d’où venait le dysfonctionnement avec un compte Business. Il est obligatoire d’activer l’IPN au sein du back office même si le système du « notify_url » est utilisé !
 

Conclusion

Je trouve l’intégration PayPal multisite bien pratique car j’ai plusieurs sites qui utilisent exactement le même système de paiement, je n’ai donc qu’à ré-utiliser le même code sur chacun de mes sites et le tour est joué.

Bref, le tout est de savoir que ça existe et que ça fonctionne très simplement au final.

Si cet article a pu vous y aider ou si vous souhaitez tout simplement ajouter quelque chose, n’hésitez pas à commenter ! 😉
 

Lectures complémentaires

Voici les articles à ce sujet chez les autres :

Cet article vous a plu ? Partagez-le !