我想从Google Play
服务器获取订阅者信息,但我什至无法通过令牌响应阶段。我检查了相关答案,调整了可能的谷歌服务器时间,但我找不到解决方案。
我还在下面附加了服务器端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(".");
}
}