我已阅读了管理员ADK Directory API documentation中的所有相关网页以及有关stackoverflow的几个问题,而且我仍然卡住了。
我是Google Apps域的超级管理员,我希望我域中的用户能够创建自己的Google网上论坛。我制作了一个Google表单,用户可以在其中指定该组的名称和电子邮件。然后,Google表单回复表中有一个" On表单提交"触发器调用我的代码来创建组。
当我从脚本编辑器运行createGroupTest()
时,此代码有效。它会立即在我的Google应用领域中创建该群组。
当" On表单提交&#34>时,此代码 不起作用trigger运行onFormSubmit(e)
函数。我收到了来自catch(e)
Exception: Failed to authenticate for service: Groups
的电子邮件。
有没有人知道是什么原因导致oauth身份验证在脚本编辑器中工作,但在onFormSubmit函数调用时却没有?
function createGroupTest() {
var t = new Date();
t = t.getTime();
createGroup("AAA Test Group " + t,"aaa.testgroup." + t + "@mydomain.com","me@mydomain.com");
}
var consumerKey="mydomain.com";
var consumerSecret="xxxxxxxxxxxxxxxxxxxxxxxx";
var domainName="mydomain.com";
function onFormSubmit(e) {
try {
var timestamp = e.values[0];
var groupName = e.values[1];
var groupEmail = e.values[2];
var owner = e.values[3];
createGroup(groupName,groupEmail,owner);
var recipient = "me@mydomain.com";
var body = 'Group created! '+ groupName;
var subject = groupName + " Email Group Created";
var advancedArgs = {htmlBody:body , replyTo:email};
MailApp.sendEmail(recipient, subject, body, advancedArgs);
} catch(e) {
MailApp.sendEmail("me@mydomain.com", "Error processing Create New Email Distribution Group form submit", e);
}
}
function createGroup(groupName,groupEmail,owner) {
owner = owner.split("@")[0];
var description = 'test';
var requestBody = '{"email": "'+groupEmail+'","name": "'+groupName+'","description": "'+description+'"}';
var scope="https://www.googleapis.com/auth/admin.directory.group";
var fetchArgs = googleOAuth_("Groups",scope);
fetchArgs.method = "POST";
fetchArgs.contentType = "application/json";
fetchArgs.payload = requestBody;
fetchArgs.muteHttpExceptions=true;
var url = 'https://www.googleapis.com/admin/directory/v1/groups?key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
UrlFetchApp.fetch(url, fetchArgs);
}
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(consumerKey);
oAuthConfig.setConsumerSecret(consumerSecret);
return {oAuthServiceName:name, oAuthUseToken:'always'};
}
答案 0 :(得分:3)
我明白了:我在我的代码中犯了一个错误,我在groupEmail字符串之后没有包含域扩展名(因为Google表单只要求用户填写组电子邮件名称而不用< / em>域名扩展名)。
我想我应该从stackoverflow中删除这个问题,但我会留在这里记录我的工作oauth身份验证代码,因为:
当我搞清楚时,这样的事情可以帮助我。
此处与Google Apps管理SDK目录API相关的帖子不多。