我正在 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 有什么不同吗?我错过了我的代码中有什么明显的东西吗?任何帮助都会很棒。