Bonjour à tous j'ai suivi un tutoriel pour communiquer avec paypal et permettre de payer avec, ça marche très bien aucun soucis, cependant j'aimerais que lorsque le paiement est validé, et bien que l'utilisateur gagne de l'argent virtuel sur son compte (en somme, update la colonne money dans la bdd). Je sais comment faire pas de problème. Mais ça ne marche pas, et je ne trouve pas de solution, peut-être que vous en saurez plus que moi à ce sujet.

Voici le code qui permet de communiquer avec paypal (ipn.php)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
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
<?php
$email_account = 'saooty-sell@gmail.com';
$req = 'cmd=_notify-validate';
 
foreach ($_POST as $key => $value)
{
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
 
$header = "POST /cgi-bin/webscr HTTP/1.1\r\n"; // HTTP1.1 Update
$header .= "Content-Length: " . strlen($req) . "\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n"; // Sandbox Host
//$header .= "Host: ipnpb.paypal.com\r\n"; // Live Host
$header .= "Connection: close\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
 
// assign posted variables to local variables
$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_user = $_POST['custom'];
 
if (!$fp)
{
  header('Location: http://blackcraft.pulseheberg.org/paypal/cancel.php');
}
else
{
    fputs ($fp, $header . $req);
    while (!feof($fp))
    {
      $res = fgets ($fp, 1024);
      if (strcmp ($res, "VERIFIED") == 0)
      {
        if($payment_status == "Completed")
        {
          if($email_account == $receiver_email)
          {
            if($payment_amount == 2.39)
            {
              if($payment_currency == "EUR")
              {
                // PAS D'ERREUR
                $db = new PDO('mysql:host=mysql.pulseheberg.org;dbname=site', 'root', '');
 
                $req = $db->prepare('SELECT * FROM wc_users WHERE id = :id');
                $req->execute(array('id' => $id_user));
                $data = $req->fetch();
 
                $money = $data['money'];
                $new_money = $money + 50;
 
                $req = $db->prepare('UPDATE wc_users SET money = :money WHERE id = :id');
                $req->execute(array('money' => $new_money, 'id' => $id_user));
              }
              else
              {
                header('Location: http://blackcraft.pulseheberg.org/paypal/cancel.php');
              }
            }
            else
            {
              header('Location: http://blackcraft.pulseheberg.org/paypal/cancel.php');
            }
          }
          else
          {
            header('Location: http://blackcraft.pulseheberg.org/paypal/cancel.php');
          }
        }
        else
        {
          header('Location: http://blackcraft.pulseheberg.org/paypal/cancel.php');
        }
      }
      else if (strcmp ($res, "INVALID") == 0)
      {
        header('Location: http://blackcraft.pulseheberg.org/paypal/cancel.php');
      }
    } // Fin du while
fclose ($fp);
}
?>
Et voici le formulaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" value="2" name="amount" />
<input name="currency_code" type="hidden" value="EUR" />
<input name="shipping" type="hidden" value="0.00" />
<input name="tax" type="hidden" value="0.39" />
<input name="return" type="hidden" value="http://blackcraft.pulseheberg.org/paypal/success.php" />
<input name="cancel_return" type="hidden" value="http://blackcraft.pulseheberg.org/paypal/cancel.php" />
<input name="notify_url" type="hidden" value="http://blackcraft.pulseheberg.org/paypal/ipn.php" />
<input name="cmd" type="hidden" value="_xclick" />
<input name="business" type="hidden" value="saooty-sell@gmail.com" />
<input name="item_name" type="hidden" value="50 emeraudes pour Blackcraft" />
<input name="no_note" type="hidden" value="1" />
<input name="lc" type="hidden" value="FR" />
<input name="bn" type="hidden" value="PP-BuyNowBF" />
<input name="custom" type="hidden" value="<?php echo $_SESSION['id']; ?>" />
<input class="btn btn-success" type="submit" value="Acheter via PayPal">
</form>
Merci beaucoup