2013-05-29 97 views
0

我使用node.js和express創建了一個paypal ipn監聽器。 這裏是我的監聽器代碼:Node.js和expressjs paypal ipn監聽器給出了錯誤500

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和不確定。有人能幫我找出這個未定義的變量是什麼,爲什麼這個錯誤500發生。即使我將聽衆中的所有內容都評論出來,它也會發生。

編輯:

我改變了貝寶IPN的網址,而我還沒有定義一些隨機的網址。我仍然得到未定義和錯誤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

我找到了一個解決方案。 expressjs bodyParser中有錯誤。我改變了expressjs設置使用連接模塊的bodyParser是這樣的:

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