向Google调用API时出错

时间:2017-09-15 05:32:53

标签: google-apps-script

我在Google Apps脚本中使用此OAuth库https://github.com/googlesamples/apps-script-oauth2/blob/master/samples/Smartsheet.gs

并尝试拨打Google Site Verification API,但在执行此操作时出现以下错误:

请求https://www.googleapis.com/siteVerification/v1/token返回的代码500失败。截断的服务器响应:{“error”:{“errors”:[{“domain”:“global”,“reason”:“backendError”,“message” :“后端错误”}],“代码”:500,“消息”:“后端错误”}}(使用muteHttpExceptions选项检查完整响应)(第14行,文件“服务”)

function run() {
  var service = getiService();
  if (service.hasAccess()) {

    var url = 'https://www.googleapis.com/siteVerification/v1/token';

    var result = UrlFetchApp.fetch(url, {
      'headers': {
        'Authorization' : 'Bearer ' + service.getAccessToken()
      },
      'method': 'GET',

  "site": {
    "identifier": "somedomainname.com",
    "type": "INET_DOMAIN"
  },
  "verificationMethod": "DNS_TXT"

                                   });

 Logger.log(result)   

感谢您的帮助。 谢谢

1 个答案:

答案 0 :(得分:1)

在我的环境中,the OAuth library that you say无法使用。所以我自己检索了访问令牌和刷新令牌,并确认这个脚本有效。如果该库也无法在您的环境中使用,请检索访问令牌和刷新令牌。

如果您想使用https://www.googleapis.com/siteVerification/v1/token的端点获取验证令牌,则可以看到引用WebResource: getToken。根据参考文献,该方法是" post"。在UrlFetchApp.fetch(),它将请求正文写入payload。当这些反映到脚本时,脚本如下所示。

修改后的脚本:

var url = 'https://www.googleapis.com/siteVerification/v1/token';
var requestBody = {
  site: {
    identifier: "somedomainname.com",
    type: "INET_DOMAIN",
  },
  verificationMethod: "DNS_TXT",
};
var result = UrlFetchApp.fetch(url, {
  headers: {'Authorization': 'Bearer ' + service.getAccessToken()}, // In my environment, service.getAccessToken() was changed to access token I retrieved.
  method: 'post',
  payload: JSON.stringify(requestBody),
  contentType: 'application/json',
  muteHttpExceptions: true,
});

结果:

{
  "method": "DNS_TXT",
  "token": "google-site-verification=#####"
}