Прямой переход на новую html-страницу после передачи данных PayPal

1

Когда пользователь завершил транзакцию Paypal, он отправит их на страницу моего сайта, обрабатывающую транзакцию. Однако экран белый, и исходный код не появляется. Я знаю, что скрипт выполняет uttil оператор SQL, поскольку мой db обновляется. Затем скрипт должен перейти на страницу, как указано в его заголовке, но мне интересно, так как Paypal делает два посещения этой страницы, это может испортить это.

Вот сценарий возврата:

        <?php 
    error_reporting(E_ALL); ini_set('display_errors', 1);
    // The custom hidden field (user id) sent along with the button is retrieved here. 
    if($_GET['cm']) $user=$_GET['cm']; 
    // The unique transaction id. 
    if($_GET['tx']) $tx= $_GET['tx'];
     $identity = 'TOKEN VALUE'; 
    // Init curl
     $ch = curl_init(); 
    // Set request options 
    curl_setopt_array($ch, array ( CURLOPT_URL => 'https://www.paypal.com/cgi-bin/webscr',
      CURLOPT_POST => TRUE,
      CURLOPT_POSTFIELDS => http_build_query(array
        (
          'cmd' => '_notify-synch',
          'tx' => $tx,
          'at' => $identity,
        )),
      CURLOPT_RETURNTRANSFER => TRUE,
      CURLOPT_HEADER => FALSE,
      // CURLOPT_SSL_VERIFYPEER => TRUE,
      // CURLOPT_CAINFO => 'cacert.pem',
    ));
    // Execute request and get response and status code
    $response = curl_exec($ch);
    $status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // Close connection
    curl_close($ch);
    if($status == 200 AND strpos($response, 'SUCCESS') === 0)
    {

        include ("dbconnect.php");
            $query="UPDATE users SET paid='1' WHERE userid='$user'";
            $result=mysqli_query($con,$query);
            exit(); // Quit the script.
            header('Location: http://www.xxxxxxxxxxx/php/process_paypal_success.php');
    }
    ?>

Здесь на странице сценарий возврата должен также отправить пользователя:

          <?php 
      ob_start();
      session_start();
      require_once ('verify.php'); 
      $page_title = 'settings.php';


      $sid = session_id();
      $first_name=$_SESSION['first_name'];
      $last_name=$_SESSION['last_name'];
      $email_address=$_SESSION['email_address'];


              include ("dbconnect.php");
              $query="SELECT * FROM users WHERE email_address='$email_address'";
              $result=mysqli_query($con,$query);
              $data=mysqli_fetch_assoc($result);
                  $userid = $data['userid'];
                  $password = $data['password'];
                  $signup_date = $data['signup_date'];
                  $last_login = $data['last_login'];

      // Check for a $page_title value:
      if (!isset($page_title)) {
          $page_title = 'User Registration';
      }

      // If no first_name session variable exists, redirect the user:
      if (!isset($_SESSION['email_address'])) {

          $url = BASE_URL . ''; // Define the URL.
          ob_end_clean(); // Delete the buffer.
          header("Location: $url");
          exit(); // Quit the script.

      }
      ?>
      <?php 
      $title="title here" ; 
      $description="You have successfully submitted your payment and registered for the event" ; 
      include( "header.php"); 
      ?>
      <body>

  • 0
    Добавьте сообщение об ошибке в начало файла (ов) сразу после открывающего тега PHP, например <?php error_reporting(E_ALL); ini_set('display_errors', 1); затем остальная часть вашего кода, чтобы увидеть, дает ли он что-нибудь.
  • 0
    это уже там, не получая никаких ошибок в браузере
Показать ещё 6 комментариев
Теги:
paypal

1 ответ

2
Лучший ответ

Вы выходите перед заголовком, поэтому перенаправление не произойдет.

Как только вы вышли, это так; остальная часть вашего кода не будет выполнена.

Поэтому измените эту часть вашего скрипта:

exit(); // Quit the script.
header('Location: http://www.xxxxxxxxxxx/php/process_paypal_success.php');

чтобы:

header('Location: http://www.xxxxxxxxxxx/php/process_paypal_success.php');
exit(); // Quit the script.

размещение exit(); после заголовка.

Справка:

exit - выводить сообщение и завершать текущий скрипт

Sidenote: вы также можете просто использовать exit; , () не требуется.

Если вы не хотите показывать сообщение:

or exit("unable to open file ($filename)");

из руководства ^

Поэтому в вашем случае вы не можете показать дополнительное сообщение, так как вы используете заголовок.


Примечания:

Ваш код подвержен инъекции SQL. Было бы лучше, если бы вы использовали подготовленное выражение.

Справка:

Ещё вопросы

Сообщество Overcoder
Наверх
Меню