2015-10-01 8 views
8

के माध्यम से सूची में ईमेल जोड़ें, मैं सूची में ईमेल जोड़ने के लिए नया MailChimp 3.0 API कॉल करने के लिए नोडजेएस का उपयोग कर रहा हूं। मैं यह डाकिया के माध्यम से काम करना आरंभ कर सकते हैं, मैं नोड के http के साथ एक मुश्किल समय हो रही है: Mailchimp से JSON त्रुटि के भी किसी प्रकार हो रही के बजायमेलचंप एपीआई v3.0 नोडजेएस 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(); 

, तथापि, मैं हो रही है HTML: 400 गलत अनुरोध

400 गलत अनुरोध


nginx

यह बिल्कुल स्पष्ट है कि मैं क्या "मी गलत यहां क्या कर है? यह बहुत सरल लगता है, अभी तक कुछ भी नहीं मैं कोशिश की है काम करने के लिए लगता है।

कुछ अतिरिक्त विचार:

  1. जबकि http के विकल्प एक "प्रमाणन" संपत्ति है, मैं हेडर उपयोग कर रहा हूँ बजाय प्राधिकरण सुनिश्चित करने के लिए एन्कोडिंग (as mentioned here) के बिना भेजा जाता है। फिर भी, मैंने "auth" संपत्ति के साथ भी प्रयास किया है, और मुझे एक ही परिणाम मिल गया है।
  2. मैं वास्तव में से के अंदर एक एक्सप्रेसजेएस एपीआई (मेरा क्लाइंट एक्सप्रेस एपीआई कहता है, जो उपर्युक्त कोड कहता है - मैंने सादगी के लिए इस उदाहरण से बाहर सभी को संपादित किया है) में यह कॉल कर रहा हूं। यही कारण है कि मेरे चर "hres" और "hreq" हैं, उन्हें एक्सप्रेस में "res" और "req" से अलग करने के लिए। क्या कोई कारण है कि यह मुद्दा हो सकता है?
  3. जैसा ऊपर बताया गया है, मैं am POSTman का उपयोग करते समय सफल परिणाम प्राप्त करने में सक्षम हूं, इसलिए मुझे कम से कम मेरा होस्ट, पथ, सूची आईडी और API कुंजी सही पता है।
+0

क्या आपने नोड के https मॉड्यूल का उपयोग करने का प्रयास किया है? सिर्फ एक विचार। –

उत्तर

3

यह पता चला है कि इसका एक बहुत ही सरल समाधान था: विकल्प बॉक्स की "मेजबान" संपत्ति केवल डोमेन नाम होने की आवश्यकता है। आईई, "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

आप एपीआई v3 के साथ auth गुणों का ठीक उपयोग कर सकते हैं, लेकिन यदि आपको 400 मिल रहा है, तो यह समस्या नहीं है। 400 त्रुटि के शरीर को अधिक विस्तृत जानकारी प्रदान करनी चाहिए, लेकिन एक चीज जो तुरंत बाहर निकलती है: 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

यहां अनुरोध करने के लिए अच्छा होना अच्छा हो सकता है, क्योंकि यह अंतर्निहित आवश्यकता ('http') लाइब्रेरी के साथ काम नहीं करता है। – Legoless

+0

@Legoless यह एक नोड मॉड्यूल है - npm इंस्टॉल अनुरोध और फिर var अनुरोध = आवश्यकता ('अनुरोध') WAQAR जैसे इसे उपयोग करने के लिए यहां करता है –

संबंधित मुद्दे