2014-04-09 20 views
5

मैं एक नोड जेएस सर्वर का उपयोग कर रहा हूं और एडवर्ड्स एपीआई से एक्सेस टोकन प्राप्त करने का प्रयास कर रहा हूं। POST अनुरोध करने के लिए मैं कर्नल का उपयोग एनपीएम (https://www.npmjs.org/package/curler) से करता हूं।नोड जेएस एडवर्ड्स एपी

var login = '[email protected]'; 
var pass = 'mypassword'; 
var data = JSON.stringify({ 
    Email: login, 
    Passwd : pass, 
    accountType: 'GOOGLE', 
    service: 'adwords', 
    source: 'adwordstest' 
}); 
var options = { 
    method: "POST", 
    url: 'https://www.google.com/accounts/ClientLogin', 
    headers: { 
     'Content-Type': 'application/json' 
    }, 
    data: data, 
    timeout: 5000, 
    connectionTimeout: 5000 
}; 

var startDate = Date.now(); 
curl.request(options, function(err, res, bodyData) { 
    var duration = (Date.now() - startDate); 
    if (err) { 
     console.log(err); 
    } 
    else { 
     console.log('statusCode: %s', res.statusCode); 
     console.log('bodyData: %s', bodyData); 
    } 
    console.log("curler (libcurl) performed http request in %s ms. dnsTime: %s, connectTime: %s, preTransferTime: %s, startTransferTime: %s, totalTime: %s", duration, res.dnsTime, res.connectTime, res.preTransferTime, res.startTransferTime, res.totalTime); 
}); 

प्रतिक्रिया मैं

statusCode: 403 
bodyData: Error=BadAuthentication 

जो मूल रूप से कहते हैं प्रवेश जानकारी गलत है, जो नहीं है: यहाँ कोड नमूना है। यह पता नहीं लगा सकता कि मैंने गलत कार्यान्वयन चुना है, या सिर्फ हेडर या कुछ खो रहा है या नहीं।

+0

मुझे लगता है कि आपका नियमित लॉगिन पर्याप्त नहीं है और आपको एपीआई टोकन या प्रमाणीकरण की कुछ अन्य विधि के लिए पंजीकरण करने की आवश्यकता है। –

+0

बात यह है कि वही विधि php के माध्यम से कर्ल के माध्यम से काम करती है, बिना ऐडवर्ड्स एप्लिकेशन या डेवलपर एपीआई कुंजी –

+1

का उपयोग किए बिना क्या आपने कभी यह काम किया है? एक कार्यात्मक उदाहरण भयानक होगा। – mz3

उत्तर

0

यहां एक कोड है जिसका उपयोग मैं ताजा एक्सेस टोकन प्राप्त करने के लिए करता हूं: https://github.com/ErikEvenson/googleads-node-lib/blob/v0.0.17/services/adWordsService.js#L206-L241। पहुंच टोकन credentials.access_token में समाप्त होता है।

self.refresh = function(done) { 
    // check if current credentials haven't expired 
    if (self.credentials && Date.now() < self.credentials.expires) { 
     // behave like an async 
     setTimeout(function() {done(null);}, 0); 
     return; 
    } else { 
     // throw away cached client 
     self.client = null; 

     var qs = { 
     refresh_token: self.options.ADWORDS_REFRESH_TOKEN, 
     client_id: self.options.ADWORDS_CLIENT_ID, 
     client_secret: self.options.ADWORDS_SECRET, 
     grant_type: 'refresh_token' 
     }; 

     request.post(
     { 
      qs: qs, 
      url: self.tokenUrl 
     }, 
     function(error, response, body) { 
      self.credentials = JSON.parse(body); 
      self.credentials.issued = Date.now(); 

      self.credentials.expires = self.credentials.issued - 
      self.credentials.expires_in; 

      done(error); 
     } 
    ); 

     return; 
    } 
    };