Paypal IPN URGENT

Par Dams, il y a 11 ans


Bonjour.
J'ai instaler un script paypal qui fonctionne parfaitement en sandbox mais des que je le met en prod il ne fonctionne plus j'aimerais savoir d'ou peut venir le probléme .

<?php $email_account = " @hotmail.fr"; $req = 'cmd=_notify-validate'; foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $req .= "&$key=$value"; } //Stoket paypal ne rien modifier ici sauf ligne 22 en cas de Maj de paypal //SANBOX $fp = fsockopen ('ssl://www.sandbox.paypal.com', '443', $errno, $errstr, 30); $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; $header .= "Host: www.paypal.com\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.paypal.com', 443, $errno, $errstr, 30); foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $req .= "&$key=$value"; } //$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); //récuperation des Variable $_Post $item_name = $_POST['item_name']; $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']; //Variable personalisé $id = $_POST['custom']; parse_str($_POST['custom'], $custom); $sommeTotalJr = '01.00'; //vérification de la somme. $detail = "Transaction Valide"; if (!$fp) { } else { fputs ($fp, $header . $req); while (!feof($fp)) { $res = fgets ($fp, 1024); if (strcmp ($res, "VERIFIED") == 0) { // vérifier que payment_status a la valeur Completed // En dev mettre Pending en prod Completed PENDING if ( $payment_status == "Completed") { //vérification de l'email si = a émail de vues if ( $email_account == $receiver_email) { //bon régard que le mec veut pas nous arnaquér if ( $payment_amount == $sommeTotalJr) { include_once dirname(__FILE__).'/../../modeles/paypal/jr/paypalvalide.php'; file_put_contents("log",print_r($_POST,true)); exit(); } else { //tentative de fraude include_once dirname(__FILE__).'/../../modeles/paypal/jr/paypalnonvalide.php'; file_put_contents("log",print_r($_POST,true)); } } } else { //erreur de payment. include_once dirname(__FILE__).'/../../modeles/paypal/jr/paypalInvalide.php'; file_put_contents("log",print_r($_POST,true)); } } else if (strcmp ($res, "INVALID") == 0) { include_once dirname(__FILE__).'/../../modeles/paypal/jr/paypalErreur.php'; $msg = 'Message de l\'IPN : '.$res; mail(' 3@live.fr', 'erreur IPN', $msg); } } fclose ($fp); }

10 réponses

Grimille, il y a 11 ans

Salut,

J'avais eu le même problème il fut un temps, et cela venait de l'adresse ssl de paypal qui n'était plus la bonne. Je n'ai plus l'adresse exacte en tête étant donné que je boycotte paypal pour payplug désormais. Essaie de regarder de ce côté :)

Dams, il y a 11 ans

J'a oublier de prciser que le vendeur reçois bien l'argent mais le client ne reçois rien

Grimille, il y a 11 ans

Donc ça coince bien au niveau de la requête IPN, vérifie l'adresse de paypal dans la documentation, je pense que le problème vient de là.

Il y a de la duplication de code dans le script notamment au niveau du foreach sur la variable $_POST

Dams, il y a 11 ans

Ha oui merci ! j'ai effectuer des recherche sur la doc j'ai trouver ça : https://developer.paypal.com/docs/classic/ipn/gs_IPN/

// Set up the acknowledgement request headers $header = "POST /cgi-bin/webscr HTTP/1.1\r\n"; // HTTP POST request $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; // Open a socket for the acknowledgement request $fp = fsockopen('tls://www.sandbox.paypal.com', 443, $errno, $errstr, 30); // Send the HTTP POST request back to PayPal for validation fputs($fp, $header . $req);

On va essayer en ésperant que ca fonctionne merci de ton aide

Grimille, il y a 11 ans

Dans leur docs, ils suggèrent de passer à HTTP 1.1, change le :)

Grimille, il y a 11 ans

C'est bien ce que je disais, l'adresse du socket est ssl://ipnpb.paypal.com désormais :)
Franchement, je te conseille de passer à Payplug qui prélève moins de taxes et permet les paiements par carte bancaire sans obligation d'avoir un compte pour l'utilisateur. Et en plus, c'est une start-up Française !

Dams, il y a 11 ans

je vais essayer merci de ton aide don je remplace $fp = fsockopen('tls://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
par ca : ssl://ipnpb.paypal.com

Grimille, il y a 11 ans

Oui, tout à fait

Dams, il y a 11 ans

ça ne fonctione pas :/ sa ne ping même pas l'adresse

Grimille, il y a 11 ans

Mmmh, tu as bien changé la version de HTTP ?
Au pire, la solution se trouve dans leur doc :)