1

我正在 GAS 中为一些域管理 API 构建一些包装库。我有一个通用库,可以处理 OAuth、UrlFetch、XML 到对象和对象到 XML 函数。我已将此作为库添加到我的 API 包装器中。我创建的第一个是用于 EmailAuditAPI。当我将 EmailAuditAPI 作为库加载时,这工作得很好。我创建的第二个 API 包装器用于 GmailSettingsAPI。这个包装器本身工作得很好,但是当我从另一个脚本调用它时,它已经被加载为一个库。让你更直观

GoogleAPITools -> EmailAuditAPI Wrapper -> 项目脚本:有效!

GoogleAPITools -> GmailSettingsAPI Wrapper -> 项目脚本:不起作用!

GoogleAPITools -> GmailSettingsAPI 包装器:有效!

我认为这是重要的代码:

GoogleAPITools
function callGApi(apiUrl,authScope,method,payloadIn)
{  
  //oAuth & Fetch Arguments
  var fetchArgs = googleOAuth_("google", authScope);
  fetchArgs.method = method ? method : "GET";

  if(payloadIn)
  {
    fetchArgs.contentType = "application/atom+xml";
    fetchArgs.payload = payloadIn;
  }

  var urlFetch = UrlFetchApp.fetch(apiUrl, fetchArgs); //This line fails w/ not working wrapper
  var returnObject = urlFetch.getContentText() != '' ? Xml.parse(urlFetch.getContentText()) : urlFetch.getResponseCode();
  return returnObject;
}

//Google oAuth
function googleOAuth_(name,scope)
{
  var oAuthConfig = UrlFetchApp.addOAuthService(name);
  oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
  oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
  oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
  oAuthConfig.setConsumerKey("anonymous");
  oAuthConfig.setConsumerSecret("anonymous");
  return {oAuthServiceName:name, oAuthUseToken:"always"};
}

此包装器在作为库加载到第三个脚本时起作用。

function getAccountInfoRequest(user,reqId)
{
  var properties = GoogleAPITools.callGApi(ACCOUNTINFOURL + user + "/" + reqId,AUDITSCOPE).entry.property;
  return GoolgeAPITools.returnXmlToObject(properties);
}

当作为库加载到第三个脚本中时,此包装器不起作用,但它确实可以自己工作。GoogleAPITools 在两个包装脚本中作为库加载。

GmailSettingsAPI Wrapper
//Get Signature
function getSignatureForUser(user)
{
  var returnedInfo = GoogleAPITools.callGApi(EMAILSETTINGSURL + user + "/signature",EMAILSETTINGSSCOPE);
  return GoolgeAPITools.returnXmlToObject(new Array(returnedInfo.entry.property));
}

将两个包装器都加载为库的第三个项目脚本:

function testApiWrappers() {
  var user = "john";
  var reqId = "123456789";
  Logger.log(AuditApi.getAccountInfoRequest(user,reqId));
  Logger.log(GmailSettingsApi.getSignatureForUser(user)); //Fails here
}

在我的日志中,我看到了 AuditApi 调用的返回,但我收到了一个“意外错误:”,它引用了 GoogleAPITools 脚本中的 URLFetch。

这两个 API 的 Oauth 有什么不同吗?我错过了我的代码中有什么明显的东西吗?任何帮助都会很棒。

4

0 回答 0