为啥我不能在我的 Paypal IPN 文件中设置 cookie
Posted
技术标签:
【中文标题】为啥我不能在我的 Paypal IPN 文件中设置 cookie【英文标题】:Why can't I set a cookie in my Paypal IPN file为什么我不能在我的 Paypal IPN 文件中设置 cookie 【发布时间】:2017-11-19 10:12:52 【问题描述】:我的 Paypal ipn 文件工作正常 - 一旦验证,我可以将付款人添加到我的 sql 数据库并写入我服务器上的日志文件,但 setcookie 似乎不起作用。我想简单地设置一个标志,这样我就知道这个人已经付款了。 我还能如何设置标志以便我的 javascript 代码知道他们已经付款?
【问题讨论】:
setcookie 仅在页面加载后设置 cookie(如果我没记错的话)。这可能是您的问题的原因。 您可以将其放入会话中,然后在您的 JS 中添加类似var isPaid = <?= !empty($_SESSION['paid']) ? "true" : "false"; ?>;
的内容 - 它有点脏但应该可以完成这项工作。
【参考方案1】:
IPN 请求由 PayPal 服务器发出,而不是由用户的网络浏览器发出。您不能在未发出请求的用户代理中设置 cookie!
要将 PayPal 用于会员系统,您需要做几件事:
拥有使用数据库的用户登录系统。希望你已经有了这个!在包含用户的数据库表中包含一个支付的列。
在付款中包含一些数据,以识别正在付款的用户。例如,在 invoice
字段中包含用户 ID。
当您收到经过验证的 IPN 时,从 invoice
字段中读取用户 ID 并更新数据库中的相应行。
【讨论】:
【参考方案2】:我找到了这个解决方案,如果它确实是在您检查之前没有设置 cookie 的服务器:
setcookie('uname', $uname, time()+60*30);
$_COOKIE['uname'] = $uname;
https://***.com/a/3230167/7924393
如果有帮助的话。
【讨论】:
不,这根本没有帮助。正如我在回答中提到的,IPN 请求完全是由错误的代理发出的——cookie 根本无法解决这个问题。以上是关于为啥我不能在我的 Paypal IPN 文件中设置 cookie的主要内容,如果未能解决你的问题,请参考以下文章
paypal沙箱支付成功,但是我的脚本没有收到ipn post call
为啥 tlstest.paypal.com 可以在浏览器中运行,但不能从我的 PHP 代码中运行(对 Paypal IPN 有用)?