Регистрация  |  Вход

REST Api Authentification issue.

Добрый день!

Очень нужен свежий взгляд.

Дано:
Веб сервис Сервис хранит в себе ответы. Ответы приходят по ссылке: 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_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();
}
}
}

Добрый день!

Очень нужен свежий взгляд.

Дано:
Веб сервис Сервис хранит в себе ответы. Ответы приходят по ссылке: 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пасибо огромное! пробую дальше