Добрый день!
Очень нужен свежий взгляд.
Дано:
Веб сервис Сервис хранит в себе ответы. Ответы приходят по ссылке: https://iryna72.typeform.com/to/CYRO64?hid=xxxxx
Example: https://iryna72.typeform.com/to/CYRO64?hid=accountid_1
Где CYRO64 form_id
hid= скрытое поле на форме ответа
Доступ
ikabanchuk@gmail.com strana8888
Пpи попытке подключиться Authentification error:
{"code":"AUTHENTICATION_FAILED","description":"Authentication credentials not found on the Request Headers"}
Remote Site Settings created in setup.
https://iryna72.typeform.com
Задача: Получить ответы с формы:
https://admin.typeform.com/form/CYRO64/results#summary
в salesforce.
https://www.typeform.com/help/data-api/ - здесь инструкция к использованию.
Вопрос: Что я упустила? Где есть проблема?
Code
//https://iryna72.typeform.com/to/CYRO64?hid=xxxxx
//Example: https://iryna72.typeform.com/to/CYRO64?hid=accountid_1public without sharing class TEST_REST {
//{form_id} no dependency on {form_id}
public static String strEndPoint = 'https://iryna72.typeform.com/forms/CYRO64/responses';
public static String strHeader = 'If-Modified-Since';
public static String username = 'ikabanchuk@gmail.com';
public static String password = 'strana8888';
public static Integer recentCustomersNumber = 10;
public static String serverReply = 'Server reply : ';
public static String serverMES = '';
public static void deserialize() {
try {
Http h = new Http();
HttpRequest request = new HttpRequest();
request.setEndPoint(strEndPoint);
request.setHeader('Content-Type', 'application/json');
//request.setHeader('If-Modified-Since', String.valueOf(System.now().addDays(-1))); //'Wed, 04 Jul 2018 00:00:00 GMT'
request.setMethod('GET');
//request.setHeader('since', '2018-06-10T00:00:00');
//request.setHeader('until', '2018-07-20T00:00:00');
Blob headerValue = Blob.valueOf(username + ':' + password);
String authorizationHeader = 'Basic ' + EncodingUtil.base64Encode(headerValue);
request.setHeader('Authorization', authorizationHeader);
HttpResponse response = h.send(request);system.debug(logginglevel.error, 'getBody() : ' + response.getBody());
system.debug(logginglevel.error, 'getHeaderKeys()() : ' + response.getHeaderKeys());for (String key: response.getHeaderKeys()) {
system.debug(logginglevel.error, '---------------- key: ' + key);
system.debug(logginglevel.error, '---------------- getHeader(key) ' + response.getHeader(key));
}
} catch (Exception ex) {
system.debug(logginglevel.error, 'ex' + ex.getMessage());
throw EG_AuraUtils.makeException(ex.getMessage());
}
}@AuraEnabled
public static String getForms(Integer processnumber) {
try {
recentCustomersNumber = processnumber;
deserialize();
return serverMES;
} catch (Exception ex) {
//throw EG_AuraUtils.makeException(ex.getMessage());
return 'Please, contact your admin to resolve an ussue. Referred issue : ' + ex.getMessage();
}
}
}
Добрый день! Очень нужен свежий взгляд. Дано: Веб сервис Сервис хранит в себе ответы. Ответы приходят по ссылке: https://iryna72.typeform.com/to/CYRO64?hid=xxxxx Example: https://iryna72.typeform.com/to/CYRO64?hid=accountid_1 Где CYRO64 form_id hid= скрытое поле на форме ответа Доступ ikabanchuk@gmail.com strana8888 Пpи попытке подключиться Authentification error: {"code":"AUTHENTICATION_FAILED","description":"Authentication credentials not found on the Request Headers"} Remote Site Settings created in setup. https://iryna72.typeform.com Задача: Получить ответы с формы: https://admin.typeform.com/form/CYRO64/results#summary в salesforce. https://www.typeform.com/help/data-api/ - здесь инструкция к использованию. Вопрос: Что я упустила? Где есть проблема? Code [code]//https://iryna72.typeform.com/to/CYRO64?hid=xxxxx //Example: https://iryna72.typeform.com/to/CYRO64?hid=accountid_1 public without sharing class TEST_REST { //{form_id} no dependency on {form_id} public static String strEndPoint = 'https://iryna72.typeform.com/forms/CYRO64/responses'; public static String strHeader = 'If-Modified-Since'; public static String username = 'ikabanchuk@gmail.com'; public static String password = 'strana8888'; public static Integer recentCustomersNumber = 10; public static String serverReply = 'Server reply : '; public static String serverMES = ''; public static void deserialize() { try { Http h = new Http(); HttpRequest request = new HttpRequest(); request.setEndPoint(strEndPoint); request.setHeader('Content-Type', 'application/json'); //request.setHeader('If-Modified-Since', String.valueOf(System.now().addDays(-1))); //'Wed, 04 Jul 2018 00:00:00 GMT' request.setMethod('GET'); //request.setHeader('since', '2018-06-10T00:00:00'); //request.setHeader('until', '2018-07-20T00:00:00'); Blob headerValue = Blob.valueOf(username + ':' + password); String authorizationHeader = 'Basic ' + EncodingUtil.base64Encode(headerValue); request.setHeader('Authorization', authorizationHeader); HttpResponse response = h.send(request); system.debug(logginglevel.error, 'getBody() : ' + response.getBody()); system.debug(logginglevel.error, 'getHeaderKeys()() : ' + response.getHeaderKeys()); for (String key: response.getHeaderKeys()) { system.debug(logginglevel.error, '---------------- key: ' + key); system.debug(logginglevel.error, '---------------- getHeader(key) ' + response.getHeader(key)); } } catch (Exception ex) { system.debug(logginglevel.error, 'ex' + ex.getMessage()); throw EG_AuraUtils.makeException(ex.getMessage()); } } @AuraEnabled public static String getForms(Integer processnumber) { try { recentCustomersNumber = processnumber; deserialize(); return serverMES; } catch (Exception ex) { //throw EG_AuraUtils.makeException(ex.getMessage()); return 'Please, contact your admin to resolve an ussue. Referred issue : ' + ex.getMessage(); } } }[/code]
Чисто теоретически, я бы предположил, что этот запрос должен быть POST. А в GET запросах уже указывается токен, который будет получен из POST запроса.
Проблемы в Арех нет. Это надо документацию по тому сервису смотреть.
Чисто теоретически, я бы предположил, что этот запрос должен быть POST. А в GET запросах уже указывается токен, который будет получен из POST запроса. Проблемы в Арех нет. Это надо документацию по тому сервису смотреть.
Да, ответ с ошибкой приходит от сервиса который вы дергаете из SF. Спрашивать у SF программистов почему так, это не совсем правильно. Собственно как и кидать ссылку на ВСЮ документацию по сервису (https://www.typeform.com/help/data-api/ - здесь инструкция к использованию.) не имеет особого смысла (разве только если вы хотите нанять специалиста который потратит несколько часов не ее изучение).
Самый правильный и простой способ для задач по интеграции со сторонними REST сервисами - сначала надо воспроизвести ваш запрос (чтобы он успешно отрабатывал) в REST клиенте (Postman к примеру) и уже потом оттуда переносить построение запроса в SF. Для этого там можно выгрузить тело запроса в RAW формате где отлично видны все все заголовки, их значения, тело запроса и так далее. С этими данными уже работать на стороне SF.
Да, ответ с ошибкой приходит от сервиса который вы дергаете из SF. Спрашивать у SF программистов почему так, это не совсем правильно. Собственно как и кидать ссылку на ВСЮ документацию по сервису (https://www.typeform.com/help/data-api/ - здесь инструкция к использованию.) не имеет особого смысла (разве только если вы хотите нанять специалиста который потратит несколько часов не ее изучение). Самый правильный и простой способ для задач по интеграции со сторонними REST сервисами - сначала надо воспроизвести ваш запрос (чтобы он успешно отрабатывал) в REST клиенте ([url=https://www.getpostman.com/]Postman[/url] к примеру) и уже потом оттуда переносить построение запроса в SF. Для этого там можно выгрузить тело запроса в RAW формате где отлично видны все все заголовки, их значения, тело запроса и так далее. С этими данными уже работать на стороне SF.
У вас там в Get Started есть описание как получить OAuth токен https://developer.typeform.com/get-started/applications/
У вас там в Get Started есть описание как получить OAuth токен https://developer.typeform.com/get-started/applications/
@Andrii Muzychuk, Dmitry Shnyrev, akr0bat Cпасибо огромное! пробую дальше
@Andrii Muzychuk, Dmitry Shnyrev, akr0bat Cпасибо огромное! пробую дальше