首页 > 解决方案 > 使用服务器到服务器从 Salesforce 调用时,来自 Google 日历 API 的禁止 403 响应

问题描述

我正在尝试使用 REST API 在 Google 日历上插入一个事件,我正在使用 JWT 获取访问令牌,因为我不希望用户登录到谷歌帐户来获取令牌。我执行了以下步骤,但仍然收到错误:

  1. 我创建了一个服务帐户
  2. 我从谷歌得到一个令牌来发送请求
  3. 我还与服务帐户电子邮件地址共享了日历。

请看下面的代码:

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());
        }
    }

}

标签: salesforcegoogle-calendar-api

解决方案


推荐阅读