10

我有一个使用贝宝为电子显示数据收集付款的网站。变量不能通过贝宝与 URL 一起传递(或者我无法让它们工作),所以我使用 cookie 来传递项目编号。但是,狡猾的用户可以在cookie写入部分之后,直接在地址栏中输入paypal重定向URL并免费获取电子数据。绕过贝宝。我怎样才能解决这个问题?

这是一些代码。你会看到我试图通过直接通过 cookie 写入 (pre_contact.php) 和 paypal 重定向 URL (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!!

提前致谢

4

3 回答 3

12

您可能正在寻找的是 Paypal IPN(即时付款通知).. 基本上有人从您那里购买产品.. Paypal 将数据发布到您指定的脚本/网址(只有您和他们知道).. 然后您做什么将数据回发到贝宝,以确认他们发送的帖子是真实的,而不是由某人模拟/伪造的。此时您知道交易是有效的。

一旦您收到有效付款的通知,您就可以通过电子邮件发送下载 url,或者使用简单的 HTACCESS auth 将所有这些信息打包到一个小型登录/密码系统中,然后您就可以开始了。

祝你好运。

于 2008-10-27T20:09:15.110 回答
11

我不认为您将能够通过您所采用的方法一步完成您想做的事情,因为您的代码无法知道事务是否实际成功完成。

我认为上述方法可行的唯一方法是,如果您不自动将它们发送到他们支付的文件中。

相反,他们必须等待您通过 Paypal 验证他们的交易,然后通过电子邮件向他们发送下载链接。


这可能都可以使用Paypal API自动完成。我对 Paypal API 不太熟悉,但它应该像这样工作。

  1. 用户决定向你购买东西
  2. 您启动一个将用户发送到 Paypal 的交易,并且可能会生成某种交易 ID。
  3. 用户支付(或决定取消和/或不支付)
  4. 用户回到您的网站
  5. 您获取交易ID并验证付款成功
  6. 如果支付成功,给用户他们支付的东西。

贝宝 API 参考

于 2008-10-27T19:07:04.223 回答
0

在其他问题中有很多关于 PayPal IPN 的信息,从设置 Paypal 以连接到脚本开始

于 2009-08-15T22:58:34.073 回答