如何阻止用户规避付款?
Posted
技术标签:
【中文标题】如何阻止用户规避付款?【英文标题】:How do I stop users circumventing payment? 【发布时间】:2010-09-19 10:57:09 【问题描述】:我有一个使用贝宝为电子显示数据收取费用的网站。变量不能通过贝宝与 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!!
提前致谢
【问题讨论】:
【参考方案1】:其他问题中有很多关于PayPal IPN的信息,以Setting up Paypal to connect to script开头
【讨论】:
【参考方案2】:您可能正在寻找的是 Paypal IPN(即时付款通知)。基本上有人从您那里购买产品。Paypal 将数据发布到您指定的脚本/网址(只有您和他们知道)。然后您所做的是将数据发回贝宝,以确认他们发送的帖子是真实的,而不是由某人模拟/伪造的。此时您知道交易是有效的。
一旦您收到有效付款的通知,您就可以通过电子邮件发送下载网址,或者使用简单的 HTACCESS auth 等简单的方法将所有这些信息打包到一个小型登录/密码系统中,然后您就可以开始了。
祝你好运。
【讨论】:
嗨 Dreamwerx。根据我在上面对 Mark 的回答,它太啰嗦了,并且减慢了流程,以至于我会失去销售。我正在考虑跟踪 URL 历史记录? 您要么需要正确解决问题一次,要么继续使用 URL 跟踪等黑客修复,人们最终将能够绕过这些修复。不正确解决问题可能会因欺诈而失去更多销售额。 IPN 绝对是必经之路。 嗨。是的,我一直在看它。看起来很复杂,但看起来你可以完全自动化它,这很好。谢谢指点。 我的销售系统使用 PayPal IPN,它运行良好。付款后几秒钟内就会收到通知,然后我只需通过电子邮件将密钥发送给该人。自从我开始使用它以来,效果很好。 我同意。我在游戏网站上使用 IPN 来跟踪用户捐款。付款会立即得到验证,用户无法绕过它。【参考方案3】:我认为您无法通过您所采用的方法一步完成您想做的事情,因为您的代码无法知道事务是否真正成功完成。
我认为上述方法行之有效的唯一方法是,如果您不自动将它们发送到他们支付的文件中。
相反,他们必须等待您通过 Paypal 验证他们的交易,然后通过电子邮件向他们发送下载链接。
这可能都可以使用Paypal API 自动完成。我对 Paypal API 不太熟悉,但它应该可以像这样工作。
-
用户决定向你购买东西
您启动了一项交易,该交易将用户发送到 Paypal,并且可能会生成某种交易 ID。
用户付费(或决定取消和/或不付费)
用户回到您的网站
您获取交易ID并验证支付成功
如果支付成功,给用户他们支付的东西。
Paypal API Reference
【讨论】:
谢谢马克。这似乎是一个非常曲折的方法,而且劳动强度很大。我宁愿失去一些销售给狡猾的用户,也不愿捆绑某人验证付款。如果用户不是来自贝宝,我可以以某种方式拒绝用户吗?我无法使用 CURL 或 REFERER,因为我的主机已将它们关闭。以上是关于如何阻止用户规避付款?的主要内容,如果未能解决你的问题,请参考以下文章
当付款通过PayPal进入时,如何阻止magento将付款状态设置为“已完成”
在 onWheel 事件中使用 event.preventDefault 时,如何规避 reactjs 中的“被动事件监听器”