Paypals IPN.php错误

时间:2014-05-17 19:53:23

标签: php paypal paypal-ipn

情况: 使用paypal在网站上设置购买和下载市场。 我已经设置了"购买"和"结帐"按钮使用paypals按钮创建器。 现在我需要创建一个IPN脚本来调用paypal并验证购买,以便"产品" 可能会开始下载。如果有更好的方向来解决这个问题,我会很感激这个建议。

问题: Paypals IPN沙盒模拟器给了我一个 "由于HTTP错误,我们无法发送IPN:500:内部服务器错误" 然而,我仍然收到一个"无效"响应。

问题: 我如何能 1)修复Paypals IPN沙箱模拟器以便能够发送消息 2)并收到"验证回复。

脚本: 我正在使用paypals github的确切脚本 继承人的链接:

paypal_ipn.php

提前致谢!

P.S。 我遇到过一些类似的情况,但没有一个对我有用。

2 个答案:

答案 0 :(得分:0)

您的IPN脚本必须有错误,导致它将500返回PayPal的服务器。您的脚本可能(并且显然是)正常处理大部分内容并按预期保存日志文件,但最后会导致错误,因此脚本无法完全成功完成。

我要做的第一件事就是解决这个问题。一种简单的方法是通过构建一个基本的HTML表单来创建自己的模拟器,其中隐藏的字段与您希望从IPN获得的字段的名称相匹配。将表单的操作设置为您的IPN URL,然后您可以在浏览器中加载它并提交它,以便您可以在屏幕上看到结果。这有助于排除故障并修复您遇到的任何错误。

一旦你解决了所有的错误,你可以再次尝试模拟器,那时你应该得到一个成功的结果。但是,如果你仍然无效,那么你必须对回调PayPal有问题。但是,一旦脚本成功完成,我们就可以解决这个问题,一旦你弄清楚那里发生了什么,这可能很好地解决了这两个问题。

答案 1 :(得分:0)

如果您使用PHP框架来实现PayPal IPN侦听器,那么不要忘记将exit;语句放在控制器的底部。如果你不写exit语句,那么框架将尝试加载视图文件,在我的情况下没有视图文件。这就是我在PayPal IPN模拟器中收到500错误消息的原因。

以下是在我的计算机上正常运行的代码示例。

public function ipnlistener2Action(){
        // tell PHP to log errors to ipn_errors.log in this directory
        //mail('YOUR EMAIL', 'Invalid IPN', "Exception");
        ini_set('display_errors',1);
         error_reporting(E_ALL);

        // intantiate the IPN listener
        require_once('common/ipnlistener.php');
        $listener = new IpnListener();

        // tell the IPN listener to use the PayPal test sandbox
        $listener->use_sandbox = true;

        // try to process the IPN POST
        try {
            $listener->requirePostMethod();
            $verified = $listener->processIpn();

            if ($verified) {
            // TODO: Implement additional fraud checks and MySQL storage
            mail('YOUR EMAIL', 'Valid IPN', $listener->getTextReport());
        } else {
            // manually investigate the invalid IPN
            mail('amir.duran@ceit.co.uk', 'Invalid IPN', $listener->getTextReport());
        }


        } catch (Exception $e) {
            mail('YOUR EMAIL', 'Invalid IPN', "Exception: ".$e->getMessage());
            //var_dump("Exception");
            exit(0);
        }
        exit;

        // TODO: Handle IPN Response here
    }