2014-04-09 22 views
5

Bir Node JS sunucusu kullanıyorum ve Adwords API'sinden bir erişim belirteci almaya çalışıyorum. POST isteğini gerçekleştirmek için curler npm'den (https://www.npmjs.org/package/curler) kullanıyorum. Ben olsunDüğüm js Adwords Api

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); 
}); 

tepki ikonların giriş bilgileri olmadığı, yanlış olduğunu söylüyor

statusCode: 403 
bodyData: Error=BadAuthentication 

geçerli: İşte kod örneğidir. Yanlış uygulamayı mı seçtiğimi mi yoksa sadece bir başlığı mı yoksa bir şeyi mi özlediğimi anlayamıyorum.

+0

Normal oturum açma işleminizin yeterli olmadığını ve bir API belirteci veya başka bir kimlik doğrulama yöntemi için kayıt yaptırmanız gerektiğini tahmin ediyorum. –

+0

Şey, aynı yöntem, adwords uygulaması veya geliştirici api anahtarı kullanmadan curl aracılığıyla php'de çalışmaktadır, –

+1

Hiç bu işe yaramadı mı? Fonksiyonel bir örnek harika olurdu. – mz3

cevap

0

Yeni erişim belirteci almak için kullandığınız kod şu şekildedir: https://github.com/ErikEvenson/googleads-node-lib/blob/v0.0.17/services/adWordsService.js#L206-L241. Erişim belirteci credentials.access_token'da biter.

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; 
    } 
    };