Paypal 即时付款通知

Paypal 即时付款通知,paypal,paypal-ipn,Paypal,Paypal Ipn,我想有VIP购买按钮,我有从PP生成的文本框按钮,该代码不完整,它的经典IPN代码是paypal在教程中给你的,我只显示部分更改: ........... // STEP 3: Inspect IPN validation result and act accordingly if (strcmp ($res, "VERIFIED") == 0) { // The IPN is verified, process it: // check whe

我想有VIP购买按钮,我有从PP生成的文本框按钮,该代码不完整,它的经典IPN代码是paypal在教程中给你的,我只显示部分更改:

...........
    // STEP 3: Inspect IPN validation result and act accordingly

    if (strcmp ($res, "VERIFIED") == 0) {
        // The IPN is verified, process it:
        // check whether the payment_status is Completed 
        // check that txn_id has not been previously processed
        // check that receiver_email is your Primary PayPal email
        // check that payment_amount/payment_currency are correct
        // process the notification

        // assign posted variables to local variables
        $item_name = $_POST['item_name']; 
        $item_number = $_POST['item_number'];
        $payment_status = $_POST['payment_status'];
        $payment_amount = $_POST['mc_gross'];
        $payment_currency = $_POST['mc_currency'];
        $txn_id = $_POST['txn_id'];
        $receiver_email = $_POST['receiver_email'];
        $payer_email = $_POST['payer_email'];
        $player_indentificator = $_POST["player_id"];
        mail("ales.nezbeda@gmail.com", "TEST", $player_indentificator)

        // IPN message values depend upon the type of notification sent.
        // To loop through the &_POST array and print the NV pairs to the screen:
        foreach($_POST as $key => $value) {
          echo $key." = ". $value."<br>";
        }
    } else if (strcmp ($res, "INVALID") == 0) {
        // IPN invalid, log for manual investigation
        echo "The response from IPN was: <b>" .$res ."</b>";
    }
    ?>

但是当我付钱时,我没有收到那封电子邮件。为什么?也许我做错了什么,也许是大错特错。

1您需要确保您使用的帐户已启用IPN。如果您正在使用沙箱,那么您需要确保在该帐户配置文件中启用了IPN,并指向您想要使用的IPN URL。如果您使用的是live帐户,那么您在该live帐户中也会执行相同的操作。我经常看到人们在一个地方安装了它,但他们却向另一个地方提交了付款。确保这里不是这样

2可使用HTML按钮中的notify_url参数或API请求中的NotifyURL参数覆盖配置文件。你在使用这两种方法中的任何一种吗?如果是这样的话,请仔细检查URL的值,以确保您找到了正确的URL

3如果您已经验证了上述内容,那么您需要查看您正在使用的PayPal帐户中的IPN历史记录。它将在事务发生时向您显示它是否发送IPN,还将显示它在发布IPN时从您的服务器返回的结果代码

如果您在IPN历史记录中没有看到任何日志,那么您需要仔细检查我上面提到的内容,因为出于某种原因,它根本没有配置为发送

如果您确实在那里看到日志,但它们显示的结果不是200,那么这意味着您需要解决IPN脚本的问题。可能是语法错误或诸如此类的愚蠢行为。查看web服务器日志有助于确定错误

我喜欢做的另一件事是创建一个简单的HTML表单,其中包含一组隐藏字段,这些字段表示我希望从IPN中获得的内容。将表单的操作设置为您的IPN URL,然后您可以将其加载到浏览器中并提交以在屏幕上查看结果。这可以大大提高您发现和解决问题的能力。一旦你让一切按预期的方式工作,你可以放心,当真正的IPN被发送时,它将以同样的方式工作


请记住,当以这种方式进行测试时,数据并非来自PayPal,因此无法验证。您需要确保您的代码逻辑已设置为相应地处理该问题。我喜欢记录未经验证的IPN,并给自己发送电子邮件,我需要调查交易,因为交易未经验证

您是否在代码中执行过“邮件”行?它有错误吗?你查过了吗?你没有提供足够的信息,这根本不是安全漏洞。IPN回电话给PayPal,确认数据是否来自他们。您的代码逻辑可以很容易地丢弃或记录任何未经验证的IPN,有人可能会使用它。当人们遇到问题时,我通常也会询问他们的IPN URL,这样我就可以自己点击它,看看结果如何。这有助于解决问题。@EJP您能通过了解IPN URL让我知道这里的安全漏洞是什么吗?