通过服务帐户密钥访问Google表格API

时间:2017-06-15 12:22:30

标签: java api google-app-engine oauth-2.0 apex

我正在使用Google表格< - > Salesforce集成并使用Salesforce编程语言进行开发 - Force.com平台上的Apex。

目前我正在尝试连接Google表格API。我正在使用服务帐户密钥,因此Salesforce可以从Google表格中提取数据,而无需在每次发出查询时都需要手动授权。

我正处于设置服务帐户密钥的位置,并且我已成功向其发送请求以获取access_code。

然后我尝试使用以下类来查询API:

        /****** API CALLOUT *******/
        public static HttpResponse googleSheetsCallout (){
    //the below line provides a string containing access token to google
          string accessCode = getAccessToken();
//I found this endpoint structure online, this may be why my script 
//isn't working. However, I am struggling to find the alternative.          
string endpoint = 'https://sheets.googleapis.com/v4/spreadsheets/params=[SPREADSHEET ID GOES HERE]/values/[RANGE GOES HERE]?access_token=';
          httpRequest req = new httpRequest();
          req.setEndpoint(endpoint+accessCode);
          req.setMethod('GET');
          req.setTimeout(120000);
          httpResponse res = new http().send(req);
          System.debug ('res is ' +res);
          return res;

        }

当我运行该函数时,这就是日志返回的内容:

|CALLOUT_RESPONSE|[71]|System.HttpResponse[Status=Forbidden, StatusCode=403]
|USER_DEBUG|[72]|DEBUG|res is System.HttpResponse[Status=Forbidden, StatusCode=403]

我在google开发者控制台菜单中启用了Google表格访问权限,有趣的是,当在控制台上看到Google会注意到API请求被发送出去时(它们出现在活动图表上)。

1 个答案:

答案 0 :(得分:2)

我解决了,问题不在于代码本身。

问题在于分享我的表格。要允许从服务帐户读取/编辑对工作表的访问权限,必须与服务帐户ID电子邮件地址共享,方式与其他任何用户共享。如果没有这样做,脚本将产生403错误。