1

我正在尝试让 paypal ipn 为我的 node.js express 应用程序工作,一旦我收到它,我必须验证 ipn 消息,方法是“按照接收到的确切顺序发送 [ing] 内容并在它之前使用命令_通知验证”。他们给出的示例是这样的查询字符串:

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) 吗?)

4

3 回答 3

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.
        }
    });
}
于 2013-04-06T06:38:08.453 回答
1

由于您确实询问了如何发出 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();
于 2013-04-30T13:22:55.363 回答
0

为了让这个 IPN 发挥作用,我也挣扎了一两天。我对 bodyparser 和 url-encoded 有类似的问题。

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

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

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

希望能帮助到你。

于 2015-04-01T05:41:50.143 回答