2015-03-05 2 views
0

Я был в этом веком, читая бесчисленные учебники, руководства и т. Д. Здесь и paypal без везения!Борьба с paypal сообщить об ошибке

Я установил кнопку покупки PayPal на моем сайте. Протестировав это с помощью песочницы Paypal, часть оплаты работает. Однако при возвращении на сайт он не дает пользователю то, что они купили!

Это на странице, где они могут выбрать там покупки:

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"> 
    <input type="hidden" name="cmd" value="_xclick"> 
    <input type="hidden" name="custom" value="<?=$person?>"> 
    <input type="hidden" name="business" value="[email protected]"> 
    <input type="hidden" name="item_name" value="5000 Credits for <?=$person?>"> 
    <input type="hidden" name="item_number" value="5000 Credits"> 
    <input type="hidden" name="amount" value="5.00"> 
    <input type="hidden" name="no_shipping" value="1"> 
    <input type="hidden" name="no_note" value="0"> 
    <input type="hidden" name="currency_code" value="USD"> 
    <input type="hidden" name="notify_url" value="<?=$site[location]?>ipn.php"> 
    <input type="hidden" name="return" value="<?=$site[location]?>creditsdone.php"> 
    <input type="hidden" name="cancel_return" value="<?=$site[location]?>"> 
    <input src="images/buy_button.gif" height="22" type="image" width="156" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> 
</form> 

creditsdone.php просто говорит: «Спасибо за покупку». Это работает, когда вы вернетесь к этому после покупки.

Страница ipn.php однако не работает. По возвращении на веб-сайт на счет игроков не добавляются кредиты.

Ниже на странице ipn.php:

<? 
include("funcs.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"; 
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30); 

// assign posted variables to local variables 
// note: additional IPN variables also available -- see IPN documentation 
/*$item_name = $_POST['item_name']; 
$receiver_email = $_POST['receiver_email']; 
$item_number = $_POST['item_number']; 
$invoice = $_POST['invoice']; 
$payment_status = $_POST['payment_status']; 
$payment_gross = $_POST['payment_gross']; 
$txn_id = $_POST['txn_id']; 
$payer_email = $_POST['payer_email']; 
*/ 
if (!$fp) { 
    // ERROR 
    echo "$errstr ($errno)"; 
} else { 
    fputs ($fp, $header . $req); 
    while (!feof($fp)) { 
    $res = fgets ($fp, 1024); 
    if (strcmp ($res, "VERIFIED") == 0) { 
     echo "<pre>"; 
     print_r($_POST); 
     if($_POST[payment_status]=="Completed") { 

if ((!fetch("SELECT tranid FROM $tab[paypal] WHERE tranid='$txn_id';")) && ($business == "[email protected]")) 
    { 

$subexpire = time()+864000; 

    if($payment_gross == "5.00"){$turns="5000";} 
elseif($payment_gross == "10.00"){$turns="7250";} 
elseif($payment_gross == "25.00"){$turns="10000";} 
elseif($payment_gross == "50.00"){$turns="12500";} 
elseif($payment_gross == "100.00"){$turns="25000";} 
elseif($payment_gross == "200.00"){$turns="57500";} 
elseif($payment_gross == "300.00"){$turns="90000";} 
elseif($payment_gross == "400.00"){$turns="132500";} 
elseif($payment_gross == "500.00"){$turns="180000";} 
elseif($payment_gross == "1000.00"){$turns="400000";} 
elseif($payment_gross == "15000.00"){$turns="700000";} 

else{$turns="0";} 

     $expires=$time+864000;//10 days 
     $total=$payment_gross-$payment_fee; 

//update database to add turns to user in game they bought for 
     mysql_query("UPDATE $tab[user] SET status='supporter', statusexpire='$expires', credits=credits+$turns WHERE username='$custom'"); 

//insert into database paypal information 
     $buying_user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE username = '". $custom ."'")); 

     $time = time(); 
     $fetch_the_games = mysql_query("SELECT * FROM games WHERE starts < $time AND ends > $time"); 
     while($credit_games = mysql_fetch_array($fetch_the_games)) 
     { 
      mysql_query("UPDATE r$credit_games[round]_pimp SET status = '". supporter ."' WHERE code = '". $buying_user[code] ."'"); 
     } 
     mysql_query("INSERT INTO $tab[paypal] (tranid,amount,fee,user,datebought) VALUES ('$txn_id','$payment_gross','$payment_fee','$custom','$time');"); 
//send email to admin about transaction from paypal--ADMIN-check database to make sure transaction went through to game 
     mail_2("$turns credits where bought!","\nDear Admin,\n\nYou just received a payment from $custom for $turns credits\n\nCost: $$payment_gross\nFee: $$payment_fee\n----------\nTotal: $$total","[email protected]"); 

    }else{echo"Cannot refresh transaction!";} 

     } 
     // check the payment_status is Completed 
     // check that txn_id has not been previously processed 
     // check that receiver_email is an email address in your PayPal account 
     // process payment 
     } 
     else if (strcmp ($res, "INVALID") == 0) { 
     // log for manual investigation 
     } 
    } 
    fclose ($fp); 
} 
?> 

Я понимаю, это может показаться довольно запутанной, я новичок в PHP и полностью застрял, так что любая помощь или советы будут весьма признателен !!

Спасибо!

+0

Что вы сделали для отладки ipn.php? подтвердите свой хит, подтвердите значения, подтвердите db querry ... –

+1

Посмотрите это руководство по [тестированию PayPal IPN] (https://www.angelleye.com/test-paypal-ipn/), и вы должны быть в состоянии найти ваш вопрос. –

+0

Спасибо, Андрей, я посмотрю. Кроме того, извините Дагон, я очень новичок в кодировании в целом. Я получил вышеупомянутое из сценария, который я купил некоторое время назад, и медленно добавлял его, пока я преподаю себе php. Я понимаю основы, но приведенный выше код немного над моей головой! Я не совсем уверен, что вы подразумеваете под debug ipn.php? –

ответ

-1

Проблема здесь

mysql_query("UPDATE r$credit_games 

Изменения в

mysql_query("UPDATE credit_games 

Или к тому, что ваше имя запроса.

Это должно быть credit_games, у вас есть ошибка с датой $, поэтому, пожалуйста, сделайте паузу, спите несколько часов, а затем продолжайте работать хехехе.

+0

нет, потому что он использует возвращаемое значение из IPN, а не возвращаемый url –

+0

Я думаю, что нашел здесь ошибку здесь mysql_query ("UPDATE r $ credit_games это должно быть credit_games у вас есть ошибка $ give –

+0

haha! Хорошо, спасибо, приятель! Я посмотрю на это! –

Смежные вопросы