2015-05-20 3 views
0

Я установил функцию автоматического пожертвования для веб-сайта, но данные не записываются в базу данных, когда IPN проверяется paypal. Журнал IPN записывается на веб-хост, и он говорит, что платеж подтвержден, но данные не записываются в базу данных.Не правильно записывать в базу данных MySQL

Вот небольшой фрагмент кода, который обрабатывает СПИ

if ($p->validate_ipn()) { 

    $fh = fopen(".ipn", "a"); 
    fwrite($fh, print_r($p->ipn_data, true)); 
    fclose($fh); 

    if($p->ipn_data["payment_status"] != "Completed") die(); 

    if($p->ipn_data["mc_gross"] > 0) { 
     $user = $p->ipn_data["custom"]; 
     $date = $p->ipn_data["payment_date"]; 
     $prodid = $p->ipn_data["item_number"]; 
     $amount = $p->ipn_data["mc_gross"]; 
     $amountTickets = 1; 

     //$user = str_replace("-", "_", $user); 
     //$user = str_replace(" ", "_", $user); 
     $user = str_replace("-", " ", $user); 
     $user = str_replace("_", " ", $user); 
     $user = mysql_real_escape_string($user); 
     $conn = mysql_connect("localhost", "USERNAME", "PASSWORD"); 
     mysql_select_db('web_donations', $conn); 
     mysql_query("INSERT INTO donation (username, time, productid, price, tickets) VALUES ('" . $user . "', '" . $date . "', '" . $prodid . "', " . $amount . ", " . $amountTickets . ");"); 
     $fh = fopen(".ipnerr", "a"); 
     fwrite($fh, mysql_error()); 
     fclose($fh); 
     mysql_close($conn); 
     } 
    } 

Я не получаю никаких ошибок. Просто данные не записываются в базу данных, все остальное проверяется в журналах.

Edit: я решил проблему, вопрос был таков:

if($p->ipn_data["payment_status"] != "Completed") die(); 

платежи были проведены в ожидании, что означает, что никогда бы не пройти этот этап

+0

Готов поспорить, что одно из полей имеет индекс как уникальный, и вы пытаетесь вставить уже существующее значение. – davidkonrad

+0

Сделайте сценарий для эхо-запроса mysql_query и попробуйте запустить этот запрос в phpmyadmin, чтобы узнать, что происходит с ошибкой. Или зарегистрируйте запрос mysql, запущенный в файл или так, и запустите его вручную в phpmyadmin. – Kishor

+0

Почему бы вам не выйти из запроса, чтобы узнать почему? – harrrrrrry

ответ

1

Есть некоторые вещи, которые вы должны сделать для того, чтобы это сработало, некоторые не связаны с PHP-программированием, поэтому я не буду публиковать исходный код. Ваши комментарии об этом, работающие при вызове вручную, предполагают, что culplrit является сертификатом SSL.

Был там! сделал это!

1.- Убедитесь, что на вашем веб-сайте установлен сертификат SSL. PayPal требует, чтобы веб-сайт имел возможность поддерживать HTTPS вместо HTTP, он отправляет уведомление об оплате через HTTPS.

2.- Если вы используете сохраненную кнопку Убедитесь, что кнопка указывает на правильный URL-адрес уведомления HTTPS.

3.- Вы не можете прочитать ошибки с error_reporting(), как sugested, потому что это транзакция между PayPal и вашим сайтом. Единственное, что вы можете сделать, это сохранить где-нибудь (например, файл) «флаг», чтобы увидеть, был ли URL-адрес вызван PayPal, что не будет сделано, если вы не сделаете шаги 1 и 2.

Я добавлю еще если я помню, на данный момент проверяю их. :)

+0

Спасибо. Существует сертификат SSL, и ipn возвращается, как проверено, оплата проверяется в журналах. Единственная проблема заключается в том, что данные не помещаются в базу данных, поэтому я предполагаю, что это проблема с тем, как я сделал mysql – user

+0

У меня есть код, который отлично работает с IPN PayPal, который я могу вам предоставить, но он использует который немного отличается от той, которую вы используете. Можете ли вы опубликовать URL-адрес, я могу попробовать ваш php? Или какой-нибудь другой (переименуйте его, потому что URL-адрес уведомления PayPal - не очень хорошая идея. – Brian

+0

Попробуйте $ fh = fopen ("somefile.txt", "w +"), вместо этого $ fh = fopen (". Ipn", "a "), возможно, есть ошибка в запросе базы данных, но также есть ошибка в создании файла и не может быть записана в файл. – Brian

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