1

node.jsエクスプレスアプリでpaypal ipnを機能させようとしています.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) を実行するだけですか?)

4

3 に答える 3

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 に答える
1

ノードに paypal-ipn モジュールを使用しましたが、json で解析されたボディで問題ないことがわかりました。このモジュールを使用して私が抱えていた主な問題は、必ず res.send(200) で応答するようにすることでした。そうしないと、paypal の IPN が間隔を置いて約 1 分間メッセージを送信し続けます。役立つコードは次のとおりです。

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 に答える
0

また、この IPN を機能させるために 1 日か 2 日苦労しました。bodyparser と url-encoded で同様の問題がありました。

以下は、着信 IPN メッセージをリッスンし、Paypal Sandbox に対して検証する NodeJS の実用的なサンプル コードです。

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

mocha subscriptionMessage.jsフォルダー内で subscriptionMessage.js を実行して、testsPaypal IPN メッセージを模倣/シミュレートできます。

それが役に立てば幸い。

于 2015-04-01T05:41:50.143 に答える