2

I want to get subscriber information from Google Play servers but I could not even pass the token response stage. I checked related answers, aligned probable google server time but I could not find a solution.

I also attached the server-side javascript below which always turns response string; "Upload successful! Server responded with:

{ "error": "invalid_grant", "error_description": "Bad Request" }"

Thanks in advance.

function myFunction() {
var googleRequest = require('request');
var googleUrl = "https://www.googleapis.com/oauth2/v3/token";   

var private_key = "xxx";//intentionally xxx'ed for security and clarity
var s1 = JSON.stringify({"alg":"RS256","typ":"JWT"});

var now = new Date().getTime();

var s2 = JSON.stringify({
"iss":"xxx@developer.gserviceaccount.com",
"scope":"https://www.googleapis.com/auth/prediction",
"aud":"https://www.googleapis.com/oauth2/v3/token",
"exp":now + 3600,
"iat":now
});

function base64(input) {
return new Buffer(input, 'utf8').toString('base64');
}


JWT = zumoJwt(s1, s2, private_key);

var payload = {
grant_type:"assertion",
assertion_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",
assertion:JWT
}

var r = googleRequest.post(
googleUrl,
{ form: payload },
function optionalCallback (err, httpResponse, body) {
if (err) {
console.error('upload failed:', err);
} else {
console.log('Upload successful!  Server responded with:', body);
}
},
{'Content-Type': 'application/x-www-form-urlencoded'}
);


function zumoJwt(s1, s2, masterKey) {

var crypto = require('crypto');

function base64(input) {
return new Buffer(input, 'utf8').toString('base64');
}

function urlFriendly(b64)
{
return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
}

function signature(input) {

var key = crypto.createHash('sha256').update(masterKey + "JWTSig").digest('binary');
var str = crypto.createHmac('sha256', key).update(input).digest('base64');
return urlFriendly(str);
}

var b1 = urlFriendly(base64(s1));
var b2 = urlFriendly(base64(s2));
var b3 = signature(b1 + "." + b2);

return [b1,b2,b3].join(".");
}

}
Ionică Bizău
  • 109,027
  • 88
  • 289
  • 474

0 Answers0