Paypal et les notifications

WRInaute occasionnel
Salut!

Il y a des utilisateurs de paypal ici?

J'essaie de faire un truc et je galère...

Je vous explique : Sur mon site, je voudrais que lorsqu'un utilisateur paie un produit par paypal, celui m'envoie sur une page avec des paramêtres que je lui aurait donné moi (notamment l'identifiant de l'utilisateur) afin que je puisse mettre à jour ma propre base de donnée.
Cela se doit d'être instantanné et par conséquent, je ne peux pas attendre une notification par mail...

D'après ce que j'ai compris, on fait ça avec les IPN de paypal, mais je lutte, c'est super mal expliqué.
Est-ce que quelqu'un a déjà eu affaire à ces machins là?
 
WRInaute occasionnel
Salut,

Justement il n'y a pas longtemps je cherchais des infos à propos de NIP sans trouver.

Donc je m'y suis mis, j'ai galéré un peu, et avec la sandbox j'ai pu tester correctement...

Normalement dans la documentation paypal tu as une portion de script, tu la prends et tu la modifie, en fait c'est tout con, c'est mal expliqué mais y'a pas grand chose à dire non plus.

Il faut au minimum que la page déclarée pour la NIP contienne :

Code:
// lire la publication du système PayPal et ajouter 'cmd'
$req = 'cmd=_notify-validate';

// 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 ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
// affecter les variables publiées aux variables locales
$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_membre        = $_POST['option_selection1'];

if (!$fp) {

// ERREUR HTTP
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIE") == 0) {
// vérifier que payment_status est Terminé
// vérifier que txn_id n'a pas été précédemment traité
// vérifier que receiver_email est votre adresse email PayPal principale
// vérifier que payment_amount et payment_currency sont corrects
// traiter le paiement
}
else if (strcmp ($res, "NON VALIDE") == 0) {
// consigner pour enquête manuelle
}
}
fclose ($fp);
}

J'ai récupéré ça, mais vérifie sur leur site que je n'oublie rien ;)
(les commentaires y sont d'origine...)
(note : j'enregistre chaque requete de la page dans une bdd, histoire d'être sûr, et de voir si quelqu'un d'autre que paypal apelle cette page)
(note2 : www.sandbox.paypal.com est correct, ils mettent d'origine www.sandbox.paypal.com/cgi-bin/webscr ou un truc comme ça, mais chez moi ça ne marchait pas, et comme ça ça marche)
(note3 : sandbox.paypal c'est pour les tests uniquement..)
 
WRInaute occasionnel
Merci beaucoup!
Ca n'a pas l'air simple du tout en effet, mais ça me fait au moins une piste...
 
WRInaute occasionnel
Mais si tu vas voir, ça va aller tout seul ;)

Fais toi un compte sur sandbox, mets une page en ligne, testes, testes, testes, et ça va aller !
 
Discussions similaires
Haut