我正在使用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请求被发送出去时(它们出现在活动图表上)。
答案 0 :(得分:2)
我解决了,问题不在于代码本身。
问题在于分享我的表格。要允许从服务帐户读取/编辑对工作表的访问权限,必须与服务帐户ID电子邮件地址共享,方式与其他任何用户共享。如果没有这样做,脚本将产生403错误。