Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Запрос на получения токена подключения Сбер (Авторизация) (http://forums.kuban.ru/f1040/zapros_na_polucheniya_tokena_podklyucheniya_sber_avtorizaciya-9203495.html)

ComAlex 24.10.2022 20:14

Запрос на получения токена подключения Сбер (Авторизация)
 
Всем привет!
Тем, кто знаком с авторизацией с Сбер,
подскажите, как получить токен!

Код:
/////////////////////////////////////////////////////
UID = Новый УникальныйИдентификатор();
СтрокаUID = СтрЗаменить(Строка(UID), "-", "");
ID = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
Secret = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
IDSecret64 = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ID + ":" + Secret));
Authorization = "Basic " + IDSecret64;

ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("D:\certificate_XXX.p12", "XXX"));
HTTPСоединение = Новый HTTPСоединение("api.sberbank.ru", 8443,,,,, ssl);
ТелоЗапроса = "grant_type=client_credentials";
ТелоЗапроса = ТелоЗапроса + "&scope=https%3A%2F%2Fapi.sberbank.ru%2Fqr%2Forder.create";
ТекстЗапроса = "/ru/prod/tokens/v2/oauth";

HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса);
HTTPЗапрос.АдресРесурса = ТекстЗапроса;
HTTPЗапрос.Заголовки.Вставить("Authorization", Authorization);
HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");
HTTPЗапрос.Заголовки.Вставить("X-IBM-Client-Id", ID);
HTTPЗапрос.Заголовки.Вставить("RqUID", СтрокаUID);
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded" );

HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Результат = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
ОтветСтрока = Результат.ПолучитьТелоКакСтроку();

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветСтрока);
Ответ = ПрочитатьJSON(ЧтениеJSON);
////////////////////////


Выдаётся ошибка:
Ответ:
httpCode "400"
httpMessage "Bad Request"
moreInformation "unauthorized_client"

Но ID и Secret указаны верно.
Что я делаю не так?

ComAlex 26.10.2022 10:31

Тема закрыта! Вопрос решен.

bma1 26.10.2022 13:01

и в чем была проблема? Публика интересуется...

ComAlex 26.10.2022 17:15

Решение (если кому интересно):

Вместо строки:
IDSecret64 = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ID + ":" + Secret));

Надо написать:
tmpIDSecret64 = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(ID + ":" + Secret));

IDSecret64 = "";
Для й=1 По СтрДлина(tmpIDSecret64) Цикл

симв = Сред(tmpIDSecret64, й, 1);

Если симв > Символ(32) Тогда

IDSecret64 = IDSecret64 + симв;

КонецЕсли;
КонецЦикла;

И всё заработало!


Текущее время: 10:39. Часовой пояс GMT +3.