Имя: Пароль:
1C
1С v8
Помогите получить токен для дальнейшего пользования API
,
0 location
 
naïve
22.12.21
12:44
Авторизация приложения
Весь процесс выглядит следующим образом:
1 . Приложение запрашивает токен - отправляет HTTP-запрос методом POST по следующему адресу: https://allegro.pl/auth/oauth/token , где должно:
укажите значение для типа доступа "grant_type = client_credentials" ,
включить заголовок авторизации в формате Basic base64 (client_id: client_secret) .
ИнформацияОбязательно закодируйте строку «client_id: client_secret» вместе со знаком «:» между значениями.
Пример
curl -X POST \
      'https://allegro.pl.allegrosandbox.pl/auth/oauth/token?grant_type=client_credentials' \
      -H 'Authorization: Basic base64(clientId:secret)'

пишу такой код получаю ошибку
{"error":"unauthorized","error_description":"There is no client authentication. Try adding an appropriate authentication filter."}

    ПараметрыURL = Новый Структура;
    АдресЗапроса = "https://allegro.pl.allegrosandbox.pl/auth/oauth/token";
    //ПараметрыURL.Вставить("client_id",Объект.ClientID);
    //ПараметрыURL.Вставить("client_secret",Объект.ClientSecret);
    ПараметрыURL.Вставить("grant_type", "client_credentials");
    
    АдресЗапроса = Адрес(АдресЗапроса, ПараметрыURL);    
    СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресЗапроса);
    
    HTTPСоединение = новый HTTPСоединение(СтруктураURI.Хост,,Объект.ClientID,Объект.ClientSecret,, , Новый ЗащищенноеСоединениеOpenSSL);
    headers = Новый Соответствие;
    headers.Вставить("Host", СтруктураURI.Хост);
    headers.Вставить("Content-Type", "application/vnd.allegro.public.v1+json");
    headers.Вставить("Accept", "application/vnd.allegro.public.v1+json");
    headers.Вставить("Authorization", "Basic base64(clientId:secret)");
    HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере, headers);
    //HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);    
    HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);

Если использовать ОтправитьДляОбработки вместо Получить то получаю ошибку Internal Server Error
1 бомболюк
 
22.12.21
12:53
"Basic base64(clientId:secret)"

что то думается мне от тебя ждут не этого, а
"Basic " + base64(clientId + ":" + secret)
2 Мультук
 
гуру
22.12.21
12:53
(0)

Я был взял готовую библиотеку
https://github.com/vbondarevsky/Connector

P.S.
Сдается мне вот тут ты неправильно понял

headers.Вставить("Authorization", "Basic base64(clientId:secret)");
3 location
 
naïve
22.12.21
13:05
(1) прописал так
    headers.Вставить("Authorization", "Basic " + Base64Значение(Объект.ClientID + ":" + Объект.ClientSecret));
та же ошибка
4 Ёпрст
 
22.12.21
13:08
(0) secret - это не строка - а твой секретный ключ для авторизации..подставь нужный и всё.
5 Ёпрст
 
22.12.21
13:09
(3) да ипа...ть
headers.Вставить("Authorization", "Basic " + Base64Значение("clientId:" + Объект.ClientSecret));
6 pechkin
 
22.12.21
13:10
нужно Base64Строка
7 Ёпрст
 
22.12.21
13:10
хотя не.. там да, и мд клиента и его секрет
8 Kigo_Kigo
 
22.12.21
13:14
Клиент ИД и секрет ключ, надо получить на сервере  https://allegro.pl, возможно эти данные есть в личном кабинете
9 location
 
naïve
22.12.21
13:16
(8) у меня они получены
10 location
 
naïve
22.12.21
13:16
(6) выдает Неопределено
11 location
 
naïve
22.12.21
13:17
(9) на форме вставлены
12 Kigo_Kigo
 
22.12.21
13:17
(9) Попробуй СокрЛП(), может пробелы влетают
13 pechkin
 
22.12.21
13:18
14 Kigo_Kigo
 
22.12.21
13:18
отдчиком то что видишь
1111111:22222222 - ?
15 pechkin
 
22.12.21
13:18

СтрокаКодирования = "123456:123456";

ПотокВПамяти = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти);
ЗаписьДанных.ЗаписатьСтроку(СтрокаКодирования);
ДД = ПотокВпамяти.ЗакрытьИПолучитьДвоичныеДанные();

Строка = Base64Строка(ДД);
16 youalex
 
22.12.21
13:19
кодировку еще попробуй указать явно

headers.Вставить("Content-Type", "application/vnd.allegro.public.v1+json; charset=utf-8");
17 location
 
naïve
22.12.21
13:26
(15) добавил и указал (16)
получил такой ответ

<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>
18 Ёпрст
 
22.12.21
13:28
через curl то хоть работает твой запрос ?
19 Ёпрст
 
22.12.21
13:29
ну и вот это вот хрень
новый HTTPСоединение(СтруктураURI.Хост,,Объект.ClientID,Объект.ClientSecre
20 location
 
naïve
22.12.21
13:31
(18) не знаю как им пользоваться.
через браузер работает, https://allegro.pl.allegrosandbox.pl/auth/oauth/token?grant_type=client_credentials
ввожу  ClientID и ClientSecret получаю токен
21 location
 
naïve
22.12.21
13:32
(19) вот так     HTTPСоединение = новый HTTPСоединение(СтруктураURI.Хост,443,,,, , Новый ЗащищенноеСоединениеOpenSSL);
выдает ту же картину
22 pechkin
 
22.12.21
13:32
(20) попробуй здесь закодировать
https://www.base64decode.org/
23 Ёпрст
 
22.12.21
13:34
вот так, работает ?


СтрокаКодирования = Объект.ClientID+":"Объект.ClientSecret;

ПотокВПамяти = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти);
ЗаписьДанных.ЗаписатьСтроку(СтрокаКодирования);
ДД = ПотокВпамяти.ЗакрытьИПолучитьДвоичныеДанные();


HTTPСоединение = новый HTTPСоединение("allegro.pl.allegrosandbox.pl",,,, , Новый ЗащищенноеСоединениеOpenSSL);

headers = Новый Соответствие;
headers.Вставить("Authorization", "Basic "+Base64Строка(ДД));

HTTPЗапрос = Новый HTTPЗапрос("auth/oauth/token?grant_type=client_credentials", headers);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);

24 location
 
naïve
22.12.21
13:38
(23) вот так выдает
<html><body><h1>400 Bad request</h1>
Your browser sent an invalid request.
</body></html>
25 youalex
 
22.12.21
13:40
Там не Получить(HTTPЗапрос) а ОтправитьДляОбработки(HTTPЗапрос)  т.е post
26 location
 
naïve
22.12.21
13:40
могу скинуть клиент ID и Secret мне не жалко тестовые данные
ID: 138a7e371a3546dc8a9f10df7185883e
Secret: dHWawkVqaN9GEfNeOFYTTFLr0fgC5LOWgFnibRV99HYAeWgHvrpKgfgXojS3MEzJ
27 location
 
naïve
22.12.21
13:41
вот если зайти через браузер то токен получается (26)
28 Kigo_Kigo
 
22.12.21
13:43
(23) СтрокаКодирования = СокрЛП(Объект.ClientID)+":" + СокрЛП(Объект.ClientSecret);
29 location
 
naïve
22.12.21
13:44
(28) да пробовал
30 Kigo_Kigo
 
22.12.21
13:45
(29) В 23 он "+" пропустил
31 location
 
naïve
22.12.21
13:46
(30) я видел
32 youalex
 
22.12.21
13:47
я постманом получил
33 youalex
 
22.12.21
13:58
Вот так работает, проверяй параметры

    ПараметрыURL = Новый Структура;
    АдресЗапроса = "https://allegro.pl.allegrosandbox.pl/auth/oauth/token";
    //ПараметрыURL.Вставить("client_id",Объект.ClientID);
    //ПараметрыURL.Вставить("client_secret",Объект.ClientSecret);
    ПараметрыURL.Вставить("grant_type", "client_credentials");
    
    //АдресЗапроса = Адрес(АдресЗапроса, ПараметрыURL);    
    //СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресЗапроса);
    
    HTTPСоединение = новый HTTPСоединение("allegro.pl.allegrosandbox.pl", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
    
    headers = Новый Соответствие;
    //headers.Вставить("Host", СтруктураURI.Хост);
    headers.Вставить("Content-Type", "application/vnd.allegro.public.v1+json");
    headers.Вставить("Accept", "application/vnd.allegro.public.v1+json");
    headers.Вставить("Authorization", "Basic MTM4YTdlMzcxYTM1NDZkYzhhOWYxMGRmNzE4NTg4M2U6ZEhXYXdrVnFhTjlHRWZOZU9GWVRURkxyMGZnQzVMT1dnRm5pYlJWOTlIWUFlV2dIdnJwS2dmZ1hvalMzTUV6Sg==");
    HTTPЗапрос = Новый HTTPЗапрос("/auth/oauth/token?grant_type=client_credentials", headers);
    //HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);    
    HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
34 pechkin
 
22.12.21
13:59
вот такой должен быть auth

MTM4YTdlMzcxYTM1NDZkYzhhOWYxMGRmNzE4NTg4M2U6ZEhXYXdrVnFhTjlHRWZOZU9GWVRURkxyMGZnQzVMT1dnRm5pYlJWOTlIWUFlV2dIdnJwS2dmZ1hvalMzTUV6Sg==
35 pechkin
 
22.12.21
13:59
возможно 1с не добавляет == вконце
36 timurhv
 
22.12.21
14:06
(23) Без BOM надо:
СтрокаДанных = ДанныеАутентификации.Логин + ":" + ДанныеАутентификации.Пароль;

ПотокВПамяти = Новый ПотокВПамяти();
Текст = Новый ЗаписьТекста(ПотокВПамяти, КодировкаТекста.UTF8, , Символы.ПС);
Текст.Записать(СтрокаДанных);
Текст.Закрыть();
ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
СтрокаФорматBase64 = Base64Строка(ДвоичныеДанные);

СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ВК, "");
СтрокаФорматBase64 = СтрЗаменить(СтрокаФорматBase64, Символы.ПС, "");
37 youalex
 
22.12.21
14:10
Оно в 1С переводы строк добавляет зачем то, если делать как
Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ID + ":" + Secret))
38 Ёпрст
 
22.12.21
14:29
(37) ага, вот так работает

Авторизация ="Basic "+ Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ID + ":" + Secret));
Авторизация =СтрЗаменить(Авторизация,Символы.ПС,"");
Авторизация =СтрЗаменить(Авторизация,Символы.ВК,"");
39 Ёпрст
 
22.12.21
14:29
(36) а так не работает.. там не верная строка в конце
40 Ёпрст
 
22.12.21
14:32
(0) на вот..пригодится мот тоже когда-нибудь.. гребанный base64 строка мать его..


ID="138a7e371a3546dc8a9f10df7185883e";
Secret="dHWawkVqaN9GEfNeOFYTTFLr0fgC5LOWgFnibRV99HYAeWgHvrpKgfgXojS3MEzJ";
Авторизация ="Basic "+ Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ID + ":" + Secret));
Авторизация =СтрЗаменить(Авторизация,Символы.ПС,"");
Авторизация =СтрЗаменить(Авторизация,Символы.ВК,"");
HTTPСоединение = новый HTTPСоединение("allegro.pl.allegrosandbox.pl",443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization",Авторизация);
HTTPЗапрос = Новый HTTPЗапрос("auth/oauth/token?grant_type=client_credentials", Заголовки);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку());
41 location
 
naïve
22.12.21
14:39
всем спасибо за помощь
42 timurhv
 
22.12.21
14:48
(39) типовое не работает o_O
43 Ёпрст
 
22.12.21
14:59
(42) ага, в конце не верные символы (
44 timurhv
 
22.12.21
15:04
(43) она вставлена в типовых и работает)
БизнесСеть.СтрокаBase64БезBOM
ИнтеграцияСЯндексКассойСлужебный.СтрокаBase64БезBOM
ОбменСБанкамиСлужебныйВызовСервера.СтрокаBase64БезBOM
45 Ёпрст
 
22.12.21
15:06
(44) ага, ща копирнул как есть и ..тоже работает..
Гадство
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.