我似乎无法找出正确的方法来处理来自 Paypal 购买的返回网址并显示警告消息
。
我是这样理解过程的:
- 从我的站点将用户发送到 paypal,将
returnurl
设置为与他们购买的商品相对应的 url。 - Paypal 处理,然后点击我的
IPN 监听器
- 用户在 paypal 窗口和按钮中看到消息
Return to merchant
(我正在沙盒测试中) - 用户点击
Return to Merchant
并返回他们购买的页面
好的,所以在我的 IPN 监听器
中,我这样做:
if( ! session_id() ) {
session_start();
}
then a bunch of checks, then
$_SESSION['alert-success'] = 'Thank you for your purchase!';
or
$_SESSION['alert-danger'] = 'There was a problem processing your order';
现在,在这个 IPN 监听器
中,我可以设置更精细的消息,但现在尝试让一些基本的工作正常。
然后在产品页面中它们返回到我有这个
<div class="flash-message">
<?php
foreach (['danger', 'warning', 'success', 'info'] as $msg) {
$msgtype = 'alert-' . $msg;
$issession=0;
if(isset($_SESSION[$msgtype])) {
$p = "<p class=\"alert " . $msgtype. "\">" . $_SESSION[$msgtype] . "</p>";
echo $p;
$issession=1;
}
}
if ($issession) {
session_destroy();
}
?>
</div>
现在,这什么也没做。因此,当用户返回返回 url 时,似乎在 IPN listener
中设置的任何 session 变量都不可用。
我的paypal表格里有这个
<input type="hidden" name="rm" value="2">
为了获得 $_POST
数据,我确认当用户点击 Return to Merchant
时,发布数据与 'payer_status' => string '已验证'
那么是什么给了?如果返回的 url 只返回最少的信息,那么让 IPN 监听器
做一堆工作有什么意义呢?这是我在 IPN listener
中获得的状态信息,我希望能够显示在我的即时消息区域中,我认为我使用 session 变量可以实现这一点,但我错了。
综上所述,正确的做法是什么?
谢谢!
最佳答案
使用 session 不起作用的原因是 paypal 是向 IPN 监听器发送数据的那个。 session 不会存储在用户的浏览器中,因为他们不是向 IPN 监听器发送数据的人。您不能将从 IPN 监听器收集的信息存储到数据库中吗?这就是我为我的 Paypal 购买所做的。付款成功后,我将从 IPN 监听器收集的付款数据存储起来,并将其与用户 ID 一起存储在数据库中。当他们被重定向到成功页面时,我从数据库中抓取信息并显示出来。
关于php - 如何从 PayPal 购买返回并显示成功或失败消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545990/