Avoir son pack après achat

Statut
N'est pas ouverte pour d'autres réponses.

@iHaz ✔️

Premium
Inscription
12 Février 2015
Messages
1 807
Réactions
386
Points
8 086
RGCoins
25
Bonjour membre rg,
Je cherche une personne qui peu m’envoyer m'aider a propos de mon site web.

Comment avoir son pack après achat car quand la personne va sur mon site web elle acheté le pack elle a pas direct son packs
image


Le codes dans buy.php

Code:
<?php
$newssql = $odb -> query("SELECT * FROM `plans` ORDER BY `price` ASC");
while($row = $newssql ->fetch())
                        {
             
                                echo "<div class=\"title\"><h6></h6></div>";
                echo "<center><div ;\">                          

                             <tr><td>{$row['name']}</td><td>{$row['mbt']}</td><td><span class=\"left\"><b></b></span><span class=\"right\">{$row['length']} {$row['unit']}</span><br /></td><td> {$row['price']}€ </td><td>60 Gb/s</td><td><a href=\"order.php?id={$row['ID']}\" class=\"btn btn-success\"><span>Acheter !</span></a></td></tr>
                          

</div></center>";
            echo "";
                        }


Et le code dans paypalipn.php

Code:
<?php
define("_VALID_PHP", true);
  if (isset($_POST['payment_status'])) {
      require_once("../includes/db.php");
      require_once("../includes/init.php");
      set_time_limit(0);   
      function verifyTxnId($txn_id, $odb)
      {       
          $sql = $odb->prepare("SELECT COUNT(id) FROM `payments` WHERE tid = :tid LIMIT 1");
     $sql -> execute(array(":tid" => $txn_id));
          if ($sql -> fetchColumn(0) > 0)
              return false;
          else
              return true;
      }
  
      $req = 'cmd=_notify-validate';
  
      foreach ($_POST as $key => $value) {
          $value = urlencode(stripslashes($value));
          $req .= '&' . $key . '=' . $value;
      }
      $demo = false;
      $url = 'www.paypal.com';
  
      $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($url, 80, $errno, $errstr, 30);
  
      $payment_status = $_POST['payment_status'];
      $receiver_email = $_POST['business'];
      list($membership_id, $user_id) = explode("_", $_POST['item_number']);
      $mc_gross = $_POST['mc_gross'];
      $txn_id = $_POST['txn_id'];
  
      $getxn_id = verifyTxnId($txn_id, $odb);
      $pricesql = $odb -> prepare("SELECT `price` FROM `plans` WHERE id = :id");
      $pricesql -> execute(array(":id" => (int)$membership_id));
      $price = $pricesql -> fetchColumn(0);
  
      $pp_emailsql = $odb -> query("SELECT `email` FROM `gateway` LIMIT 1");
      $pp_email = $pp_emailsql->fetchColumn(0);
  
      if (!$fp) {
          echo $errstr . ' (' . $errno . ')';
      } else {
          fputs($fp, $header . $req);
      
          while (!feof($fp)) {
         $res = fgets($fp, 1024);
              if (strcmp($res, "VERIFIED") == 0) {
                  if (preg_match('/Completed/', $payment_status)) {
                      if ($receiver_email == $pp_email && $mc_gross == $price && $getxn_id == true) {
             $usernamesql = $odb -> prepare("SELECT `username` FROM `users` WHERE `id` = :id");
             $usernamesql -> execute(array(":id" => (int)$user_id));
             $username = $usernamesql -> fetchColumn(0);

             $data = array(
                ':tid' => $txn_id,
                ':Plan' => (int)$membership_id,
                ':email' => $_POST['payer_email'],
                ':user' => (int)$user_id,
                ':Paid' => (float)$mc_gross,
             );
             $odb -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
             $insertsql = $odb -> prepare("INSERT INTO `payments` VALUES(NULL, :Paid, :Plan, :user, :email, :tid, UNIX_TIMESTAMP())");
             $insertsql -> execute($data);
                      
             $getPlanInfo = $odb -> prepare("SELECT `unit`,`length` FROM `plans` WHERE `ID` = :Plan");
                          $getPlanInfo -> execute(array(':Plan' => (int)$membership_id));
                          $plan = $getPlanInfo -> fetch(PDO::FETCH_ASSOC);
                          $unit = $plan['unit'];
                          $length = $plan['length'];
                          $newExpire = strtotime("+{$length} {$unit}");
                          $updateSQL = $odb -> prepare("UPDATE `users` SET `expire` = :expire, `membership` = :Plan WHERE `id` = :id");
                          $updateSQL -> execute(array(':expire' => $newExpire, ':Plan' => (int)$membership_id, ':id' => (int)$user_id));

               }                  
                  }
              
              }
          }
          fclose($fp);
      }
  }
?>

Merci de m'aider
 
Salut,

Je connais pas trop l'API de PayPal, mais tu fais une conditions, si l'utilisateur a acheter { on lui envoie ce qu'il a acheter }
 
Salut,

Tu reçois bien un retour de paypal (quelqu'il soit) ?

Tu passe bien dans cette condition ?
PHP:
if($receiver_email == $pp_email && $mc_gross == $price && $getxn_id == true) {

Si tu ne sais pas à quel endroit passe ton code tu peux écrire un petit fichier debug.txt par exemple
Et à chaque condition, tu rajoutes une ligne dans ce fichier.

Mais si ton code passe dans la condition ci-dessus, théoriquement, c'est là que tu déclenche les actions.

Après, je n'ai pas vérifié la validité de l'IPN, mais au premier coup d'oeil, il semble être bon.


Sinon, pour les dates d'expiration, tu devrais plutôt utiliser un champ "datetime" dans ta base de donnée et la classe php . C'est plus simple à lire, à manipuler, et ça diminue le risque d'erreur par rapport au timestamp :)


PS: pour plus de clarté, utilise le bbcode [ php ] pour avoir la colorisation syntaxique.
Code:
[php]$ton_code = 'php';[/php]


@+
 
Dernière édition:
Salut,

Tu reçois bien un retour de paypal (quelqu'il soit) ?

Tu passe bien dans cette condition ?
PHP:
if($receiver_email == $pp_email && $mc_gross == $price && $getxn_id == true) {

Si tu ne sais pas à quel endroit passe ton code tu peux écrire un petit fichier debug.txt par exemple
Et à chaque condition, tu rajoutes une ligne dans ce fichier.

Mais si ton code passe dans la condition ci-dessus, théoriquement, c'est là que tu déclenche les actions.

Après, je n'ai pas vérifié la validité de l'IPN, mais au premier coup d'oeil, il semble être bon.


Sinon, pour les dates d'expiration, tu devrais plutôt utiliser un champ "datetime" dans ta base de donnée et la classe php . C'est plus simple à lire, à manipuler, et ça diminue le risque d'erreur par rapport au timestamp :)


PS: pour plus de clarté, utilise le bbcode [ php ] pour avoir la colorisation syntaxique.
Code:
[php]$ton_code = 'php';[/php]


@+
Quelle est votre Skype j’errais besoin de l'aide
 
Statut
N'est pas ouverte pour d'autres réponses.
Retour
Haut