サーバーからサブスクライバー情報を取得したいのですGoogle Play
が、トークン応答ステージを通過することさえできませんでした。関連する回答を確認し、推定Googleサーバー時間を調整しましたが、解決策が見つかりませんでした。
javascript
また、常に応答文字列を返すサーバー側も以下に添付しました。「アップロードが成功しました! サーバーは次のように応答しました:
{ "error": "invalid_grant", "error_description": "不正なリクエスト" }"
前もって感謝します。
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(".");
}
}