为啥我不能在我的 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

PayPal IPN 沙盒 - 更改通知 URL 不会更新

为啥 tlstest.paypal.com 可以在浏览器中运行,但不能从我的 PHP 代码中运行(对 Paypal IPN 有用)?

为啥Paypal在使用django-paypal时会重试IPN

Magento - PayPal IPN 配置

为啥我不能在 React 中设置这个状态?