tub*_*der 5 javascript google-chrome google-api google-chrome-extension google-oauth
我在 Chrome 网上应用店中有一些付费扩展程序,它们通过 Google API 许可系统完美运行,但我无法使最近发布的新扩展程序工作。
每次我要求检查许可证时,响应都是一样的:
"{
"kind":"chromewebstore#userLicense",
"itemId":"extension_id",
"result":false,
"maxAgeSecs":"2"
}"
Run Code Online (Sandbox Code Playgroud)
我确实从不同于我的开发者帐户的 Google 帐户调用代码。
我尝试在 Google Developers Console 中创建一个新项目,以及将现有项目中未使用的 OAuth 2.0 凭据绑定到扩展。
结果总是一样的。
这是用于检查我在所有扩展程序中使用的许可证的代码(它基本上没有改变并取自该站点):
const licenceChecker = (function licenceCheckModule() {
const CWS_LICENSE_API_URL = 'https://www.googleapis.com/chromewebstore/v1.1/userlicenses/';
let trialPeriodDays = 0;
let verbose = false;
let cachedResult;
let tsCacheExpiration = 0;
let accessToken;
const init = function init(params) {
if (params.trialPeriodDays) {
trialPeriodDays = params.trialPeriodDays;
}
if (params.verbose) {
verbose = true;
}
};
const get = function get(cbProcessResult) {
if (Date.now() < tsCacheExpiration) {
if (verbose) {
console.log('from cache', cachedResult);
}
cbProcessResult(cachedResult);
return;
}
xhrWithAuth(
'GET',
CWS_LICENSE_API_URL + chrome.runtime.id, true,
(error, status, response) => {
const result = processResponse(error, status, response);
cbProcessResult(result);
}
);
};
function processResponse(error, status, response) {
if (verbose) {
console.log(error, status, response);
}
const result = {};
let data;
if (status === 200) {
data = JSON.parse(response);
result.error = false;
result.data = parseLicense(data);
result.response = data;
cachedResult = result;
} else {
result.error = true;
result.response = response;
}
return result;
}
function parseLicense(license) {
tsCacheExpiration = (parseInt(Date.now() / 1000, 10)
+ parseInt(license.maxAgeSecs, 10)) * 1000;
if (!tsCacheExpiration) {
tsCacheExpiration = 0;
}
if (license.result && license.accessLevel === 'FULL') {
return 'FULL';
} else if (license.result && license.accessLevel === 'FREE_TRIAL') {
let daysAgoLicenseIssued = Date.now() - parseInt(license.createdTime, 10);
daysAgoLicenseIssued = daysAgoLicenseIssued / 1000 / 60 / 60 / 24;
if (trialPeriodDays && daysAgoLicenseIssued <= trialPeriodDays) {
if (verbose) {
console.log('Free trial, still within trial period');
}
return 'FREE_TRIAL';
}
if (verbose) {
console.log('Free trial, trial period expired.');
}
return 'FREE_TRIAL_EXPIRED';
}
if (verbose) {
console.log('No license ever issued.');
}
return 'NO_LICENSE';
}
function xhrWithAuth(method, url, interactive, callback) {
let retry = true;
getToken();
function getToken() {
chrome.identity.getAuthToken({ interactive }, (token) => {
if (chrome.runtime.lastError) {
callback(chrome.runtime.lastError);
return;
}
accessToken = token;
requestStart();
});
}
function requestStart() {
const xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.setRequestHeader('Authorization', `Bearer ${accessToken}`);
xhr.onload = requestComplete;
xhr.send();
}
function requestComplete() {
if (this.status === 401 && retry) {
retry = false;
chrome.identity.removeCachedAuthToken({ token: accessToken },
getToken);
} else {
callback(null, this.status, this.response);
}
}
}
return {
init,
get
};
}());
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.cmd === 'checkLicence') {
licenceChecker.init({
trialPeriodDays: 1,
verbose: false
});
checkLicense((isAuthorised) => {
sendResponse(isAuthorised);
});
}
return true;
});
function checkLicense(cbContinue) {
licenceChecker.get(result => {
chrome.identity.getProfileUserInfo(userInfo => {
if (result.data === 'FULL' || result.data === 'FREE_TRIAL') {
cbContinue({
email: userInfo.email,
licenced: true
});
} else {
cbContinue({
email: userInfo.email,
licenced: false
});
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
这种行为的原因是什么?
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |