Обновление базы данных после оплаты

kibrobro спросил: 14 ноября 2017 в 07:00 в: php

Я не могу понять, как обновить Премиум в участниках. Когда пользователь заплатил и платеж прошел, я хочу обновить Премиум до ДА

Когда платеж выполнен, ничего не происходит и когда, если у моего пользователя есть премиум-доступ, он все равно говорит НЕТ.

Есть идеи здесь? Я использую Paypal IPN

Вот мой listener.php

<?php require('includes/config.php'); header('HTTP/1.1 200 OK');//
// STEP 2 - create the response we need to send back to PayPal for them to confirm that it's legit
//$resp = 'cmd=_notify-validate';
foreach ($_POST as $parm => $var) 
    {
    $var = urlencode(stripslashes($var));
    $resp .= "&$parm=$var";
    }// STEP 3 - Extract the data PayPal IPN has sent us, into 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'];
  $receiver_email   = $_POST['receiver_email'];
  $payer_email      = $_POST['payer_email'];
  $record_id        = $_POST['custom'];// Right.. we've pre-pended "cmd=_notify-validate" to the same data that PayPal sent us (I've just shown some of the data PayPal gives us. A complete list
// is on their developer site.  Now we need to send it back to PayPal via HTTP.  To do that, we create a file with the right HTTP headers followed by 
// the data block we just createdand then send the whole bally lot back to PayPal using fsockopen// STEP 4 - Get the HTTP header into a variable and send back the data we received so that PayPal can confirm it's genuine$httphead = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$httphead .= "Content-Type: application/x-www-form-urlencoded\r\n";
$httphead .= "Content-Length: " . strlen($resp) . "\r\n\r\n"; // Now create a ="file handle" for writing to a URL to paypal.com on Port 443 (the IPN port)$errno ='';
$errstr='';$fh = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);// STEP 5 - Nearly done.  Now send the data back to PayPal so it can tell us if the IPN notification was genuine if (!$fh) {// Uh oh. This means that we have not been able to get thru to the PayPal server.  It's an HTTP failure
//
// You need to handle this here according to your preferred business logic.  An email, a log message, a trip to the pub..
           } // Connection opened, so spit back the response and get PayPal's view whether it was an authentic notification         else    {
           fputs ($fh, $httphead . $resp);
           while (!feof($fh))
                {
                $readresp = fgets ($fh, 1024);
                if (strcmp ($readresp, "VERIFIED") == 0) 
                    {    $stmt = $db->prepare("UPDATE members SET Premium = 'YES' WHERE memberID = :memberID");
$stmt->execute(array(
        ':memberID' => $memberID    ));}}                else if (strcmp ($readresp, "INVALID") == 0) 
                    {//              Man alive!  A hacking attempt?                    }
                }
fclose ($fh);
        }
//
//
// STEP 6 - Pour yourself a cold one.
//
//?>

У меня некоторое время есть проблемы, и я до сих пор не могу заставить его работать. Спасибо за любую помощь !!

0 ответов