IPN envoyé OK via sandbox mais script non executé

Zibbulon
Contributeur
Contributeur

IPN envoyé OK via sandbox mais script non executé

 

Bonjour à tous,

 

cela fait 2 mois que je m'arrache les cheveux parce que l'IPN ne veut pas fonctionner sur mon site même après avoir réécrit mon code en suivant le tuto Tutorial_Paypal_php_MySQL_NIP.doc de PRSTSCcolonDTL mais en vain.

 

Sur la sandbox, on me dit que mes IPN sont envoyé ok (HTTP 200) mais mon script n'execute rien (que ce soit en mode SSL ou non)

 

 

$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value)
{
	$value = urlencode(stripslashes($value));
	$req .= "&$key=$value";
}
    $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);
 
// liste des parametres reçu par paypal, exemple :
$payment_status = $_POST['payment_status']; // Si Completed : tout est OK
$payer_email = $_POST['payer_email']; // mail de l'acheteur
$first_name = $_POST['first_name']; // prénom de l'acheteur
$last_name = $_POST['last_name']; // nom de l'acheteur
$txn_type = $_POST['txn_type']; // id paypal de transaction
 
if (!$fp) {
// HTTP ERROR
	echo "%NIP-F-SOCKOPEN, HTTP error " . $errno . " " . $errstr;
	exit;
} else {

	fputs ($fp, $header . $req);
	while (!feof($fp)) {
		$res = fgets($fp, 1024);
		if (strcmp ($res, "VERIFIED") == 0) {

// CODE envoi email + maj SQL completed

		}
		else if (strcmp ($res, "INVALID") == 0) {

// CODE envoi email + maj SQL cancelled

		}
	}
	fclose ($fp);
}
?> 

 

 

Donc, je pense que Paypal accède bien à mon script IPN mais rien ne s'execute à l'interéieur et là je sèche carrément.

 

Si vous pouviez m'aider, çà me sauverai.

Merci d'avance.

 

Login to Me Too
1 SOLUTION APPROUVÉE

Solutions approuvées
Solved

Zibbulon
Contributeur
Contributeur

Merci, grâce aux documents fournis par Toulousaing cela fonctionne désormais, j'ai pu débugguer mon script grâce aux log des erreurs.

 

MERCI

Voir la solution dans l'post d'origine

Login to Me Too
9 RÉPONSES 9

Zibbulon
Contributeur
Contributeur

Je précise que la paiement s'effectue correctement et que je reçoit bien l'email de confirmation de paiement de paypal.

Juste l'IPN qui dit fonctionne sur l'historique d'envoi d'IPN sans que j'en vois la couleur.

 

Après, je n'ai pas réussi non plus à mettre en place un système de log pour savoir si paypal vient vraiment ou non sur mon fichier paypal_ipn.php

Login to Me Too

Toulousaing
Contributeur
Contributeur

Source du nip.php avec le code de l'error logger : http://www.ddtl.fr/monsite/nip_ano.php.txt

idem pour le pdt.php : http://www.ddtl.fr/monsite/pdt_ano.php.txt

resultat du log : http://www.ddtl.fr/monsite/nip_log.htm

 

Good luck

 

et evitez de me téléphoner le week-end... Smiley heureux

Login to Me Too

Zibbulon
Contributeur
Contributeur

Merci pour ce script, je teste çà en ce moment et vous en dit des nouvelles.

Login to Me Too

Typiac
Contributeur
Contributeur

Bonjour,

 

Ah, enfin une piste sérieuse! Effectivement, j'ai trouvé le tuto très bien fait mais comme pas mal de monde, je peine tout de même à le faire fonctionner.

 

J'ai remplacé le NIP.php par nip_ano.php de toulousaing et je peux faire quelques constatations:

 

1- Dans le tuto, il est expliqué que pour l'adresse du Nip.php, il faut inscrire dans le compte paypal: http://adresseIP/monsite/nip.phpou bien http://127.0.0.1/monsite/nip.php

--> J'ai tenté les deux mais ça ne fonctionne qu'avec l'adresse inscrite normalement: http://www.lesiteaveclequeljevaisgagnerdesmillions.com/monsite/nip.php

 

2- concernant le fichier de log, j'ai comparé avec le fichier nip_log.htm de Toulousaing et je n'ai pas la totalité sans pour autant recevoir de message d'erreur. Le script semble bloquer à l'étape "set cookie". Voici mon rapport de log:

 

2012-12-03 13:11:49 : nip.php - === nip.php version v3.3-0. Début. ===
2012-12-03 13:11:49 : nip.php - req = >cmd=_notify-validate&test_ipn=1&payment_type=instant&payment_date=04%3A10%3A23+Dec+03%2C+2012+PST&payment_status=Completed&address_status=confirmed&payer_status=verified&first_name=John&last_name=Smith&payer_email=buyer%40paypalsandbox.com&payer_id=TESTBUYERID01&address_name=John+Smith&address_country=United+States&address_country_code=US&address_zip=95131&address_state=CA&address_city=San+Jose&address_street=123%2C+any+street&business=seller%40paypalsandbox.com&receiver_email=seller%40paypalsandbox.com&receiver_id=TESTSELLERID1&residence_country=US&item_name=something&item_number=AK-1234&quantity=1&shipping=3.04&tax=2.02&mc_currency=USD&mc_fee=0.44&mc_gross=12.34&mc_gross_1=9.34&txn_type=web_accept&txn_id=231231210¬ify_version=2.1&custom=xyz123&charset=windows-1252&verify_sign=A-JCugmDzymduTqz8KX2P-RFUig9AcRy2WI5RnJNiZM1cAs9-RNd97do<
2012-12-03 13:11:49 : nip.php - lecture des data du Post
2012-12-03 13:11:49 : nip.php - Paypal Transaction ID = >231231210<
2012-12-03 13:11:49 : nip.php - Paiement status = >Completed<
2012-12-03 13:11:49 : nip.php - Paiement date = >04:10:23 Dec 03, 2012 PST<
2012-12-03 13:11:49 : nip.php - Buyer Last Name = >Smith<
2012-12-03 13:11:49 : nip.php - Buyer First Name = >John<
2012-12-03 13:11:49 : nip.php - SQL unique ID = >xyz123<
2012-12-03 13:11:49 : nip.php - Paiement amount = >12.34<
2012-12-03 13:11:49 : nip.php - Paiement Currency = >USD<
2012-12-03 13:11:49 : nip.php - Pending reason (if any) = ><
2012-12-03 13:11:49 : nip.php - Refund reason (if any) = ><
2012-12-03 13:11:49 : nip.php - Buyer email = >b_u_y_e_r<
2012-12-03 13:11:49 : nip.php - Vendor email = >s_e_l_l_e_r<
2012-12-03 13:11:49 : nip.php - ouverture socket réel SSL
2012-12-03 13:11:51 : nip.php - res = HTTP/1.1 200 OK
2012-12-03 13:11:51 : nip.php - res = Date: Mon, 03 Dec 2012 12:11:20 GMT
2012-12-03 13:11:51 : nip.php - res = Server: Apache
2012-12-03 13:11:51 : nip.php - res = X-Frame-Options: SAMEORIGIN
2012-12-03 13:11:51 : nip.php - res = Set-Cookie: cwrClyrK4LoCV1fydGbAxiNL6iG=qvQ-C0AkkbSPrC18R4hTYXyKXiVsGdrJuu9PJ28B2UfOs_e2i8sBYaN0k-awzoc0EE8bgk-e__6j-w02EQbmsg_9Hw7ryis4oGM2wK8OwwtVvSnMvUG2gZGb482H3qRVZUPAPW%7csI5uZSsPKSZJIV4k7NET6moIrWKKtsy5z24kbrPtejI3ms_9jKsIT5d4l7wRzmdTcgO690%7cx5QZqyKdp3xQ4l2nptzEwZMP4unyu4j7E70InJMmK7LB8TzJvr9TU1XnaAdGxjA_9qgKj0%7c1354536680; domain=.paypal.com; path=/; Secure; HttpOnly
2012-12-03 13:11:51 : nip.php - res = Set-Cookie: cookie_check=yes; expires=Thu, 01-Dec-2022 12:11:20 GMT; domain=.paypal.com; path=/; Secure; HttpOnly 

 

Est-il possible d'avoir un coup de main?

Login to Me Too

Typiac
Contributeur
Contributeur

Voilà ce que me donne le nip_error_log.txt:

 

[03-Dec-2012 15:25:04] PHP Warning:  date() [<a href='function.date'>function.date</a>]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /home/XXX/www/monsite/nip.php on line 22

 

Le problème peut-il venir de là?

Login to Me Too

Typiac
Contributeur
Contributeur

Suite des investigations:

 

le log.htm et le nip_error_log.txt semblaient me dire que mon serveur n'était pas à l'heure alors j'ai refais une petite manip internet et dans le nip.php j'ai ajouté tout au début:

 

<?php
date_default_timezone_set('UTC');

 

Le nip.php semble du coup commencer à s'exécuter mais ça ne va pas jusqu'au bout comme le montre le errlog.htm:

 

2012-12-03 22:43:53 : nip.php - === nip.php version v3.3-0. Début. ===
2012-12-03 22:43:53 : nip.php - req = >cmd=_notify-validate&mc_gross=10.00&protection_eligibility=Ineligible&payer_id=5QDTJ8DHDX5YL&tax=0.00&payment_date=14%3A43%3A19+Dec+03%2C+2012+PST&payment_status=Completed&charset=windows-1252&first_name=toto&mc_fee=0.59¬ify_version=3.7&custom=PoUbKPZdYZ&payer_status=verified&business=ADRESSEBIZ&quantity=1&verify_sign=A4YCF8aeQSx10D4zGWW4-6QyjyUAAFH24B89th.Ywd5CVw7D-lr84XS6&payer_email=ADRESSPER%boulot.net&txn_id=35T62486VN697745Y&payment_type=instant&last_name=tutu&receiver_email=ADRESSEBIZ%40boulot.net&payment_fee=&receiver_id=SW8U2KBA2Z34S&txn_type=web_accept&item_name=Inscription+%C3%A0+MonSite&mc_currency=EUR&item_number=&residence_country=FR&test_ipn=1&handling_amount=0.00&transaction_subject=PoUbKPZdYZ&payment_gross=&shipping=0.00&ipn_track_id=9d4043b5d90dc<
2012-12-03 22:43:53 : nip.php - lecture des data du Post
2012-12-03 22:43:53 : nip.php - Paypal Transaction ID = >35T62486VN697745Y<
2012-12-03 22:43:53 : nip.php - Paiement status = >Completed<
2012-12-03 22:43:53 : nip.php - Paiement date = >14:43:19 Dec 03, 2012 PST<
2012-12-03 22:43:53 : nip.php - Buyer Last Name = >tutu<
2012-12-03 22:43:53 : nip.php - Buyer First Name = >toto<
2012-12-03 22:43:53 : nip.php - SQL unique ID = >PoUbKPZdYZ<
2012-12-03 22:43:53 : nip.php - Paiement amount = >10.00<
2012-12-03 22:43:53 : nip.php - Paiement Currency = >EUR<
2012-12-03 22:43:53 : nip.php - Pending reason (if any) = ><
2012-12-03 22:43:53 : nip.php - Refund reason (if any) = ><
2012-12-03 22:43:53 : nip.php - Buyer email = >ADRESSE MAIL PER<
2012-12-03 22:43:53 : nip.php - Vendor email = > ADRESSE MAIL BIZ<
2012-12-03 22:43:53 : nip.php - ouverture socket réel SSL
2012-12-03 22:43:54 : nip.php - res = HTTP/1.1 200 OK
2012-12-03 22:43:54 : nip.php - res = Date: Mon, 03 Dec 2012 22:43:23 GMT
2012-12-03 22:43:54 : nip.php - res = Server: Apache
2012-12-03 22:43:54 : nip.php - res = X-Frame-Options: SAMEORIGIN
2012-12-03 22:43:54 : nip.php - res = Set-Cookie: cwrClyrK4LoCV1fydGbAxiNL6iG=lBVFkBUCGTN1E_qmFZ3K96nKGgHq2yixNco8ifeNDGqqTyhIgjmnbCumtiqAVq7xaJunIS0xLjRoXAAY_hkqnDOCCMuzJzGyU3KSOMNwvhxzslwJO0knrVleKKFkaODBxTDknW%7cVCcsqYSd_mvmWj99oYRFD1N2R6NFn9WLpol_RJ6v4Cpprh6NdjdUbFiHnbIP9leWKUE-cm%7cZMmUEcX_hHfc4OkPxGytGb5XtBcnlGm7hZbAMvtseB3ItV8M5_fcPQfss-Kh1d8iR3cJgW%7c1354574604; domain=.paypal.com; path=/; Secure; HttpOnly
2012-12-03 22:43:54 : nip.php - res = Set-Cookie: cookie_check=yes; expires=Thu, 01-Dec-2022 22:43:24 GMT; domain=.paypal.com; path=/; Secure; HttpOnly
2012-12-03 22:43:54 : nip.php - res = Set-Cookie: navcmd=_notify-validate; domain=.paypal.com; path=/; Secure; HttpOnly
2012-12-03 22:43:54 : nip.php - res = Set-Cookie: navlns=0.0; expires=Sun, 28-Nov-2032 22:43:24 GMT; domain=.paypal.com; path=/; Secure; HttpOnly
2012-12-03 22:43:54 : nip.php - res = Set-Cookie: Apache=10.74.8.43.CHIFFREINTERDIT; path=/; expires=Wed, 26-Nov-42 22:43:23 GMT
2012-12-03 22:43:54 : nip.php - res = Vary: Accept-Encoding
2012-12-03 22:43:54 : nip.php - res = Strict-Transport-Security: max-age=14400
2012-12-03 22:43:54 : nip.php - res = Connection: close
2012-12-03 22:43:54 : nip.php - res = Content-Type: text/html; charset=UTF-8
2012-12-03 22:43:54 : nip.php - res =
2012-12-03 22:43:54 : nip.php - res = INVALID
2012-12-03 22:43:54 : nip.php - Status INVALID retourné par Paypal
2012-12-03 22:43:54 : nip.php - === Script interrompu anormalement ===

 

Je ne comprends pas trop ce statut invalid retourné par paypal car lorsque je check l'historique des envois de nip dans la sandbox, tout est ok.

 

 

Login to Me Too

Typiac
Contributeur
Contributeur

Ah, j'ai finalment réussi!

 

Alors pour ceux qui seraient eventuellement bloqués et je pense qu'il s'agit de débutants comme moi qui tente de tester le script dans la sandbox, il ne faut pas oublier de changer la localisation du serveur en sandbox.paypal.com. Le tuto étant destiné à des "testeurs", je n'ai pas trop compris pourquoi était inscrit:

 

$fp = @fsockopen ('ssl://ipnpb.paypal.com', 443, $errno, $errstr, 30);

 Ensuite, il y a une erreur sur cette ligne dans le script modifié:

 

$query = "UPDATE utilisateurs SET idTransaction='$txn_id', autorisation='3', date = NOW(), email_a = '$payer_email' WHERE idUnique='$idUnique'";

 Il faut en fait enlever enlever le "_a" qui n'est attribué à rien et juste garder:

 

$query = "UPDATE utilisateurs SET idTransaction='$txn_id', autorisation='3', date = NOW(), email = '$payer_email' WHERE idUnique='$idUnique'";

 Voilà, un grand bravo aux bénévoles qui ont élaboré ce tuto! 🙂

 

 

Login to Me Too
Solved

Zibbulon
Contributeur
Contributeur

Merci, grâce aux documents fournis par Toulousaing cela fonctionne désormais, j'ai pu débugguer mon script grâce aux log des erreurs.

 

MERCI

Login to Me Too

PRSTSCcolonDTL
Contributeur
Contributeur

ébin voilà, Bonne Année... Smiley heureux

 

Le truc que t'avais pas compris, c'est page 21 ?

 

Effectivement, je suis par l'esprit dans la Sandbox, et tout d'un coup le code ouvre le site de prod de PP.

Erreur grossière, corrigée subséquemment et nonobstant.

 

Content d'avoir été utile au moins une fois...

 

Bye

Login to Me Too

Haven't Found your Answer?

It happens. Hit the "Login to Ask the community" button to create a question for the PayPal community.