Google API не возвращает лицензию на платное расширение Chrome - PullRequest
5 голосов
/ 21 февраля 2020

У меня есть несколько платных расширений в Chrome Интернет-магазине, которые работают безупречно через систему лицензирования Google API, но я не могу заставить работать недавно опубликованное расширение.

Каждый раз, когда я звоню для проверки лицензии ответ тот же:

"{   
   "kind":"chromewebstore#userLicense",   
   "itemId":"extension_id",   
   "result":false,   
   "maxAgeSecs":"2"
}"

Я вызываю код из учетной записи Google, отличной от моей учетной записи разработчика.

Я пытался создать оба проекта в Консоль разработчиков Google, а также привязка к расширению неиспользованных учетных данных 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
         });
      }
   });
 });
}

В чем может быть причина такого поведения?

...