| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 
 | <?php
 
//permet de traiter le retour ipn de paypal
$email_account = "*****.**********-facilitator@outlook.fr";
// prépare la requête de vérification
$req = 'cmd=_notify-validate';
 
// ajoute le message IPN au format NVP à la requête de vérification
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
 
// définition des headers pour la requête de vérification
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
 
//test
$header .= "Host: www.sandbox.paypal.com\r\n";
// production
//$header .= "Host: ipnpb.paypal.com:443\r\n";
 
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
 
 
// Ouverture du socket
 
// test
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
// production
//$fp = fsockopen ('ssl://ipnpb.paypal.com', 443, $errno, $errstr, 30);
 
$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'];
parse_str($_POST['custom'],$custom);
 
// s'il y a une erreur lors de l'ouverture du socket
if (!$fp) {
  // on s'envoie un mail pour être informé de l'erreur
  $msg = "Erreur de socket, l'url n'a pas pu être ouverte";
  mail('*******.******@outlook.fr', 'erreur socket', $msg);
}
 
else {
  // on post la requête de vérification
  fputs ($fp, $header . $req);
 
  // créé une boucle tant qu'on est pas arrivé à la fin du fichier
  while (!feof($fp)) {
    // lit la réponse de paypal
    $res = fgets ($fp, 1024);
    if (strcmp ($res, "VERIFIED") == 0) {
    // vérifier que payment_status a la valeur Completed
      if ( $payment_status == "Completed") {
         if ( $email_account == $receiver_email) {
            /**
             * C'EST LA QUE TOUT SE PASSE
             * PS : tjrs penser à vérifier la somme !!
             */
 
            if($payment_amount == ($panier->total() + $panier->frais())){
 
              require_once 'db.php';
 
              $saveBDD = $pdo->prepare('INSERT INTO orders SET (user_id, txn_paypal_id, amount) VALUES(:user_id, :txn_paypal_id, :amount)');
              $saveBDD->execute(array(
                'user_id' => $custom['user_id'],
                'txn_paypal_id' => $txn_id,
                'amount' => $payment_amount
              ));
 
            }
            else{
              mail('*****.**********@outlook.fr', '$objet', '$message');
            }
         }
         else{
            header('location:'.'errorPayment.php');
         }
      }
      // si la transaction est invalide
      else if (strcmp ($res, 'INVALID') == 0) {
        // on s'envoie un mail pour être informé de l'erreur
        $msg = 'Message de l\'IPN : '.$res;
        mail('*******.********@outlook.fr', 'erreur IPN', $msg);
      }
    } 
 
    fclose ($fp);
  }
}
?> |