情况: 使用paypal在网站上设置购买和下载市场。 我已经设置了"购买"和"结帐"按钮使用paypals按钮创建器。 现在我需要创建一个IPN脚本来调用paypal并验证购买,以便"产品" 可能会开始下载。如果有更好的方向来解决这个问题,我会很感激这个建议。
问题: Paypals IPN沙盒模拟器给了我一个 "由于HTTP错误,我们无法发送IPN:500:内部服务器错误" 然而,我仍然收到一个"无效"响应。
问题: 我如何能 1)修复Paypals IPN沙箱模拟器以便能够发送消息 2)并收到"验证回复。
脚本: 我正在使用paypals github的确切脚本 继承人的链接:
提前致谢!
P.S。 我遇到过一些类似的情况,但没有一个对我有用。
答案 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
}