Как запретить пользователям обходить платежи?

У меня есть сайт, который использует PayPal для сбора платежей за данные, отображаемые в электронном виде. Переменные не могут быть переданы с URL-адресом через PayPal (или я не могу заставить их работать), поэтому я использовал файлы cookie для передачи номера элемента. Однако хитрый пользователь может после части записи cookie ввести URL-адрес перенаправления PayPal прямо в адресную строку и получить электронные данные бесплатно. В обход PayPal. Как я могу это обойти?

Вот часть кода. Вы увидите, что я попытался усложнить задачу для пользователя, пропустив запись cookie (pre_contact.php) и URL-адрес перенаправления PayPal (step.php).

//pre_contact.php
<?PHP
global $id;
setcookie("property", $id, time()+1800);
echo "<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=contact.php\">";
?>

//contact.php - paypal pay button
echo "<form action='https://www.paypal.com/cgi-bin/webscr' method='post'>";
echo "<input type='hidden' name='cmd' value='_s-xclick'>";
echo "<input type='hidden' name='hosted_button_id' value='156320'>";
echo "<input type='image'
src='https://www.paypal.com/en_GB/i/btn/btn_paynowCC_LG.gif' border='0' name='submit' 
alt='Click to pay'>";
echo "<img alt='' border='0' src='https://www.paypal.com/en_GB/i/scr/pixel.gif'  width='1' height='1'>";
echo "</form>";

//step.php - paypal redirect on successful payment
<?PHP
require("generate_url.php");
?>

//generate_url.php - This generates a unique URL so the info can only be accessed once
<?PHP
if (eregi("generate_url.php", $_SERVER['SCRIPT_NAME'])) {
Header("Location: index.php"); die();
}
$token = md5(uniqid(rand(),1));
setcookie("token", $token, time()+4);
$cwd = substr($_SERVER['PHP_SELF'],0,strrpos($_SERVER['PHP_SELF'],"/"));
Header("Location: $cwd/get_file.php?q=$token"); die();
?>

//get_file.php - displays the file after payment
$qtoken = $_GET['q'];
if ($qtoken===$_COOKIE["token"]){
$id=$_COOKIE["property"];
DISPLAY FILE HERE!!

заранее спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
10
0
1 018
3

Ответы 3

Я не думаю, что вы сможете делать то, что хотите, за один шаг с помощью используемого вами подхода, потому что ваш код не может узнать, действительно ли транзакция завершилась успешно или нет.

Я думаю, что единственный способ, которым приведенный выше подход будет работать, - это если вы не отправите их автоматически в файл, за который они заплатили.

Вместо этого им придется ждать, пока вы подтвердите их транзакцию через Paypal, а затем отправить им ссылку для скачивания по электронной почте.


Вероятно, все это можно было бы сделать автоматически, используя Paypal API. Я не так хорошо знаком с API Paypal, но он должен работать примерно так.

  1. Пользователь решает что-то у вас купить
  2. Вы запускаете транзакцию, которая отправляет пользователя в Paypal и, предположительно, генерирует какой-то идентификатор транзакции.
  3. Пользователь платит (или решает отменить и / или не платить)
  4. Пользователь возвращается на ваш сайт
  5. Вы берете идентификатор транзакции и подтверждаете, что платеж прошел успешно
  6. Если платеж прошел успешно, отдайте пользователю то, за что он заплатил.

Справочник по API Paypal

Спасибо, Марк. Это кажется очень долгим и трудоемким. Я бы предпочел потерять несколько продаж хитрым пользователям, чем связывать кого-то с проверкой платежей. Могу ли я как-то отклонить пользователя, если он пришел не с PayPal? Я не могу использовать CURL или REFERER, так как мой хост отключил их.

Mat 27.10.2008 23:54

То, что вы, вероятно, ищете, называется Paypal IPN (мгновенное уведомление об оплате) .. в основном кто-то покупает у вас продукт .. Paypal ОТПРАВЛЯЕТ данные в скрипт / URL, который вы указываете (только вы и они это знаете) .. Тогда что вы делаете отправляет данные обратно в PayPal, чтобы подтвердить, что отправленное сообщение является настоящим, а не имитацией / подделкой кем-то. На этом этапе вы знаете, что транзакция действительна.

Как только вы получите уведомление о действительном платеже, вы можете сделать что-то вроде отправки URL-адреса загрузки по электронной почте или обернуть все это в небольшую систему входа / пароля, используя что-то простое, например HTACCESS auth, и все готово.

Удачи.

Привет, Dreamwerx. Согласно моему ответу на Марк выше, он слишком длинный и замедляет процесс до такой степени, что я потеряю продажи. Думаю в духе отслеживания истории URL?

Mat 28.10.2008 00:00

Вам нужно либо правильно исправить проблему один раз, либо продолжать работать с исправлениями взлома, такими как отслеживание URL-адресов и т. д., Которые люди в конечном итоге смогут обойти. Неправильное решение проблемы может потенциально потерять ваши продажи из-за мошенничества. IPN определенно лучший способ.

DreamWerx 28.10.2008 00:28

Привет. Да, я только что это смотрел. Кажется очень сложным, но похоже, что вы можете полностью автоматизировать это, и это было бы хорошо. Спасибо за указатель.

Mat 28.10.2008 01:11

Я использую PayPal IPN для своей системы продаж, и он отлично работает. Уведомления приходят в течение нескольких секунд после оплаты, а затем я просто отправляю электронное письмо человеку с ключом. Отлично работает с тех пор, как я начал его использовать.

Jon Tackabury 03.12.2008 20:33

Я согласен. Я использую IPN на игровом веб-сайте для отслеживания пожертвований пользователей. Платежи проверяются мгновенно, и пользователи не могут это обойти.

Pete 16.08.2009 03:14

Информацию о PayPal IPN можно найти в других вопросах, начиная с Настройка Paypal для подключения к скрипту.

Другие вопросы по теме