我们有一个安装在五个 G Suite 帐户中的 Apps 脚本。我正在从部署在 Google App Engine 中的 Java 代码调用应用程序脚本。我已将五个刷新令牌存储在属性文件中,并在调用 Apps 脚本之前以循环方式将它们设置在 GoogleCredential 中。当我尝试调用 Apps ScriptRequested entity was not found.
时,会返回错误。但是,当我创建一个简单的 java 程序来调用 Apps 脚本时,相同的刷新令牌和客户端密码可以正常工作。
@Service
public class GoogleAppsScriptServiceImpl {
private String[] scriptIds;
private String[] refreshTokens;
private GoogleCerdential credential;
public void executeAppsScript() {
List<Object> params = new ArrayList<>();
params.add(googleDocFileId);
ExecutionRequest request = new ExecutionRequest()
.setFunction(APPS_SCRIPT_FUNCTION_NAME)
.setParameters(params);
int index = new Random().nextInt(numOfUsers);
Script scriptService = getScriptService(refreshTokens[index]);
String scriptId = scriptIds[index];
Operation operation = scriptService.scripts()
.run(scriptId, request)
.setQuotaUser(UUID.randomUUID().toString())
.execute();
}
private Script getScriptService(String refreshToken) {
credential.setRefreshToken(refreshToken);
return new Script.Builder(httpTransport, jsonFactory, credential)
.setApplicationName(APPLICATION_NAME)
.build();
}
@PostConstruct
private void createGoogleCredential() throws Exception {
jsonFactory = JacksonFactory.getDefaultInstance();
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setClientSecrets(clientId, clientSecret)
.build();
refreshTokens = commaDelimitedListToStringArray(refreshTokensProp);
numOfUsers = refreshTokens.length;
scriptIds = commaDelimitedListToStringArray(scriptsIdsProp);
}
}