2016-03-31 34 views
0

Birisi bana burada yardımcı olabilir umuyorum.Paypal (IPN) MySQL Sorgu Tweak

Kodum iyi çalışıyor ancak bir işlem gerçekleştiğinde DB'ye biraz veri eklemek için birazcık ince ayar yapmak istiyorum. Şimdiye kadar benim tweaks komut dosyasını kırdı.

Temelde ondalık olarak ayarlanmış "kullanıcı" tablosuna "bağışlanan" bir sütun oluşturduk. "Kullanıcı" tablosundaki kullanıcı kimliğinin Paypal tarafından döndürülen $option_selection2 ile eşleştiği o sütuna eklenecek işlemin $mc_gross değerini istiyorum. $option_selection2, bir kullanıcı siteye bağışta bulunduğunda ve IPN'de içerdiğinde kullanıcı kimliğini (sayı) alır. Bu, daha sonra bağışladığı her şey için her bir kullanıcı için bir çalışma toplamı oluşturmalıdır.

ben eklemek çalışıyorum kodudur:

$userquery = UPDATE ".PREFIX."user SET donated = donated + '".$mc_gross."' WHERE userID = '".$option_selection2."'; 
$result = mysql_query($userquery); 

Aşağıdaki tam komut görebilirim ve

<?php 
// 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"; 

// If testing on Sandbox use: 
//$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr,   30); 
$fp = fsockopen ('ssl://ipnpb.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']; 
$mc_gross = $_POST['mc_gross']; 
$txn_id = $_POST['txn_id']; 
$quantity = $_POST['quantity']; 
$payment_date = $_POST['payment_date']; 
$first_name = $_POST['first_name']; 
$last_name = $_POST['last_name']; 
$payment_type = $_POST['payment_type']; 
$memo = $_POST['memo']; 
$payer_email = $_POST['payer_email']; 
$txn_type = $_POST['txn_type']; 
$address_street = $_POST['address_street']; 
$address_city = $_POST['address_city']; 
$address_state = $_POST['address_state']; 
$address_zip = $_POST['address_zip']; 
$address_country = $_POST['address_country']; 
$item_number = $_POST['item_number']; 
$tax = $_POST['tax']; 
$option_name1 = $_POST['option_name1']; 
$option_selection1 = $_POST['option_selection1']; 
$option_name2 = $_POST['option_name2']; 
$option_selection2 = $_POST['option_selection2']; 
$mc_currency = $_POST['mc_currency']; 
$mc_fee = $_POST['mc_fee']; 
$parent_txn_id = $_POST['parent_txn_id']; 
$pending_reason = $_POST['pending_reason']; 
$reason_code = $_POST['reason_code']; 


// subscription specific vars 

$subscr_id = $_POST['subscr_id']; 
$subscr_date = $_POST['subscr_date']; 
$subscr_effective = $_POST['subscr_effective']; 
$period1 = $_POST['period1']; 
$period2 = $_POST['period2']; 
$period3 = $_POST['period3']; 
$amount1 = $_POST['amount1']; 
$amount2 = $_POST['amount2']; 
$amount3 = $_POST['amount3']; 
$mc_amount1 = $_POST['mc_amount1']; 
$mc_amount2 = $_POST['mc_amount2']; 
$mc_amount3 = $_POST['mcamount3']; 
$recurring = $_POST['recurring']; 
$reattempt = $_POST['reattempt']; 
$retry_at = $_POST['retry_at']; 
$recur_times = $_POST['recur_times']; 
$username = $_POST['username']; 
$password = $_POST['password']; 

//auction specific vars 

$for_auction = $_POST['for_auction']; 
$auction_closing_date = $_POST['auction_closing_date']; 
$auction_multi_item = $_POST['auction_multi_item']; 
$auction_buyer_id = $_POST['auction_buyer_id']; 



//DB connect creds and email 
include("_mysql.php"); 
$DB_Server = $host; //your MySQL Server 
$DB_Username = $user; //your MySQL User Name 
$DB_Password = $pwd; //your MySQL Password 
$DB_DBName = $db; //your MySQL Database Name 


if (!$fp) { 
// HTTP ERROR 
} else { 
fputs ($fp, $header . $req); 
while (!feof($fp)) { 
$res = fgets ($fp, 1024); 
if (strcmp ($res, "VERIFIED") == 0) { 



//create MySQL connection 
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) 
or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" .  mysql_errno()); 


//select database 
$Db = @mysql_select_db($DB_DBName, $Connect) 
or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno()); 


$fecha = date("m")."/".date("d")."/".date("Y"); 
$fecha = date("Y").date("m").date("d"); 

//check if transaction ID has been processed before 
$checkquery = "select txnid from ".PREFIX."donate_transactions where  txnid='".$txn_id."'"; 
$sihay = mysql_query($checkquery) or die("Duplicate txn id check query  failed:<br>" . mysql_error() . "<br>" . mysql_errno()); 
$nm = mysql_num_rows($sihay); 
if ($nm == 0){ 

//execute query 
if($payment_status == "Completed"){ 

    $urlquery = mysql_query("SELECT hpurl FROM ".PREFIX."settings"); 
    $urlfa = mysql_fetch_array($urlquery); 
    $returnurl = $urlfa['hpurl'];   
    $fields = array('url'=>urlencode($returnurl),'prnr'=>urlencode("1")); 
    foreach($fields as $key=>$value) { $fields_string .= '&'.$key.'='.$value; } 
    rtrim($fields_string,'&amp;'); 
    $ch = curl_init(); 

$userquery = UPDATE ".PREFIX."user SET donated = donated + '".$mc_gross."' WHERE userID = '".$option_selection2."'; 
    $result = mysql_query($userquery); 



    $strQuery = "insert into ".PREFIX."donate_transactions(paymentstatus,buyer_email,firstname,lastname,stree t,city,state,zipcode,country,mc_gross,mc_fee,itemnumber,itemname,os0,on0,os1,on1 ,quantity,memo,paymenttype,paymentdate,txnid,pendingreason,reasoncode,tax,datecr eation,txntype,mc_currency) values ('".$payment_status."','".$payer_email."','".$first_name."','".$last_name."','". $address_street."','".$address_city."','".$address_state."','".$address_zip."',' ".$address_country."','".$mc_gross."','".$mc_fee."','".$item_number."','".$item_ name."','".$option_name1."','".$option_selection1."','".$option_name2."','".$opt ion_selection2."','".$quantity."','".$memo."','".$payment_type."','".$payment_da te."','".$txn_id."','".$pending_reason."','".$reason_code."','".$tax."','".$fech a."','".$txn_type."','".$mc_currency."')"; 
    $result = mysql_query($strQuery) or die("Default - donate_transactions, Query failed:<br>" . mysql_error() . "<br>" . mysql_errno()); 







    //check if there is an historical entry 
    $checkhistorical = "select * from ".PREFIX."donate_history where year='".date("Y")."' AND month='".date("m")."'"; 
    $thism = mysql_query($checkhistorical); 
    $nums = mysql_num_rows($thism); 
    if ($nums == 0){ 
     //create entry 
     $donatesettings=mysql_query("SELECT * FROM ".PREFIX."donate_settings"); 
     $ds = mysql_fetch_array($donatesettings); 
     $strQuery = "insert into ".PREFIX."donate_history(year,month,total,target,donates) values ('".date("Y")."','".date("m")."','".$mc_gross."','".$ds['monthlytarget']."',1)"; 
     $result = mysql_query($strQuery); 
    } 
    else{ 
     //update existing 
     $ts = mysql_fetch_array($thism); 
     $newTotal = $ts['total'] + $mc_gross; 
     $donates = $ts['donates'] + 1; 
     $strQuery = "UPDATE ".PREFIX."donate_history SET total='".$newTotal."',donates='".$donates."' WHERE year='".date("Y")."' AND month='".date("m")."'"; 
     $result = mysql_query($strQuery); 
    } 

} 

echo "Verified"; 

} 
} //END OF VALIDE 

// if the IPN POST was 'INVALID'...do this 


else if (strcmp ($res, "INVALID") == 0) { 
// log for manual investigation 

} 
} 
fclose ($fp); 
} 
?> 

Birisi işaret edebilir umut ekstra sorgu eklemek çalışıyorum nerede beni burada doğru yönde!

çok teşekkürler

cevap

1
$userquery = UPDATE ".PREFIX."user SET donated = donated + '".$mc_gross."' WHERE userID = '".$option_selection2."'; 

sorgunun başlangıcında bir alıntı kaçırdığınızı görünüyor? Bu sözdizimsel hatayı anlamadınız mı?