Node.js和expressjs paypal ipn listener给出错误500

时间:2013-05-29 04:30:29

标签: node.js paypal express paypal-ipn

我使用node.js和express创建了一个paypal ipn监听器。 这是我的听众代码:

exports.ipn = function(req, res, next) {
    console.log('Paypal');
    var ipn = require('paypal-ipn');
    if(typeof req.body != "undefined") {
        ipn.verify(req.body, function callback(err, msg) {
            if (err) {
                winston.error('IPN: ' + err);
            } else {
                if (req.body.payment_status == 'Completed' && msg == "VERIFIED") {
                    winston.info('IPN: ' + msg + " " + req.body.txn_id + " " + req.body.payer_email);
                }
            }
            res.send(200);
            res.end();
        });
    }
    res.send(200);
    res.end();
};

这是我的快递设置和路线:

    var app = express();

    // all environments
    app.set('port', process.env.PORT || 3000);
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(app.router);

    // development only
    if ('development' == app.get('env')) {
      app.use(express.errorHandler());
    }

    app.get('/', routes.index);
    app.options('/', routes.options);
    app.post('/', routes.up);
    app.post('/ipn', routes.ipn);

    http.createServer(app).listen(app.get('port'), function(){
      console.log('Express server listening on port ' + app.get('port'));
    });

我使用这个模块https://github.com/andzdroid/paypal-ipn来验证ipn消息,并且它可以正常使用paypal ipn模拟器,但是当我尝试使用它时,我将其发送到我的节点控制台:

undefined
POST /ipn 500 351ms

没有其他错误消息,只有此错误500和未定义。有人可以帮我找出这个未定义的变量是什么,为什么会发生这个错误500。即使我在听众中注释掉所有内容,也会发生这种情况。

修改

我将paypal ipn url更改为一些我没有定义的随机网址。我仍然得到未定义和错误500.如果我发布卷曲我得到错误404就像我应该。

修改

我发现如果我像这样使用curl发布帖子:

curl -d "test" -A "-" http://127.0.0.1/randomurl

然后我会得到错误500。 这给了我404:

curl -d "test=er" -A "-" http://127.0.0.1/randomurl

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 expressjs bodyParser出了点问题。我更改了expressjs设置以使用connect模块的bodyParser,如下所示:

app.use(require('connect').bodyParser());