Когда пользователь завершил транзакцию 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>
Вы выходите перед заголовком, поэтому перенаправление не произойдет.
Как только вы вышли, это так; остальная часть вашего кода не будет выполнена.
Поэтому измените эту часть вашего скрипта:
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. Было бы лучше, если бы вы использовали подготовленное выражение.
Справка:
<?php error_reporting(E_ALL); ini_set('display_errors', 1);
затем остальная часть вашего кода, чтобы увидеть, дает ли он что-нибудь.