Как мне запретить пользователям обходить платежи? - PullRequest
10 голосов
/ 27 октября 2008

У меня есть сайт, который использует PayPal для сбора платежей за электронные данные. Переменные не могут быть переданы с URL через PayPal (или я не могу заставить их работать), поэтому я использовал куки для передачи номера элемента. Тем не менее, хитрый пользователь может, после части записи 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!!

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

Ответы [ 3 ]

12 голосов
/ 27 октября 2008

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

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

Удачи.

11 голосов
/ 27 октября 2008

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

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

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


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

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

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

0 голосов
/ 16 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...