【问题标题】:Node express bodyParser for Paypal IPN用于 Paypal IPN 的 Node express bodyParser
【发布时间】:2013-03-28 06:39:49
【问题描述】:

我正在尝试让 paypal ipn 为我的 node.js express 应用程序工作,并且我必须在收到 ipn 消息后通过“按照接收到的确切顺序发送回内容并在它之前”来验证 ipn 消息使用命令 _notify-validate”。他们给出的示例是这样的查询字符串:

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_notify-validate&mc_gross=19.95&protection_eligibility=Eligible&address_status=confirmed&payer_id=LPLWNMTBWMFAY&tax=0.00&...&payment_gross=19.95&shipping=0.00

但是,因为我使用的是 bodyParser,所以 request.body 是一个 json 对象。如果我要附加“cmd = _notify-validate”并将其发回,我将如何将其作为简单的查询字符串接收并将其作为简单的查询字符串发送而无需摆脱 bodyParser?我仍然需要这条路线上的 json 解析版本来实际解释数据。另外,在服务器端发送 POST 是什么样的? (我只做 res.send(str) 吗?)

【问题讨论】:

    标签: node.js post express paypal-ipn


    【解决方案1】:

    我为节点使用了 paypal-ipn 模块,结果证明一个 json 解析的主体很好。我使用这个模块的主要问题是确保使用 res.send(200) 进行响应,否则 paypal 的 ipn 会每隔一分钟左右发送消息。这是帮助的代码:

    exports.ipn = function(req,res){
        var params = req.body
        res.send(200);
    
        ipn.verify(params, function callback(err, msg) {
            if (err) { console.log(err); return false }
    
            if (params.payment_status == 'Completed') {
    
                // Payment has been confirmed as completed
                // do stuff, save transaction, etc.
            }
        });
    }
    

    【讨论】:

      【解决方案2】:

      既然您确实询问了如何发出 HTTP POST 请求,那么您就是这样做的。

      var options = {
        host: 'example.com',
        port: '80',
        path: '/pathname',
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
          'Content-Length': post_data.length
        }
      };
      
      var post_req = http.request(options, function (res) {
        res.setEncoding('utf8');
        var chunks = '';
        res.on('data', function (chunk) {
          chunks += chunk;
        });
        res.on('end', function() {
          console.log(chunks);
        });
      });
      
      post_req.write(post_data);
      post_req.end();
      

      【讨论】:

        【解决方案3】:

        我也为这个 IPN 努力了一两天才能让它发挥作用。我对 bodyparser 和 url-encoded 也有类似的问题。

        这是 NodeJS 中的一些工作示例代码,用于侦听传入的 IPN 消息并针对 Paypal Sandbox 进行验证。

        https://github.com/HenryGau/node-paypal-ipn

        您可以在tests 文件夹中运行mocha subscriptionMessage.js 的subscriptionMessage.js 来模拟/模拟Paypal IPN 消息。

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-16
          • 2018-04-11
          • 1970-01-01
          • 2015-05-06
          • 2017-10-20
          • 2011-11-14
          • 2020-07-19
          • 2014-04-09
          相关资源
          最近更新 更多