node.js と Express を使用してペイパル 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();
};
これが私のexpressjsの設定とルートです:
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 と undefined だけです。この未定義の変数とは何か、なぜこのエラー 500 が発生するのかを調べるのを手伝ってもらえますか。リスナーのすべてをコメントアウトしても発生します。
編集:
Paypal の IPN URL を、定義していないランダムな URL に変更しました。それでも undefined とエラー 500 が発生します。curl で投稿すると、当然のようにエラー 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