Paiement en ligne par PayPal
Last updated on Thursday, January 10, 2013
  • Moyen

Free online content available in this course.

Got it!

Intégration dans PHP

Dans ce chapitre, vous allez intégrer dans vos pages web ce que nous venons de voir dans le chapitre précédent.

Je considère que vous connaissez suffisamment PHP pour suivre ce cours. Si vous ne maîtrisez pas bien tout cela, allez d'abord lire le cours PHP de M@teo21 sur cette page.

Utilisation de la fonction cURL

Pour permettre à PHP de se connecter à un site web distant et à récupérer le contenu renvoyé, vous aurez besoin de l'extension php_curl.

Pour ce faire sous Windows, il vous suffit de dé-commenter la ligne : extension=php_curl.dll du fichier php.ini.
Sous Linux ou Mac, je ne sais pas comment s'appelle l'extension, mais en recherchant php_curl dans le fichier de configuration de PHP, vous ne devriez pas avoir de problème pour le retrouver.
Ou depuis WampServer, il vous suffit de vous rendre sur : PHP / Extensions PHP, puis d'activer l'extension php_curl.

Wamp

Passons à l'action

Nous allons commencer par créer une variable contenant l'URL que notre script devra appeler.

Comme certaines données restent les mêmes pour chaque appel de l'API (user, passe, version, etc.), je vous propose de créer une fonction PHP qui va créer votre chaîne de départ. Vous n'aurez plus qu'à y ajouter les paramètres supplémentaires correspondant aux traitements que vous souhaitez effectuer.
Il y a également un autre avantage à cela. Lorsque vous déciderez de mettre en production votre application, vous n'aurez qu'à modifier ce fichier pour que le serveur de production de PayPal soit utilisé, en lieu et place du serveur de la SandBox.

Voici donc un exemple simple de cette fonction
<?php
  function construit_url_paypal()
  {
	$api_paypal = 'https://api-3t.sandbox.paypal.com/nvp?'; // Site de l'API PayPal. On ajoute déjà le ? afin de concaténer directement les paramètres.
	$version = 56.0; // Version de l'API
	
	$user = 'vendeur_1236594550_biz_api1.siteduzero.com'; // Utilisateur API
	$pass = 'SEFYITJFG8QRHN1S'; // Mot de passe API
	$signature = 'ZWg4tSHZZ0GQIK8U6VKGWO1mxrtOAJzAGFNRnFpDWRKX-fv8q5Tuj64n'; // Signature de l'API

	$api_paypal = $api_paypal.'VERSION='.$version.'&USER='.$user.'&PWD='.$pass.'&SIGNATURE='.$signature; // Ajoute tous les paramètres

	return 	$api_paypal; // Renvoie la chaîne contenant tous nos paramètres.
  }
?>

Maintenant enregistrez cette fonction dans un fichier. Nommez-le par exemple fonction_api.php.

Ensuite créez un second fichier qui contiendra votre script principal. À l'intérieur nous allons appeler notre fonction et récupérer le résultat dans une variable.
Et pour finir, vous n'avez plus qu'à y ajouter tous les paramètres permettant de créer le paiement sur le serveur PayPal.

Pour contrôler que votre variable retourne une chaîne correcte, affichez-là à l'écran à l'aide de la fonction echo.

Voici ce que ça nous donne :
<?php
include("fonction_api.php"); // On importe la page créée précédemment
$requete = construit_url_paypal(); // Construit les options de base

// La fonction urlencode permet d'encoder au format URL les espaces, slash, deux points, etc.)
$requete = $requete."&METHOD=SetExpressCheckout".
			"&CANCELURL=".urlencode("http://127.0.0.1/cancel.php").
			"&RETURNURL=".urlencode("http://127.0.0.1/return.php").
			"&AMT=10.0".
			"&CURRENCYCODE=EUR".
			"&DESC=".urlencode("Magnifique oeuvre d'art (que mon fils de 3 ans a peint.)").
			"&LOCALECODE=FR".
			"&HDRIMG=".urlencode("http://www.siteduzero.com/Templates/images/designs/2/logo_sdz_fr.png");

// Affiche la chaîne pour vérifier que la chaîne est bien formatée :
echo $requete;
?>

Afin de vérifier que ça fonctionne, recopiez l'URL qui s'affiche lors de l'exécution de ce script dans la barre d'adresse de votre navigateur pour accéder à cette page.
Vous devriez voir le paramètre : ACK=Success. Si ce n'est pas le cas, c'est que les paramètres de connexion sont faux, ou qu'il y a un paramètre qui n'est pas correct. Consultez les messages d'erreur affichés pour comprendre ce qui n'a pas fonctionné.

Maintenant demandons à PHP d'exécuter cette requête à notre place.
Pour ce faire, il faut utiliser les fonctions curl.

Tout d'abord il faut déclarer une session cURL. Pour faire cela, il vous suffit d'exécuter la commande curl_init, suivi de l'URL à exécuter. Cette fonction retourne une variable de type Session cURL. Il faut donc la récupérer dans une variable que nous appellerons par exemple : $ch.
Dans notre cas l'URL à exécuter est contenue dans la variable $requete. Il faut donc écrire dans notre fichier : $ch = curl_init($requete);

Ensuite nous allons devoir ajouter une option à notre objet cURL afin qu'il ignore le certificat SSL, car la page que nous allons consulter est sécurisée (page https). Sans cela, le script ne fonctionnera pas, et nous retournera une erreur expliquant que le certificat n'a pas pu être vérifié.
Ceci se fait grâce à la fonction curl_setopt. Elle prend 3 paramètres. Notre instance cURL ($ch dans notre cas), l'option à modifier, et la valeur de l'option.
Pour ignorer le certificat SSL, il faudra mettre l'option CURLOPT_SSL_VERIFYPEER à 0.

Ce qui nous donne la fonction suivante : curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

Et enfin, on envoie la requête à l'aide de la fonction curl_exec. Celle-ci retourne true si elle s'est exécutée, et false en cas d'échec.
S'il y a eu un problème, vous pouvez consulter le détail de l'erreur grâce à la fonction curl_error.

Maintenant, remplaçons le echo $resultat par les instructions permettant d'exécuter cette requête.

Ce que cela nous donne
<?php
include("fonction_api.php");
$requete = construit_url_paypal();
$requete = $requete."&METHOD=SetExpressCheckout".
			"&CANCELURL=".urlencode("http://127.0.0.1/cancel.php").
			"&RETURNURL=".urlencode("http://127.0.0.1/return.php").
			"&AMT=10.0".
			"&CURRENCYCODE=EUR".
			"&DESC=".urlencode("Magnifique oeuvre d'art (que mon fils de 3 ans a peint.)").
			"&LOCALECODE=FR".
			"&HDRIMG=".urlencode("http://www.siteduzero.com/Templates/images/designs/2/logo_sdz_fr.png");

// Initialise notre session cURL. On lui donne la requête à exécuter
$ch = curl_init($requete);

// Modifie l'option CURLOPT_SSL_VERIFYPEER afin d'ignorer la vérification du certificat SSL. Si cette option est à 1, une erreur affichera que la vérification du certificat SSL a échoué, et rien ne sera retourné. 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

// On lance l'exécution de la requête URL.
if (curl_exec($ch)) // Si elle s'est exécutée correctement, on affiche "OK"
	{echo "<p>OK !</p>";}
else // S'il y a une erreur, on affiche "Erreur", suivi du détail de l'erreur.
	{echo "<p>Erreur</p><p>".curl_error($ch)."</p>";}

// On ferme notre session cURL.
curl_close($ch);

?>

Quand vous exécutez ce script, vous devriez retrouver la chaîne qui est retournée par PayPal (avec à nouveau le paramètre ACK=Success), suivi du paragraphe OK.
Cependant, nous ne souhaitons pas que le résultat de la requête soit retourné à l'écran, mais qu'il soit contenu dans une variable afin de pouvoir le traiter par la suite.

Pour faire cela, il faut mettre l'option CURLOPT_RETURNTRANSFER à 1, de la même manière que nous avons fait précédemment concernant le certificat SSL.
En procédant ainsi, la valeur retournée par curl_exec ne sera plus à true (1) si l'exécution est effectuée, mais retournera une chaîne contenant la valeur retournée par la page.

Récupérer les paramètres dans un tableau

Je vous propose ensuite de créer un tableau (array) contenant tous les paramètres que nous renvoie PayPal, accompagnés de leurs valeurs (comme l'array $_GET ou $_POST.). C'est plus facile à traiter par la suite.
Pour réussir cela, il nous faudra séparer chaque paramètre (facilement départagé par le signe &).
Pour chacun des paramètres, on construira notre array en affectant le nom comme identifiant, et la valeur... bah comme valeur :-P. Pour reconnaître la valeur du nom, on se servira du mot-clé =.
Tout ceci grâce à la fonction explode, qui permet de récupérer une liste de sous-chaîne à partir d'un séparateur.
Notez que certains caractères contenus dans ces sous-chaînes sont encodés en URL (%##). Afin de convertir ces signes par leurs caractères (: & / = etc.), il faudra utiliser la fonction urldecode.

Pour vérifier que tout a bien été séparé comme il faut, on peut afficher notre array grâce à la fonction print_r

Le code ci-dessous est un peu compliqué, c'est pourquoi j'ai mis un maximum de commentaires afin que vous compreniez bien toutes les étapes.

Une fois codé en PHP, voilà ce que tout ça nous donne
<?php
include("fonction_api.php");
$requete = construit_url_paypal();
$requete = $requete."&METHOD=SetExpressCheckout".
			"&CANCELURL=".urlencode("http://127.0.0.1/cancel.php").
			"&RETURNURL=".urlencode("http://127.0.0.1/return.php").
			"&AMT=10.0".
			"&CURRENCYCODE=EUR".
			"&DESC=".urlencode("Magnifique Oeuvre d'art (que mon fils de 3 ans a peint.)").
			"&LOCALECODE=FR".
			"&HDRIMG=".urlencode("http://www.siteduzero.com/Templates/images/designs/2/logo_sdz_fr.png");

$ch = curl_init($requete);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

// Retourne directement le transfert sous forme de chaîne de la valeur retournée par curl_exec() au lieu de l'afficher directement. 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// On lance l'exécution de la requête URL et on récupère le résultat dans une variable
$resultat_paypal = curl_exec($ch);

// S'il y a une erreur, on affiche "Erreur", suivi du détail de l'erreur.
if (!$resultat_paypal)
	{echo "<p>Erreur</p><p>".curl_error($ch)."</p>";}

else // S'il s'est exécuté correctement, on effectue les traitements...
{
	// On récupère la liste de paramètres, séparés par un 'et' commercial (&)
	$liste_parametres = explode("&",$resultat_paypal);
	// Pour chacun de ces paramètres, on exécute le bloc suivant, en intégrant le paramètre dans la variable $param_paypal
	foreach($liste_parametres as $param_paypal)
	{
		// On récupère le nom du paramètre et sa valeur dans 2 variables différentes. Elles sont séparées par le signe égal (=)
		list($nom, $valeur) = explode("=", $param_paypal);
		// On crée un tableau contenant le nom du paramètre comme identifiant et la valeur comme valeur.
		$liste_param_paypal[$nom]=urldecode($valeur); // Décode toutes les séquences %##  et les remplace par leur valeur. 
	}
		// On affiche le tout pour voir que tout est OK.
		echo "<pre>";
		print_r($liste_param_paypal);
		echo "</pre>";
}

// On ferme notre session cURL.
curl_close($ch);

?>

Prenez votre temps sur le code affiché ci-dessus. Il n'est pas facile, mais super utile pour traiter vos données en toute simplicité par la suite.

Maintenant on arrive à y voir beaucoup plus clair sur les valeurs retournées. Elles sont nettement plus lisibles comme ça, n'est-ce pas ?

Citation : Résultat de l'exécution :

Array
(
[TOKEN] => EC-29604316SN024140D
[TIMESTAMP] => 2009-06-10T09:28:18Z
[CORRELATIONID] => 18fadf688350f
[ACK] => Success
[VERSION] => 56
[BUILD] => 942987
)

À présent, si on veut vérifier que l'exécution n'a généré aucune erreur sur le serveur PayPal, il nous suffit de vérifier que la variable $liste_param_paypal['ACK'] soit bien égale à Success.

Avant de continuer, je vous propose de déplacer le petit bout de code, qui crée la variable $liste_param_paypal, dans notre page fonction_api.php. Car on aura besoin de ce même code pour chaque donnée récupérée par l'API PayPal.
Cette fonction prendra comme paramètre d'entrée, la chaîne complète contenant le résultat obtenu par la fonction cURL, et nous retournera un array contenant tous les paramètres récupérés.

Maintenant voilà à quoi notre fichier fonction_api.php ressemble
<?php
  function construit_url_paypal()
  {
	$api_paypal = 'https://api-3t.sandbox.paypal.com/nvp?'; // Site de l'API PayPal. On ajoute déjà le ? afin de concaténer directement les paramètres.
	$version = 57.0; // Version de l'API
	
	$user = 'vendeur_1236594550_biz_api1.siteduzero.com'; // Utilisateur API
	$pass = 'SEFYITJFG8QRHN1S'; // Mot de passe API
	$signature = 'ZWg4tSHZZ0GQIK8U6VKGWO1mxrtOAJzAGFNRnFpDWRKX-fv8q5Tuj64n'; // Signature de l'API

	$api_paypal = $api_paypal.'VERSION='.$version.'&USER='.$user.'&PWD='.$pass.'&SIGNATURE='.$signature; // Ajoute tous les paramètres

	return 	$api_paypal; // Renvoie la chaîne contenant tous nos paramètres.
  }

  function recup_param_paypal($resultat_paypal)
  {
	$liste_parametres = explode("&",$resultat_paypal); // Crée un tableau de paramètres
	foreach($liste_parametres as $param_paypal) // Pour chaque paramètre
	{
		list($nom, $valeur) = explode("=", $param_paypal); // Sépare le nom et la valeur
		$liste_param_paypal[$nom]=urldecode($valeur); // Crée l'array final
	}
	return $liste_param_paypal; // Retourne l'array
  }
?>

Le paiement... ou pas

Pour que le visiteur puisse régler son dû, et si la demande de paiement a été correctement transmise, il faut rediriger le client sur le site de PayPal afin qu'il s'identifie.

Pour ce faire, il existe une fonction PHP permettant de rediriger le visiteur sur un autre site. Il s'agit de la fonction header. En fait cette fonction permet d'envoyer des entêtes HTTP au navigateur du client, et en lui passant l'entête "Location:" le visiteur est redirigé sur le site en question.

On va donc utiliser cette fonction pour le diriger sur le site de PayPal en y ajoutant le jeton.

Au final
<?php
include("fonction_api.php");
$requete = construit_url_paypal();
$requete = $requete."&METHOD=SetExpressCheckout".
			"&CANCELURL=".urlencode("http://127.0.0.1/cancel.php").
			"&RETURNURL=".urlencode("http://127.0.0.1/return.php").
			"&AMT=10.0".
			"&CURRENCYCODE=EUR".
			"&DESC=".urlencode("Magnifique oeuvre d'art (que mon fils de 3 ans a peint.)").
			"&LOCALECODE=FR".
			"&HDRIMG=".urlencode("http://www.siteduzero.com/Templates/images/designs/2/logo_sdz_fr.png");

$ch = curl_init($requete);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$resultat_paypal = curl_exec($ch);

if (!$resultat_paypal)
	{echo "<p>Erreur</p><p>".curl_error($ch)."</p>";}
else
{
	$liste_param_paypal = recup_param_paypal($resultat_paypal); // Lance notre fonction qui dispatche le résultat obtenu en un array

	// Si la requête a été traitée avec succès
	if ($liste_param_paypal['ACK'] == 'Success')
	{
		// Redirige le visiteur sur le site de PayPal
		header("Location: https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token=".$liste_param_paypal['TOKEN']);
                exit();
	}
	else // En cas d'échec, affiche la première erreur trouvée.
	{echo "<p>Erreur de communication avec le serveur PayPal.<br />".$liste_param_paypal['L_SHORTMESSAGE0']."<br />".$liste_param_paypal['L_LONGMESSAGE0']."</p>";}		
}
curl_close($ch);
?>

C'est-y pas beau ?

Paiement PayPal

Maintenant, il va falloir créer les deux autres pages. cancel.php et return.php. Ce sont les deux pages que vous avez définies dans les paramètres CANCELURL et RETURNURL.

Pour la page cancel.php, rien de bien compliqué.. Vous affichez un message de profond désarroi du style :

Citation : Message de profond désarroi

Snif, il ne me reste plus qu'à aller chercher la corde pour me pendre, avant que j'annonce à ma femme et mes 5 enfants qu'ils ne pourront pas manger ce soir, une fois de plus....

Bon c'est peut-être un peu exagéré, optez plutôt pour un message plus convivial, comme ceci :

Citation : Message convivial

Le paiement a été annulé. En espérant que vous changerez rapidement d'avis, nous vous adressons nos salutations les plus sincères, Pov' type va !.

Bien entendu, vous y ajouterez tous les traitements internes à votre programme (mise à jour de la base de données, etc.).

cancel.php
<h1>Paiement annulé</h1>
<p>
Le paiement a été annulé. En espérant que vous changerez d'avis, nous vous adressons nos salutations les plus sincères.
</p>
<?php
  // mysql_query("UPDATE commandes SET etat='annulé' WHERE id_commande='1234'");
?>

Pour la page return.php, c'est un peu différent. Il va falloir réaliser la transaction à l'aide de la fonction DoExpressCheckoutPayment de l'API PayPal. Ensuite vous pouvez exécuter vos traitements internes (mise à jour de la base de données, etc.).

L'utilisation de la méthode DoExpressCheckoutPayment a été vue dans le sous-chapitre « Communication avec l'API NVP » et le reste du code ressemble, comme deux gouttes d'eau, au premier. Je ne vais donc pas tout réexpliquer. Alors trêve de bavardage et passons à la pratique.

return.php
<?php
session_start();
include("fonction_api.php"); // On importe la page créée précédemment
$requete = construit_url_paypal(); // Construit les options de base

// On ajoute le reste des options
// La fonction urlencode permet d'encoder au format URL les espaces, slash, deux points, etc.)
$requete = $requete."&METHOD=DoExpressCheckoutPayment".
			"&TOKEN=".htmlentities($_GET['token'], ENT_QUOTES). // Ajoute le jeton qui nous a été renvoyé
			"&AMT=10.0".
			"&CURRENCYCODE=EUR".
			"&PayerID=".htmlentities($_GET['PayerID'], ENT_QUOTES). // Ajoute l'identifiant du paiement qui nous a également été renvoyé
			"&PAYMENTACTION=sale";

// Initialise notre session cURL. On lui donne la requête à exécuter.
$ch = curl_init($requete);

// Modifie l'option CURLOPT_SSL_VERIFYPEER afin d'ignorer la vérification du certificat SSL. Si cette option est à 1, une erreur affichera que la vérification du certificat SSL a échoué, et rien ne sera retourné. 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// Retourne directement le transfert sous forme de chaîne de la valeur retournée par curl_exec() au lieu de l'afficher directement. 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// On lance l'exécution de la requête URL et on récupère le résultat dans une variable
$resultat_paypal = curl_exec($ch);

if (!$resultat_paypal) // S'il y a une erreur, on affiche "Erreur", suivi du détail de l'erreur.
	{echo "<p>Erreur</p><p>".curl_error($ch)."</p>";}
// S'il s'est exécuté correctement, on effectue les traitements...
else
{
	$liste_param_paypal = recup_param_paypal($resultat_paypal); // Lance notre fonction qui dispatche le résultat obtenu en un array
	
	// On affiche tous les paramètres afin d'avoir un aperçu global des valeurs exploitables (pour vos traitements). Une fois que votre page sera comme vous le voulez, supprimez ces 3 lignes. Les visiteurs n'auront aucune raison de voir ces valeurs s'afficher.
	echo "<pre>";
	print_r($liste_param_paypal);
	echo "</pre>";
	
	// Si la requête a été traitée avec succès
	if ($liste_param_paypal['ACK'] == 'Success')
	{
		echo "<h1>Youpii, le paiement a été effectué</h1>"; // On affiche la page avec les remerciements, et tout le tralala...
		// Mise à jour de la base de données & traitements divers...
		mysql_query("UPDATE commandes SET etat='OK' WHERE id_commande='".$liste_param_paypal['TRANSACTIONID']."'");
	}
	else // En cas d'échec, affiche la première erreur trouvée.
	{echo "<p>Erreur de communication avec le serveur PayPal.<br />".$liste_param_paypal['L_SHORTMESSAGE0']."<br />".$liste_param_paypal['L_LONGMESSAGE0']."</p>";}
}
// On ferme notre session cURL.
curl_close($ch);
?>

Toutes les infos du paiement

Nous venons de voir comment créer nos pages afin d'effectuer un paiement, mais il nous manque quand même pas mal d'informations pour compléter notre base de données. Pour récupérer toutes ces informations, il nous faut appeler l'API PayPal avec la fonction GetExpressCheckoutDetails. Ainsi vous récupérerez toutes les informations qu'il est possible d'avoir sur le paiement ainsi que sur l'acheteur.

Cette fonction peut être utile autant dans votre page d'annulation de paiement que dans celle de validation.

Vous pouvez donc créer une page de traitement afin de mettre à jour les informations client, par exemple.

Voici donc ce que ça donne en images. ;)

traitements.php
<?php
include("fonction_api.php");
$requete = construit_url_paypal();
$requete = $requete."&METHOD=GetExpressCheckoutDetails".
			"&TOKEN=".htmlentities($_GET['token'], ENT_QUOTES); // Ajoute le jeton

$ch = curl_init($requete);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resultat_paypal = curl_exec($ch);

if (!$resultat_paypal) // S'il y a une erreur
	{echo "<p>Erreur</p><p>".curl_error($ch)."</p>";}
// S'il s'est exécuté correctement
else
{
	$liste_param_paypal = recup_param_paypal($resultat_paypal);
	
	// On affiche tous les paramètres afin d'avoir un aperçu global des valeurs exploitables (pour vos traitements). Une fois que votre page sera comme vous le voulez, supprimez ces 3 lignes. Les visiteurs n'auront aucune raison de voir ces valeurs s'afficher.
	echo "<pre>";
	print_r($liste_param_paypal);
	echo "</pre>";
	
	// Si la requête a été traitée avec succès
	
	// Mise à jour de la base de données & traitements divers... Exemple :
	mysql_query("INSERT INTO client(nom, prenom) VALUE('".$liste_param_paypal['FIRSTNAME']."', '".$liste_param_paypal['LASTNAME']."')");
}
curl_close($ch);
?>

Vous n'avez plus qu'à appeler cette page après que le visiteur se soit connecté au site de PayPal.

Mise en production

Une fois que vous avez bien testé votre programme (paiement complété / paiement annulé), et que tout va comme sur des roulettes, il vous reste à mettre votre site en production pour que tous vos visiteurs puissent en profiter !

Pour accomplir cela, voici ce qu'il faut faire.

Rendez-vous sur le site de Paypal : www.paypal.fr, puis cliquez sur le lien Ouvrez un compte.
Ensuite choisissez un compte de type Business, afin d'avoir toutes les options concernant les sites web.
Une fois que votre compte est créé, procédez à la création d'une signature API, comme pour le compte de test.

Cliquez sur Préférences / Plus?, puis Accès à l'API, et enfin Demander des informations d'authentification API.
Choisissez ensuite Demandez une signature API et valider votre demande. Vous aurez ainsi le nom d'utilisateur, le mot de passe et la signature de l'API.
Remplacez les données de tests, contenues dans votre fichier de configuration, par les données que vous venez d'obtenir.
Pensez à conserver les données de tests quelque part afin que vous puissiez effectuer de nouveaux tests lors de mises à jour de votre programme.

Modifiez également le serveur de l'API par celui de production :

https://api-3t.paypal.com/nvp

Pensez également à changer le serveur de redirection du visiteur sur le site de PayPal (au lieu de la sandbox) :

https://www.paypal.com/webscr&cmd=_express-checkout&token=...

Petit truc

Enregistrez le site de redirection du visiteur dans une variable, et placez celle-ci dans votre fichier de configuration. Ainsi toutes les données à modifier sont au même endroit. Et c'est plus facile pour switcher entre l'environnement de test et celui de production.

Configuration et fonctions API
<?php

	/******   SERVEUR DE TESTS  ******/
	// $serveur_paypal = "https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token=";

	/******   SERVEUR DE PRODUCTION ******/
	$serveur_paypal = "https://www.paypal.com/webscr&cmd=_express-checkout&token=";


 function construit_url_paypal()
  {
	/******   DONNEES DE TESTS  ******/
	/*
	$api_paypal = 'https://api-3t.sandbox.paypal.com/nvp?';
	$user = 'vendeur_1236594550_biz_api1.siteduzero.com';
	$pass = 'SEFYITJFG8QRHN1S';
	$signature = 'ZWg4tSHZZ0GQIK8U6VKGWO1mxrtOAJzAGFNRnFpDWRKX-fv8q5Tuj64n';
	*/


	/******   DONNEES DE PRODUCTION ******/
	$api_paypal = 'https://api-3t.paypal.com/nvp?';
	$user = 'user_api1.siteduzero.com';
	$pass = 'KIRWQBHAQTUZO4ST';
	$signature = 'IUk3eOIUFAXKTUAPSITZHQOpoytQPYhQYOZNMkDlYPTYL-og6x7HnW98x';


	$version = 56.0; // Version de l'API

	$api_paypal = $api_paypal.'VERSION='.$version.'&USER='.$user.'&PWD='.$pass.'&SIGNATURE='.$signature; // Ajoute tous les paramètres

	return 	$api_paypal; // Renvoie la chaîne contenant tous nos paramètres.
  }
?>

Et lorsque vous devez rediriger le visiteur sur le site de PayPal, vous n'avez qu'à écrire :

<?php
header("Location: ".$serveur_paypal.$liste_param_paypal['TOKEN']);
?>

Mise en place du logo PayPal

Logo PayPal

Attendez : avant de partir, j'ai encore une petite chose à vous dire.
PayPal a défini pour son logo des règles à suivre lorsque vous proposez l'option PayPal à vos clients.

Les logos en question sont disponibles sur le site de PayPal, à cette adresse : https://www.paypal.com/fr/logos.

Vous pouvez également consulter le guide d'intégration visuelle à cette adresse, afin de savoir où et comment mettre en place ces logos.

Voilà : maintenant, vous êtes capables de bien comprendre comment fonctionne tout cela, et vous n'aurez aucune difficulté à le mettre en place sur votre site web.

Visitez encore la page Annexes pour accéder aux liens de la documentation officielle de PayPal, ainsi qu'un résumé des fonctions et serveurs à utiliser.

Example of certificate of achievement
Example of certificate of achievement