2013-11-11 8 views
0

Итак, я работаю над получением регулярных платежей для работы на веб-сайте, над которым я работаю (на PHP). У меня включен IPN на моей учетной записи Paypal, и моя кнопка настроена и т. Д.Интеграция IPN Paypal

Когда я нажимаю на кнопку на своем веб-сайте, она берет меня в Paypal, и я завершаю процесс регистрации. Затем он пересылает меня обратно к правильному URL-адресу, причем большой «auth» получает переменную. История транзакций можно просмотреть как на моих продавцах, так и на счетах покупателя.

Проблема с обновлением моей базы данных (mysql). Я пробовал несколько различных сценариев IPN и собирал разные из Google, Stackoverflow и различных учебных пособий. Ни один из тех, которые я пробовал, не обновлял мою БД, которая заставляет меня думать, что это что-то с моим подходом, это происходит неправильно.

Вот мой ipn.php сценарий:

<?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); 

$notify_email = "xxx"; //email address to which debug emails are sent to 
$DB_Server = "xxx"; //your MySQL Server 
$DB_Username = "xxx"; //your MySQL User Name 
$DB_Password = "xxx"; //your MySQL Password 
$DB_DBName = "xxx"; //your MySQL Database Name 


if (!$fp) 
{ 
    // HTTP ERROR 
} 
else 
{ 
mail($notify_email, "IPN Triggered 1", "IPN Triggered 1"); 

fputs ($fp, $header . $req); 

while (!feof($fp)) 
{ 
    //Already used this 
    //$res = fgets ($fp, 1024); 

    //Using this to see if it sends response 
    $res = stream_get_contents($fp, 1024); 


    if (strcmp ($res, "VERIFIED") == 0) 
    { 
     mail($notify_email, "VERIFIED 1", "VERIFIED 1"); 

     //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 txn_id FROM payments WHERE txn_id='".$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 ($txn_type == "subscr_signup") 
      { 
       $strQuery = "INSERT INTO payments SET txn_id='".$txn_id."', user_id='$custom'"; 

       $result = mysql_query($strQuery) or die("Cart - paypal_payment_info, Query failed:<br>" . mysql_error() . "<br>" . mysql_errno()); 
      } 
     // send an email in any case 
     //echo "Verified"; 
      mail($notify_email, "VERIFIED IPN", "$res\n $req\n $strQuery\n $struery\n $strQuery2"); 
     } 
     else 
     { 
      // send an email 
      mail($notify_email, "VERIFIED DUPLICATED TRANSACTION", "$res\n $req \n $strQuery\n $struery\n $strQuery2"); 
     } 
    } 

    // if the IPN POST was 'INVALID'...do this 
    else if (strcmp ($res, "INVALID") == 0) 
    { 
     // log for manual investigation 
     mail($notify_email, "INVALID IPN", "$res\n $req"); 
    } 
} 

fclose ($fp); 
} 
?> 
+0

Это не похоже на то, что любые ваши переменные запроса установлены где угодно. '$ txn_id', например. – Machavity

+0

Спасибо за комментарий, у меня есть мои переменные, установленные прямо ниже, где установлены мои переменные DB, и прямо над оператором if. Я их вынул, потому что это довольно длинный список переменных, которые я не чувствовал необходимости включать. –

ответ

0

По какой-то причине, отключение и повторное включение затем моя IPN на Paypal, казалось, чтобы решить эту проблему.

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