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);
}
Mmmh, tu as bien changé la version de HTTP ?
Au pire, la solution se trouve dans leur doc :)
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é :)
J'a oublier de prciser que le vendeur reçois bien l'argent mais le client ne reçois rien
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
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
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 !
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