Deuxième partie du tutorial qui vous permettra d'intégrer le service de paiement en ligne PayPal à votre site web PHP.

Le but de ce tutorial est de vous guider pas à pas dans l'intégration du service de paiement en ligne paypal et de vous expliquer comment fonctionne le processus de paiement ...
Ce tutorial s'applique uniquement aux sites développés en PHP.
Pour tester que notre bouton PayPal fonctionne correctement, nous allons maintenant simuler un achat.
Rendez-vous sur la page contenant le bouton d'achat paypal, choisissez une somme (si vous avez mis un input type='text' ou un select) à acheter puis cliquez sur votre bouton.
Vous devriez accéder à une page PayPal sécurisée qui récapitule la transaction à effectuer et vous demande de vous identifier à paypal ou de saisir vos coordonnées de CB.
Identifiez vous avec votre compte virtuel buyer (adresse email en *_per@votredomaine).
Puis validez l'achat. Une fois que la transaction est effectuée, la page paypal de confirmation s'affichera et vous pourrez retourner sur votre site grâce au lien mis en avant. Vous serez redirigé sur la page de succès que vous avez du mettre en place (Celle renseignée dans le formulaire avec le bouton).
Maintenant, vous pouvez vérifier que la transaction a bien été effectuée dans votre compte "seller". (Via le site sandbox > Tests Accounts)
Exemple:
![]()
Passons maintenant à la partie la plus intéressante, le traitement du paiement grâce à l'IPN.
Une fois qu'un acheteur valide un paiement, PayPal va automatiquement appeler la page renseignée dans le paramètre "notify_url" du formulaire.
L'IPN envoi un certain nombre de paramètres qu'il va donc falloir dans un premier temps récupérer pour ensuite pouvoir traiter le paiement sur notre site.
Ouvrez donc le fichier en question et rajoutez:
// lire le formulaire provenant du système PayPal et ajouter 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
Dans la boucle foreach, nous allons récupérer tous les paramètres passés par la méthode POST et les stocker dans la variable $req. Cette dernière nous permettra de renvoyer toutes les données à PayPal pour vérification.
// renvoyer au système PayPal pour validation
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
Maintenant, nous préparons le header à renvoyer au système de paypal pour obtenir la vérification de l'intégrité des données reçues.
Nous ouvrons ensuite une connexion avec le serveur sandbox paypal (A remplacer par www.paypal.com en production).
$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']; $id_user = $_POST['custom'];
On récupère toutes les données que l'on va traiter.
if (!$fp) {
// ERREUR HTTP
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {
// transaction valide
}
else if (strcmp ($res, "INVALID") == 0) {
// Transaction invalide
}
}
fclose ($fp);
}
Si la connexion au service paypal a réussie, on lui envoi le header préparé précedemment, puis on récupère les information renvoyée par PayPal.
Si le résultat est "VERIFIED" alors, la transaction est valide, les données envoyées et récupérées sont correctes.
Dans le cas contraire, paypal renverra le code "INVALID".
Passons maintenant au traitement du paiement lorsque la transaction est valide.
Si la transaction est valide, cela ne signifie pas qu'il faut traiter tête baisser le paiement !
Il y'a quelques tests à effectuer au préalable:
Ajoutez donc les conditions PHP suivantes après le commentaire
// transaction valide
// vérifier que payment_status a la valeur Completed
if ( $payment_status == "Completed") {
// vérifier que txn_id n'a pas été précédemment traité: Créez une fonction qui va interroger votre base de données
if (VerifIXNID($txn_id) == 0) {
// vérifier que receiver_email est votre adresse email PayPal principale
if ( "votreEmailSeller" == $receiver_email) {
// vérifier que payment_amount et payment_currency sont corrects
// traiter le paiement
}
else {
// Mauvaise adresse email paypal
}
}
else {
// ID de transaction déjà utilisé
}
}
else {
// Statut de paiement: Echec
}
A vous de voir ensuite comment traiter votre paiement.
Il est conseillé de stocker une trace de chaque paiement dans une table dédiée.
Ensuite à vous de créditer l'acheteur ou de préparer la livraison du produit acheté ...
Vous devez aussi gérer les erreurs en cas de problème, par exemple notifier l'utilisateur que son paiement à échoué.
Aucun support ne sera fourni en commentaire. Si vous avez des problèmes ou questions, merci de les poser dans le topic dédié au tutorial.
Pour poster un commentaire, vous devez être identifié. Vous pouvez choisir parmi ces trois méthodes d'identification:
Compte la Ferme du WebIdentifiez-vousInscrivez-vous |
Compte Facebook |
Compte Twitter
|