2

サーバーからサブスクライバー情報を取得したいのです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(".");
}

}
4

0 に答える 0