2010-01-18 5 views
0

J'ai écrit un système de dons automatisé pour quelqu'un, afin que les gens qui jouent sur ses serveurs de jeu puissent entrer leurs informations, faire un don, et être automatiquement ajoutés à une base de données. Cela fonctionne très bien, mais je ne suis pas très php saavy, donc j'espère que vous pourrez jeter un coup d'oeil et me dire ce que je devrais ajouter. J'ai besoin de les enlever quand l'abonnement se termine, ce qui je pense est subscr_eot, mais je ne peux pas trouver de bons exemples de l'utiliser. Et pour le reste, j'espère juste que ça va bien, merci!Passer en revue mon Paypal IPN Handler Please

<?php 

// database 
include_once('config.php'); 

//Connect 
$db_connect = mysql_connect($DB_host, $DB_username, $DB_password) or die(mysql_error()); 
mysql_select_db($DB_name) or die(mysql_error()); 

// read the post from PayPal system and add 'cmd' 
$req = 'cmd=_notify-validate'; 

foreach ($_POST as $key => $value) 
{ 
    $value = urlencode(stripslashes($value)); 
    $req .= "&$key=$value"; 
} 

// post back to PayPal system to validate 
$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 ('www.paypal.com', 80, $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']; 
$txn_type = $_POST['txn_type']; 
$receiver_email = $_POST['receiver_email']; 
$first_name = $_POST['first_name']; 
$last_name = $_POST['last_name']; 
$payer_email = $_POST['payer_email']; 
$steam_id = $_POST['custom']; 

if ($fp) 
{ 
    fputs ($fp, $header . $req); 
    while (!feof($fp)) 
    { 
     $res = fgets ($fp, 1024); 
     switch ($res) 
     { 
      //Payment is Validated 
      case 'VERIFIED': 

       if(strcmp($payment_status, "Completed") == 0) 
       { 
        $firstlast = $first_name[0] . $last_name; 
        $username = strtolower($firstlast); 

        $query = "INSERT INTO sb_admins (user, authid, password, gid, email, validate, extraflags, immunity, srv_group, srv_password) VALUES('". $username ."', '". $steam_id ."', '', -1, '". mysql_real_escape_string($payer_email) ."', 0, 0, 0, '". $sm_group ."', 'password')"; 
        mysql_query($query) or die(mysql_error()); 
       } 

       // check that txn_id has not been previously processed 
       // check that receiver_email is your Primary PayPal email 
       // check that payment_amount/payment_currency are correct 
       // process payment 
       break; 

      case 'INVALID': 

       // PAYMENT INVALID & INVESTIGATE MANUALLY! 
       $to  = $receiver_email; 
       $subject = 'XA - BattleClan | Invalid Donation'; 
       $message = ' 

       Dear Administrator, 

       A donation has been made but is flagged as INVALID. 
       Please verify the payment manually and contact the donator. 

       Donator Email: '.$email.' 
       '; 
       $headers = 'From:[email protected]' . "\r\n"; 

       mail($to, $subject, $message, $headers); 
       break; 

      default: 
       break; 
     } 
    } 
fclose ($fp); 
} 

?>

+0

Est-ce que paypal en émet une autre ($ payment_status, "Completed") chaque fois que l'abonnement est réussi? J'aime votre suggestion, mais je dois m'assurer que s'ils sont inscrits, je peux mettre à jour la date de paiement/la date de la durée. –

Répondre

0

Pour tous ceux qui cherchent à l'avenir, paypal n'appelle votre gestionnaire de nouveau. Il envoie une notification à l'URL que vous avez définie pour notify_url.

Questions connexes