2017-06-15 11 views
1

Googleスプレッドシート< - > Salesforceの統合とSalesforceプログラミング言語 - Force.comプラットフォームのApexで開発中です。サービスアカウントキーを使用してGoogleスプレッドシートAPIにアクセス

現在、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; 

     } 

私は機能を実行すると、これはどのようなログ戻っている:私はGoogleスプレッドシートのアクセスを有効に

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

Googleの開発者用コンソールメニューと興味深いのは、コンソールでlokingするときに、GoogleがAPIリクエストを送信したことが通知されているように見えます(アクティビティチャートに表示されています)。

答えて

1

私はそれを解決しましたが、問題はコード自体ではありませんでした。

問題は自分のシートを共有していました。サービスアカウントからシートへの読み取り/編集アクセスを許可するには、他のユーザーと同じ方法でサービスアカウントIDの電子メールアドレスと共有する必要があります。これが行われないと、スクリプトは403エラーを生成します。

関連する問題