Я создаю интеграцию между Google и Salesforce, для этого я APEX. Из-за потока и способа работы Salesforce мне пришлось создать учетную запись службы и войти в нее, используя это.Проблемы с Google REST API
У меня теперь проблема; Я вхожу в систему: все хорошо, затем я делаю вторую выноску, чтобы попытаться получить две последние созданные записи на моем Диске: я получаю только 1 файл - PDF с текстом приветствия и информацией о том, как использовать диск. .
Так что я сделал немного тестирования и обнаружил следующее:
- Если я использую this и Аутентифицировать с помощью OAuth 2.0 я не получаю никаких проблем, и я могу получить все документы, Я хочу получить.
- Если я получаю маркер доступа и добавить его к этому URL: https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxx я получаю ответ давая мне знать, что мой маркер правильно, и что у меня есть правильный объем, необходимый (см ниже)
{ "issued_to": "1234567890", "audience": "1234567890", "scope": "https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.appdata https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.metadata https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/drive.photos.readonly https://www.googleapis.com/auth/drive.readonly https://www.googleapis.com/auth/drive.scripts", "expires_in": 3493, "access_type": "offline" }
Есть ли у кого-нибудь идеи, что я могу делать неправильно? Я использовал учетную запись службы, чтобы начать начальное подключение, для которого я активировал «Включить делегирование доменов Google Apps», я также установил как можно больше разрешений, чтобы позволить пользователю в основном просматривать и изменять все
-------- Update --------
фрагменты кода
Метод построения выноски:
public void getRecentImages(){
Integration_Settings__c settings = Integration_Settings__c.getValues('Google APIs');
String endpoint = settings.Endpoint_URL__c + '/drive/v3/files' +
'?corpus=user' +
'&orderBy=createdTime' +
'&pageSize=2';
Map<String, String> headers = new Map<String, String>();
headers.put('Authorization', 'Bearer ' + accessToken);
headers.put('Content-Type', 'application/json');
headers.put('Charset', 'UTF-8');
String method = 'GET';
HttpResponse res = doCallout(endpoint, method, null, headers);
System.debug(res.getBody());
JSONParser parser = JSON.createParser(res.getBody());
// New instance of GoogleFiles
Google.GoogleFiles response;
// Try/Catch
try {
// Parse JSON into response
response = (Google.GoogleFiles)parser.readValueAs(Google.GoogleFiles.class);
System.debug(response);
} catch(Exception e){
System.debug(e.getLineNumber() + ' - ' + e.getMessage());
}
}
Способ сделать выноски:
public HttpResponse doCallout(String endpoint, String method, String body, Map<String, String> headers){
// Instataite new instance of Http
Http h = new Http();
// Instatiate new instace of HttpRequest
HttpRequest req = new HttpRequest();
// Set Endpoint URL
req.setEndpoint(endpoint);
// Set Method Type
req.setMethod(method);
// Set Body
if(body != null)
req.setBody(body);
// If there are headers set Headers
if(headers != null && headers.size() > 0)
for(String s : headers.keySet())
req.setHeader(s, headers.get(s));
// Return HttpResponse
return h.send(req);
}
-------- Update 2 --------
JSON, который возвращается в условном обозначении Salesforce и Почтальон:
{
"kind": "drive#fileList",
"files": [
{
"kind": "drive#file",
"id": "0B_07cXloqOyRc3RhcnRlcl9maWxl",
"name": "Getting started",
"mimeType": "application/pdf"
}
]
}
JSON, который возвращается из https://developers.google.com/drive/v3/reference/files/list:
{
"kind": "drive#fileList",
"nextPageToken": "xxxxxx",
"files": [
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.folder"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.spreadsheet"
},
{
"kind": "drive#file",
"id": "0B34hDNHXoLmVTFZ1VXhzbHRkUmc",
"name": "Osney Media - 00038156",
"mimeType": "application/vnd.google-apps.folder"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.folder"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.folder"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.folder"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.folder"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.folder"
},
{
"kind": "drive#file",
"id": "xxxxxx",
"name": "xxxxxx",
"mimeType": "application/vnd.google-apps.folder"
},
ETC......
]
}
Вы упомянули: «Затем я делаю вторую выноску, чтобы попытаться получить две последние созданные записи на моем Диске». Пожалуйста, уточните, как вы на самом деле это сделали. Пожалуйста, поделитесь блоком кода. – some1
@ some1 код добавлен! – Timothy
Во-первых, вы можете использовать только [область] (https://developers.google.com/drive/v3/web/about-auth#what_scope_or_scopes_does_my_app_need) 'https: // www.googleapis.com/ auth/drive', он уже имеет полное разрешение на доступ к файлам. Если вы используете полномочия домена для домена, то правильно делегировать этот орган, используя учетную запись службы. Поэтому я предлагаю дважды проверить, выполняете ли вы правильные шаги при создании [учетной записи службы] (https://developers.google.com/identity/protocols/OAuth2ServiceAccount) – KENdi