2015-10-01 20 views
8

電子メールをリストに追加するために、NodeJSを使用して新しいMailChimp 3.0 APIを呼び出しています。私はそれがポストマンを経て作業を取得することができますが、私は、ノードのhttpで苦労している:Mailchimp API v3.0 NodeJS経由でリストに電子メールを追加するhttp

var http = require('http'); 

var subscriber = JSON.stringify({ 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Tester", 
     "LNAME": "Testerson" 
    } 
}); 

var options = { 
    host: 'https://us11.api.mailchimp.com', 
    path: '/3.0/lists/<myListID>/members', 
    method: 'POST', 
    headers: { 
     'Authorization': 'randomUser myApiKey', 
     'Content-Type': 'application/json', 
     'Content-Length': subscriber.length 
    } 
} 

var hreq = http.request(options, function (hres) { 
    console.log('STATUS CODE: ' + hres.statusCode); 
    console.log('HEADERS: ' + JSON.stringify(hres.headers)); 
    hres.setEncoding('utf8'); 

    hres.on('data', function (chunk) { 
      console.log('\n\n===========CHUNK===============') 
      console.log(chunk); 
      res.send(chunk); 
    }); 

    hres.on('end', function(res) { 
      console.log('\n\n=========RESPONSE END==============='); 
    }); 

    hres.on('error', function (e) { 
      console.log('ERROR: ' + e.message); 
    }); 
}); 

hreq.write(subscriber); 
hreq.end(); 

よりもむしろMailchimpからJSONエラーのも、いくつかの並べ替えを取得は、しかし、私は、HTMLを取得しています: 400不正な要求

400不正な要求


nginxの

は、私は "mはここで間違ってやって何のすべてで、それは明らかですか?それは非常に簡単だが、まだ私が試したものは何も動作していないようにみえます。

いくつかの追加の考え:

  1. HTTPのオプションは、「認証」プロパティを持っているが、私は許可を確保するための代わりのヘッダーを使用していますが、エンコーディング(as mentioned here)なしで送信されます。それでも、 "auth"プロパティで試してみましたが、同じ結果が得られます。
  2. ExpressJS APIの中から私のクライアントが上記のコードを呼び出すExpress APIを呼び出しています。簡単にするために、この例のすべてを編集しました。そのため、私の変数は "hres"と "hreq"で、Expressの "res"と "req"と区別しています。問題になる理由はありますか?
  3. 上記のように、私はPOSTmanを使用すると成功した結果を得ることができるので、ホスト、パス、リストID、およびAPIキーが正しいことを少なくとも知っています。
+0

Nodeのhttpsモジュールを使用しましたか?ちょっとした考え。 –

答えて

3

これは非常に単純な解決策でした:オプションオブジェクトの "ホスト"プロパティは、だけドメイン名をにする必要がありました。 IEの場合、「https://」プロトコルを削除してください:

var options = { 
    host: 'us11.api.mailchimp.com', 
    path: '/3.0/lists/<myListID>/members', 
    method: 'POST', 
    headers: { 
     'Authorization': 'randomUser myApiKey', 
     'Content-Type': 'application/json', 
     'Content-Length': subscriber.length 
    } 
} 
+0

私もプロトコル: "https:"を指定しなければなりませんでした。さもなければ、私は接続が拒否されるでしょう。 – Legoless

0

API v3で正しく機能するのはauthですが、400を取得してもそれは問題ではありません。 400エラーの本文は、より詳細な情報を提供するはずですが、ただちに飛び出す1つのことがあります。MailChimpでは、偽の電子メールまたは偽の電子メールを([email protected]のような)リストに追加することはできません。実際の住所とそれがあなたのために働くかどうかを確認してください。

4

これを試してみてください。

function mailchimpAddListCall(email, cb){ 
var subscriber = JSON.stringify({ 
     "email_address": email, 
     "status": "subscribed" 
    }); 

request({ 
      method: 'POST', 
      url: 'https://us13.api.mailchimp.com/3.0/lists/<Your list id>/members', 
      body: subscriber, 
      headers: 
        { 
         Authorization: 'apikey <your Mailchimp API key>', 
         'Content-Type': 'application/json' 
        } 

     }, 
      function(error, response, body){ 
      if(error) { 
       cb(err, null) 
      } else { 

       var bodyObj = JSON.parse(body); 
       console.log(bodyObj.status); 
       if(bodyObj.status === 400){ 
        cb(bodyObj.detail, null); 
       } 
       var bodyObj = JSON.parse(body); 
       cb(null, bodyObj.email_address +" added to list."); 
      } 
     }); 
} 
+0

組み込みのrequire( 'http')ライブラリでは動作しないため、ここで何が要求されているかを定義するとよいでしょう。 – Legoless

+0

@Legolessノードモジュールです - npmはリクエストをインストールしてからvar request = require( 'request')を使ってWAQARのように使用します –

関連する問題