我使用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
答案 0 :(得分:0)
我找到了解决方案。 expressjs bodyParser出了点问题。我更改了expressjs设置以使用connect模块的bodyParser,如下所示:
app.use(require('connect').bodyParser());