2015-01-09 10 views
5

私はnode.jsのAftership APIによって行われているPUT/webhookリクエストをキャッチしようとしています。プッシュ通知を行う必要があるたびにPUTリクエストが行われ、通知を送信するためにParseを使用していますが、ウェブフックからのデータが必要です。webhook node.jsをキャッチ

ウェブフックのヘッダがContent-Type: application/jsonのように見え、このデータが含まれています。

TS - UTC UNIXタイムスタンプイベントが

イベントが発生したこと - イベントの名前(追跡更新のために、値を 'tracking_update')

msg - イベントが発生したメッセージの詳細は、 の形式で表示されます。

どのように私は追跡番号、スラグおよびカスタムフィールドでtokenの値を取得しに行くかは、ノードまたはJS辞書?

{ 
    "event": "tracking_update", 
    "msg": { 
     "id": "53aa94fc55ece21582000004", 
     "tracking_number": "906587618687", 
     "title": "906587618687", 
     "origin_country_iso3": null, 
     "destination_country_iso3": null, 
     "shipment_package_count": 0, 
     "active": false, 
     "order_id": null, 
     "order_id_path": null, 
     "customer_name": null, 
     "source": "web", 
     "emails": [], 
     "custom_fields": {}, 
     "tag": "Delivered", 
     "tracked_count": 1, 
     "expected_delivery": null, 
     "signed_by": "D Johnson", 
     "shipment_type": null, 
     "tracking_account_number": null, 
     "tracking_postal_code": "DA15BU", 
     "tracking_ship_date": null, 
     "created_at": "2014-06-25T09:23:08+00:00", 
     "updated_at": "2014-06-25T09:23:08+00:00", 
     "slug": "dx", 
     "unique_token": "xk7LesjIgg", 
     "checkpoints": [{ 
      "country_name": null, 
      "country_iso3": null, 
      "state": null, 
      "city": null, 
      "zip": null, 
      "message": "Signed For by: D Johnson", 
      "coordinates": [], 
      "tag": "Delivered", 
      "created_at": "2014-06-25T09:23:11+00:00", 
      "checkpoint_time": "2014-05-02T16:24:38", 
      "slug": "dx" 
     }] 
    }, 
    "ts": 1403688191 
} 
+0

はPUTリクエストのボディに送られ、このJSONのですか? – akonsu

+0

@akonsuはい、私はそう信じています。 – Clip

答えて

2

それはExpressフレームワーク、例を行うことができます:ここでは

var express = require('express'), 
    bodyParser = require('body-parser'), 
    app = express(), 
    port = 3000; 

app.use(bodyParser.json()); 

app.post('/', function (req, res) { 
    var body = req.body; 
    var trackingNumber = body.msg.tracking_number; 
    var slug = body.msg.slug; 
    var token = body.msg.unique_token; 

    console.log(trackingNumber, slug, token); 

    res.json({ 
     message: 'ok got it!' 
    }); 
}); 

var server = app.listen(port, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log('Example app listening at http://%s:%s', host, port) 

}); 

はちょうどそれのクローンを作成し、npm install、その後npm startを行い、​​です。サーバーがポート3000上で実行されます:D

注:私はAftershipウェブフックのドキュメントで見たが、それは彼らが私はpost要求の例を作成POST HTTPメソッド、ないPUTを要請すると発表しました。 putリクエストをキャッチする場合は、それをputに置き換えてください。

+0

これは正しくはありませんが、それぞれのリクエストは異なります。提供されているJSONは、何が入ってくるのかの一例に過ぎません。 – Clip

+1

JSONは返されたボディで、いくつかのエンドポイントを経由しています。エンドポイントは既に入手できるものですか?はいの場合は、そのエンドポイントにヒットして結果を操作する方法を尋ねるでしょうか? –

+0

はい。このJSONはPUTリクエストとして送信されます。私はput要求からJSONを取得し、それを操作する方法を知りたいと思います。あなたの操作は正しいようですが、JSONの部分は静的です。 – Clip

1

あなたは

app.put('/someRouteToCatchWebHook', function(request, response) { 
    //webhook parsing goes here 
}); 

(私はあなたのコードでexpressjsを使用することを確信している - 詳細についてはhttp://expressjs.com/api.html#app.METHODを参照)によって、PUT要求をキャッチすることができます。

webhookデータが要求本体にある場合、それを解析するためにhttps://www.npmjs.com/package/body-parserモジュールを使用できます。

+0

私はJS/HTMLの経験はほとんどありません。私はExpressをインストールするためにnpmを訴えました。しかし、今私はどのようにHTMLファイルにエクスプレスフレームワークを含めましたか? – Clip

+0

@ニックルエクスプレスをHTMLファイルに含めることはできません。 NodeJSはjavascriptを実行するプラットフォームであり、expressはNodeJSがWebサイト(HTML)を提供するフレームワークです。 Andiの答えでリンクしたコードを見た後、私はあなたがもう何をしようとしているのか分からない。 – Jeremy

2

ウェブフックのデータを検査するために、私はすべてのリクエストをデータベースに保存してから、データベースに保存することをお勧めします。各リクエストが異なるので、最も簡単な方法はsails.js(使いやすいORMを持つNode.jsフレームワーク)にAPIを作成することです。

sudo npm install sails -g 
sails new _project_name_ 
cd _project_name_ 
sails generate api Records 

最後に、sailsはwebhookデータを格納するコントローラとモデルを生成しました。

アプリを実行するためにpm2をインストールすることをおすすめします。あなたはURLを以下のためAftershipであなたのウェブフックを設定する必要があり

pm2 start app.js 

で次のことを実行できます。

YOUR_SERVER_IP:PORT /レコード/

を作成するには、URLに従うことによって、データを検査することができます

YOUR_SERVER_IP:PORT/Records/find

データを解析する場合は、RecordsController.jsで行うことができます。例:

Parsing: function(req, res) { 

    Records.find({}).exec(function(err, results) { 

     var output = []; 

     while (results.length) { 
      var result = results.pop(); 
      //custom parsing goes here 
      //example: 
      output.push({ 
       tracking_number: result.msg.tracking_number, 
       slug: result.msg.slug, 
       unique_token: result.msg.unique_token 
      }); 
     } 
     return res.json(output); 
    }); 


}, 

は、次のURLを経由して、このメソッドを呼び出すことができます。 YOUR_SERVER_IP:PORT /レコード/解析、私はデモのためにCodeanywhereでプロジェクトを作成した

ウェブフックエンドポイントは次のとおりです。 http://port-1337.zavtt4t8a0jm7vigncyo3txxmuhxgvix3yxk66pvydgqfr.box.codeanywhere.com/records/create

データを検査するには、URLの一部を置換/作成するだけです。

Gitのレポはこちらです:https://github.com/dkatavic/webhook_for_aftership

あなたは自分のサーバー上でプロジェクトのクローンを作成し、それを実行します(またはテストのために自分のサーバーを使用する)ことができます

関連する問題