salesforce - 使用服务器到服务器从 Salesforce 调用时,来自 Google 日历 API 的禁止 403 响应
问题描述
我正在尝试使用 REST API 在 Google 日历上插入一个事件,我正在使用 JWT 获取访问令牌,因为我不希望用户登录到谷歌帐户来获取令牌。我执行了以下步骤,但仍然收到错误:
- 我创建了一个服务帐户
- 我从谷歌得到一个令牌来发送请求
- 我还与服务帐户电子邮件地址共享了日历。
请看下面的代码:
public class GoogleCalendarSynchronization {
public static void addEvent (){
String accessToken = GenerateJWTBearerToken.generateTokenforGoogleCalendarServices();
system.debug(accessToken);
String createEventEndPoint = 'https://www.googleapis.com/calendar/v3/calendars/primary/events/';
String createEventBody = '{' +
'"attendees": ['+
'{'+
'"email": "abc@gmail.com"'+
'},'+
'{'+
'"email": "abc@gmail.com"'+
'}'+
'],'+
'"end": {'+
'"dateTime": "2019-12-27T03:30:00-07:00"'+
'},'+
'"start": {'+
'"dateTime": "2019-12-27T03:30:00-06:00"'+
'},'+
'"summary": "Appointment has been confirmed..!!",'+
'"location": "TEST",'+
'"sendUpdates": "all"'+
'}';
//system.debug(createEventBody);
Http http = new Http();
HttpRequest httpReq = new HttpRequest();
HttpResponse HttpRes = new HttpResponse();
httpReq.setEndpoint(createEventEndPoint);
httpReq.setMethod('POST');
httpReq.setBody(createEventBody);
httpReq.setHeader('Content-Type', 'application/json');
httpReq.setHeader('Authorization','Bearer ' + accessToken);
try{
HttpRes = http.send(httpReq);
if(HttpRes.getStatusCode() == 200){
String response = HttpRes.getBody();
system.debug(response);
Map<String, Object> responseMap = (Map<String, Object>)JSON.deserializeUntyped(response);
system.debug(responseMap.get('id'));
system.debug('calendar is saved successfully..!!');
}else{
String errorMessage = 'Unexpected Error while communicating with Google Calendar API. '
+'Status '+HttpRes.getStatus()+' and Status Code '+HttpRes.getStatuscode();
system.debug(errorMessage);
}
} catch(system.Exception e){
System.debug('#### Exception Executed : '+e.getMessage() + ' ' + e.getStackTraceString() + ' ' +e.getLineNumber());
}
}
}
解决方案
推荐阅读
- python - 更新烧瓶模型后无法插入或更新到新列数据库
- excel - 如何在不跳过列的情况下从合并单元格复制和粘贴公式
- python - 如何使我的矩形与旋转精灵一起旋转
- node.js - Giphy API 总是提供相同的 gif (discord.js)
- react-native - 我已经在 play 和 apple store 上发布了一个 expo 应用程序。在这种情况下,如何使用 OTA 无线更新?
- ios - 无法使用 React Native WebView 在 iOS 中单击和拨打电话号码
- reactjs - react-final-form formState 条件渲染中的问题
- amazon-web-services - 限制对 aws s3 中文档的访问以保护访问用户免受其他租户访问它的最佳方法是什么
- tensorflow - 如何从索引值中获取值
- java - 格式化Alluxio:没有在文件系统工厂下找到:hdfs://nameservice1/alluxio/journal/BlockMaster