Имя: Пароль:
1C
1С v8
СБП и API Сбербанка
0 orensymrak
 
03.08.22
21:21
Пытаюсь изучить внедрение API сбера в 1С для начала пока, что во внешней обработке дабы пройти всю этапность, и только потом внедрять в конфу.
Написав вот такой код, следуя инструкции Сбера для получения токена:



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

&НаКлиенте
Процедура Попытка2(Команда)
    ssl = Новый ЗащищенноеСоединениеOpenSSL(
    Новый СертификатКлиентаФайл("D:\***сертификат***.p12", "***пароль***"),
    Новый СертификатыУдостоверяющихЦентровОС);        
            
            
    Соединение = Новый HTTPСоединение("api.sberbank.ru",8443,,,,5,ssl,Ложь);
    rqUID = Строка(Новый УникальныйИдентификатор());
    rqUID = СтрЗаменить(rqUID, "-","");
    Логин = "*******-***-****-*******"; // ClientId
    Пароль = "*******-***-****-*******"; // SecretId
    Base64Логин = "Basic "+ПолучитьКодированнуюСтроку(Логин, Пароль);
    
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("authorization",Base64Логин);
    Заголовки.Вставить("accept","application/json");
    Заголовки.Вставить("content-type","application/x-www-form-urlencoded");
    Заголовки.Вставить("rqUID", rqUID);
    
    Запрос = Новый HTTPЗапрос("/prod/tokens/v2/oauth",Заголовки);
    Запрос.УстановитьТелоИзСтроки("{ ""grant_type"":""client_credentials"" , ""scope"" : ""https%3A%2F%2Fapi.sberbank.ru%2Forder.create""}");      
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);    
    СписокДоковПоФН = Ответ.ПолучитьТелоКакСтроку();
    Сообщить(rqUID);
КонецПроцедуры


Вылетает ошибка:
{"httpCode":"400", "httpMessage":"Bad Request", "moreInformation":"invalid_request"}
Разъяснение Сбера: В теле запроса ошибка в параметре grant_type
Однако по инструкции указано что в параметр тела grant_type установить client_credentials

А до этого всегда ловил ошибку 500, но после добавления в заголовки параметров accept и content-type начало выдавать ошибку 400.

Может ли кто подсказать, где у меня ошибка, либо можете направить на рабочий код получения токена, далее и создание QR кода на оплату.
1 arsik
 
гуру
03.08.22
21:34
(0) Мануал или ссылку на него выложи.
2 orensymrak
 
03.08.22
22:13
3 Lexandr
 
04.08.22
08:37
Может не полагаться на строку вбитую вручную?    А то будешь три дня искать, где там запятая не по фэншую.  

        Запись = Новый ЗаписьJSON;    
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, СтруктураАтрибутов);
    Результат = Запись.Закрыть();
    Запрос.УстановитьТелоИзСтроки.УстановитьТелоИзСтроки(Результат);
4 arsik
 
гуру
04.08.22
09:56
(2) Ну так там же описано тело в примере. И оно не json
"grant_type=client_credentials&scope=https%3A%2F%2Fapi.sberbank.ru%2Forder.create"
5 orensymrak
 
04.08.22
09:58
(3) в таком режиме падает в 500 ошибку, хотя очень странно ведь тело с параметрами такое же получается

(4) установил тело в "grant_type=client_credentials&scope=https%3A%2F%2Fapi.sberbank.ru%2Forder.create" и ошибка другая {"httpCode":"400", "httpMessage":"Bad Request", "moreInformation":"unauthorized_client"}
6 arsik
 
гуру
04.08.22
10:00
(5) Ну значит ты не авторизировался. Разбирайся с Base64Логин = "Basic "+ПолучитьКодированнуюСтроку(Логин, Пароль);
7 Lexandr
 
04.08.22
10:07
СтрокаАвторизации = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(""+Имя+":"+Пароль,КодировкаТекста.UTF8,Ложь));
ЗаголовокHTTP.Вставить("Authorization", "Basic "+СтрокаАвторизации);
8 arsik
 
гуру
04.08.22
10:18
(5) А где "x-ibm-client-id"?
9 orensymrak
 
04.08.22
10:20
(7) точно такая же строка получилась и соответствующая ошибка 400
(6) подозрение в том что эта ошибка указана именно в запросе "httpMessage":"Bad Request"
Да и вроде по строению строки по инструкции все правильно
10 orensymrak
 
04.08.22
10:20
(8) а его я не могу найти в личном кабинете)))
11 orensymrak
 
04.08.22
11:45
(8) тем более судя по инструкции данный заголовок не обязательный...
12 orensymrak
 
04.08.22
12:06
(8) Разобрался с ошибкой оказалось в Base64Логин присутствовал символ переноса строки, ошибка с авторизацией ушла, появилась новая))
{"httpCode":"400", "httpMessage":"Bad Request", "moreInformation":"invalid_scope"}

Пробовал
Запрос.УстановитьТелоИзСтроки("grant_type=client_credentials&scope=https://api.sberbank.ru/order.create");
и так
Запрос.УстановитьТелоИзСтроки("grant_type=client_credentials&scope=https%3A%2F%2Fapi.sberbank.ru%2Forder.create");

Все равно ругается на scope, либо есть подозрение, что я вовсе не тот скоуп пытаюсь использовать
13 orensymrak
 
04.08.22
12:14
и с этим моментом разобрался)))
в инструкции имеются не точности - не правильный скоуп...
Необходимый был:
Запрос.УстановитьТелоИзСтроки("grant_type=client_credentials&scope=https://api.sberbank.ru/qr/order.create");
и токен получен....
14 Кир Пластелинин
 
04.08.22
12:14
(12) тоже в свое время знатно поломал голову - почему авторизация не проходила

токен для нужного скоупа получен?
15 orensymrak
 
04.08.22
12:29
(14) да
{"access_token":"*******","expires_in":"60","scope":"https://api.sberbank.ru/qr/order.create","session_state":"********","token_type":"bearer"}
токен выдан для того скоупа который я запрашивал, а сберовцы в инструкции писали что скоуп должен быть: https://api.sberbank.ru/order.create и вылетало в ошибку не верного скоупа, возможно просто для моей учетки нет доступа для этого скоупа - не отрицаю.
16 Кир Пластелинин
 
04.08.22
12:34
(15) если что, то полную интеграцию со сбером прописывал. если вопросы будут. благо перешли на Райф, т.к. у них и поддержка адекватней и api-шка попроще. не без минусов конечно
17 orensymrak
 
04.08.22
12:40
(16) вопросов и так куча) это второй раз когда использую API, до этого только с ОФД запрашивал данные (там в разы проще). Был бы рад наглядному примеру поэтапности действий.
Пока в голове только этапность:
-получить токен
-создать заказ на QR
-статус оплаты

Нужна методика в коде))
18 Кир Пластелинин
 
04.08.22
12:52
(17) уже косяк в логике. получение токена на скоуп создания заказа, создание заказа, получение токена на скоуп статуса заказа, получение статуса заказа. к тому же жизнь токена емнп 60 сек. плюс для подстраховки сделал "технические" документы, где все инфа от сбера аккумулировалась с привязкой к документу оплаты
19 Кир Пластелинин
 
04.08.22
12:54
+ (18) там для возвратов дс исходная инфа как я помню требуется помимо id заказа.
20 orensymrak
 
04.08.22
12:59
(18) (19) ну технические доки я тоже планировал делать, но мне пока что хочется пройти весь этап получения оплаты, чтобы уже из этого развивать внедрение в магазинах своих. Можно получить как то эту интеграцию на эти этапности, чтобы не ломать голову что оказывается там символ переноса есть...
21 Кир Пластелинин
 
04.08.22
13:13
(20) первое предложение в (17). и, если планируется возврат ДС через СБП, то сразу учитывать этот момент на этапе планирования
22 Кир Пластелинин
 
04.08.22
13:13
+(21) т.е. в (18)
23 Aswed
 
04.08.22
13:54
(0)

    ЗначенияРеквизитов    = ПолучитьЗначенияРеквизитов(ДокументОплаты, ДокументЗаказа, "Номер,Дата,СуммаДокумента,Организация,ПодразделениеКомпании");
    
    АдресЗапроса        = "prod/qr/order/v3/creation";
    
    ВремяДаты            = ?(СтрДлина(Формат(ТекущаяДата(), "ДЛФ=T")) = 7, "0", "") + Формат(ТекущаяДата(), "ДЛФ=T");
    
    rq_tm                 = Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd") + "T" + ВремяДаты + "Z";
    ВремяДаты            = ?(СтрДлина(Формат(ЗначенияРеквизитов.Дата, "ДЛФ=T")) = 7, "0", "") + Формат(ЗначенияРеквизитов.Дата, "ДЛФ=T");
    order_create_date     = Формат(ЗначенияРеквизитов.Дата, "ДФ=yyyy-MM-dd") + "T" + ВремяДаты + "Z";
    description            = "Оплата по документу " + ТипЗнч(ДокументЗаказа) + " №" + ЗначенияРеквизитов.Номер + " от " + ЗначенияРеквизитов.Дата;    //!!!!! тут переделать по типу документа
    order_params_type     = "";
    СоставЗаказа        = ПолучитьТоварыИУслуги(ДокументЗаказа);
    
    Для Каждого СтрТоварУслуга Из СоставЗаказа Цикл
        
        НаименованиеНоменклатуры = СтрЗаменить(Строка(СтрТоварУслуга.Номенклатура), "\", "");
        
        СтруктураПараметровТ = Новый Структура;
        СтруктураПараметровТ.Вставить("position_name",             НаименованиеНоменклатуры);
        СтруктураПараметровТ.Вставить("position_count",         1);
        СтруктураПараметровТ.Вставить("position_sum",             СтрТоварУслуга.Сумма * 100);
        СтруктураПараметровТ.Вставить("position_description",     НаименованиеНоменклатуры);
        
        JSON_Т                 = ОбработатьПараметрыЗапроса(СтруктураПараметровТ, "ЧРД=.; ЧГ=");
        order_params_type     = ?(ПустаяСтрока(order_params_type), JSON_Т, order_params_type + "," + JSON_Т);
        
    КонецЦикла;
        
    СтруктураПараметров = Новый Структура;                                                                    
    СтруктураПараметров.Вставить("rq_uid",                 СтрЗаменить(Новый УникальныйИдентификатор, "-", ""));         
    СтруктураПараметров.Вставить("rq_tm",                 rq_tm);                                                     
    СтруктураПараметров.Вставить("member_id",             НастройкиПодключения.MemberId);                             
    СтруктураПараметров.Вставить("order_number",         ЗначенияРеквизитов.Номер);                                     
    СтруктураПараметров.Вставить("order_create_date",     order_create_date);                                         
    СтруктураПараметров.Вставить("order_params_type",     "[" + order_params_type + "]");                             
    СтруктураПараметров.Вставить("id_qr",                 НастройкиПодключения.TerminalID);                             
    СтруктураПараметров.Вставить("order_sum",             ЗначенияРеквизитов.СуммаДокумента * 100);                     
    СтруктураПараметров.Вставить("currency",             "643");                                                     
    СтруктураПараметров.Вставить("description",         description);                                                 
    СтруктураПараметров.Вставить("sbp_member_id",         "100000000111");                                             
    
    JSON = ОбработатьПараметрыЗапроса(СтруктураПараметров, "ЧРД=.; ЧГ=");
    JSON = СтрЗаменить(JSON, """[", "[");
    JSON = СтрЗаменить(JSON, "]""", "]");
    
    СтруктураРезультата = ВызватьPOSTЗапрос(АдресЗапроса, JSON, "/qr/order.create", "OrderCreateQrRq", НастройкиПодключения);КонецПроцедуры


Готовый блок получения заказа в СБП Сбера.
Если нужен ни СБП а Плати QR то там ещё один параметр надо передавать.
24 orensymrak
 
04.08.22
14:02
(23) Спасибо буду разбираться)
25 orensymrak
 
04.08.22
14:50
(23) а можно приложить и вложенные процедуры/функции типа ОбработатьПараметрыЗапроса и т.д.?)))
26 orensymrak
 
05.08.22
11:34
(21)  (23)  Подскажите, сформировал структуру тела, сделал с нее json, но не понимаю как это засунуть в тело запроса, с токен стало понятно, что указывать надо не json тело, а на запрос создание qr тут же уже структура.
27 Кир Пластелинин
 
05.08.22
12:03
(26)

    #Область ФормированиеJSONСтруктурыДляТелаЗапроса
    
    JSON_Структура_Тело = ПодготовитьТелоЗапроса_OrderCreateQr(ВходныеДанные["ВидОплатыПоQR"],
                                                               rqUID,
                                                               rqTm,
                                                               ДополнительныеПараметры,
                                                               Результат_Заказ_ПлатиQR_СБП_Сбербанк);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    
    ЗаписьJSON.УстановитьСтроку();
    
    ЗаписатьJSON(ЗаписьJSON, JSON_Структура_Тело);
    
    ТелоHTTPЗапроса = ЗаписьJSON.Закрыть();
    
    Результат["ТелоЗапроса"] = ТелоHTTPЗапроса;
    
    #КонецОбласти

    #Область ИнициализацияHTTPЗапроса
    
    Заголовки = Новый Соответствие;

    Заголовки.Вставить("Authorization", СформироватьАвторизационныеДанные_BearerScheme(token));
    Заголовки.Вставить("RqUID"          , rqUID);
    Заголовки.Вставить("Content-Type" , "application/json");
    Заголовки.Вставить("accept"          , "application/json");
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
                        
    HTTPЗапрос.УстановитьТелоИзСтроки(ТелоHTTPЗапроса,, ИспользованиеByteOrderMark.НеИспользовать);

    #КонецОбласти
28 Кир Пластелинин
 
05.08.22
12:04
+(27) это на создание заказа
29 orensymrak
 
05.08.22
15:07
(28) то ли пятница) то ли так жарко, что мозги плывут)
Не понимаю, почему ругается

{"httpCode":"400","httpMessage":"Bad Request","moreInformation":"Body of the request is not valid according to json schema"}


    ДатаДокумента = Дата("04.08.2022 15:00:00");    
    НомерЗаказа = "МВУТ-000005";    
    rq_uid         = СтрЗаменить(НОвый УникальныйИдентификатор(),"-","");
    ВремяДаты   = ?(СтрДлина(Формат(ТекущаяДата(), "ДЛФ=T")) = 7, "0", "") + Формат(ТекущаяДата(), "ДЛФ=T");    
    rq_tm       = Формат(ТекущаяДата(), "ДФ=yyyy-MM-dd") + "T" + ВремяДаты + "Z";
    member_id     = "******";
    order_number = НомерЗаказа;
    ВремяДаты            = ?(СтрДлина(Формат(ДатаДокумента, "ДЛФ=T")) = 7, "0", "") + Формат(ДатаДокумента, "ДЛФ=T");
    order_create_date = Формат(ДатаДокумента, "ДФ=yyyy-MM-dd") + "T" + ВремяДаты + "Z";
    order_params_type     = "";
    
    ПолучитьСоставДокумента(НомерЗаказа);
    
    Для Каждого СтрТоварУслуга Из СоставЗаказа Цикл
        
        НаименованиеНоменклатуры = СтрЗаменить(Строка(СтрТоварУслуга.Номенклатура), "\", "");
        НаименованиеХарактеристики = СтрЗаменить(Строка(СтрТоварУслуга.Характеристика), "\", "");
        НаименованиеДляПередачи = НаименованиеНоменклатуры+" ("+НаименованиеХарактеристики+")";
        
        
        СтруктураПараметровТ = Новый Структура;
        СтруктураПараметровТ.Вставить("position_name",            НаименованиеДляПередачи);
        СтруктураПараметровТ.Вставить("position_count",              СтрТоварУслуга.Количество);
        СтруктураПараметровТ.Вставить("position_sum",             СтрТоварУслуга.Сумма*100);
        СтруктураПараметровТ.Вставить("position_description",     НаименованиеДляПередачи);

        JSON_Т = ОбработатьПараметрыЗапроса(СтруктураПараметровТ);
        order_params_type     = ?(ПустаяСтрока(order_params_type), JSON_Т, order_params_type + "," + JSON_Т);
        
    КонецЦикла;
    
    СтруктураПараметровТела = Новый Структура;                                                                    
    СтруктураПараметровТела.Вставить("rq_uid",                rq_uid);        
    СтруктураПараметровТела.Вставить("rq_tm",                 rq_tm);                                                    
    СтруктураПараметровТела.Вставить("member_id",             member_id);                            
    СтруктураПараметровТела.Вставить("order_number",          order_number);                                    
    СтруктураПараметровТела.Вставить("order_create_date",     order_create_date);                                        
    СтруктураПараметровТела.Вставить("order_params_type",     "[" + order_params_type + "]");                            
    //СтруктураПараметровТела.Вставить("id_qr",                 "1000100051");  // неизвестная переменная                          
    СтруктураПараметровТела.Вставить("order_sum",             399500);                    
    СтруктураПараметровТела.Вставить("currency",              "643");                                                      
    СтруктураПараметровТела.Вставить("description",           "Оплата клиентом розничного чека №"+НомерЗаказа+"");                                                  
    СтруктураПараметровТела.Вставить("scope",    "https://api.sberbank.ru/qr/order.create");
    
    Запись = Новый ЗаписьJSON;    
    Запись.УстановитьСтроку();
    Запись.ЗаписатьНачалоОбъекта();
    Для каждого Значение Из СтруктураПараметровТела Цикл
        Запись.ЗаписатьИмяСвойства(Значение.Ключ);
        Запись.ЗаписатьЗначение(Значение.Значение);
    КонецЦикла;
    Запись.ЗаписатьКонецОбъекта();
    JSON = Запись.Закрыть();
    JSON = СтрЗаменить(JSON, """[", "[");
    JSON = СтрЗаменить(JSON, "]""", "]");

    
    // получение токена с авторизацией
    
    ssl = Новый ЗащищенноеСоединениеOpenSSL(
        Новый СертификатКлиентаФайл("*****", "****"),
        Новый СертификатыУдостоверяющихЦентровОС);        
            
            
    Соединение = Новый HTTPСоединение("api.sberbank.ru",8443,,,,5,ssl,Ложь);


        
    Заголовки = Новый Соответствие();
    Заголовки.Вставить("authorization", "Bearer "+токен);
    Заголовки.Вставить("accept","application/json");
    Заголовки.Вставить("content-type","application/x-www-form-urlencoded");
    Заголовки.Вставить("rqUID", ИдентификаторЗапросаТокена);
    

    
    JSON = СтрЗаменить(JSON, "\r\n\", "");
    JSON = СтрЗаменить(JSON, "\r\n", "");
    JSON = СтрЗаменить(JSON, "\", "");
    
    Запрос = Новый HTTPЗапрос("/prod/qr/order/v3/creation",Заголовки);
    //Запрос.УстановитьТелоИзСтроки("grant_type=client_credentials&scope=https://api.sberbank.ru/qr/order.create");       // , ""scope"" : ""https%3A%2F%2Fapi.sberbank.ru%2Forder.create""
    Запрос.УстановитьТелоИзСтроки(JSON,,ИспользованиеByteOrderMark.НеИспользовать);
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);    
    СписокДоковПоФН = Ответ.ПолучитьТелоКакСтроку();
30 Кир Пластелинин
 
05.08.22
16:24
(29) "СтруктураПараметровТела.Вставить("order_params_type",     "[" + order_params_type + "]");"  и " JSON = СтрЗаменить(JSON, """[", "[");" это что еще за чушь?
с чего там будет application/x-www-form-urlencoded?
31 Кир Пластелинин
 
05.08.22
16:24
и да. передача товарной корзины вообще не обязательна. к тому же они в итоге нигде не отображается
32 Кир Пластелинин
 
05.08.22
16:27
неужели трудно все сделать по https://api.developer.sber.ru/product/PlatiQR/doc/v1/8024874223 ? там даже примеры есть итогового тела. загоните свое сформированное тело в какой-нибудь онлайн json редактор или в notepad++ и сравните
33 Галахад
 
гуру
05.08.22
16:32
(32) 1С само умеет форматировать JSON, не обязательно искать что-то внешнее.
34 Кир Пластелинин
 
05.08.22
16:48
(33) я эт к тому написал, что бы человек сравнил свое тело с эталонным
35 orensymrak
 
05.08.22
17:49
(34) Где это найти "id_qr"? (для операции "QR-код СБП": tid (Уникальный идентификатор терминала).) (если из за него конечно ругательства)
Весь ЛК облазил.
+ скоуп в этом случае где указывается? я в структуру тела уже пробовал засунуть.
+ убрал формирование товарных позиций и добавил sbp_member_id пока ошибка та же
36 orensymrak
 
05.08.22
18:03
(32)
сравнил свое тело с примером, явных отличий не увидел, кроме добавленного скоупа и sbp_member_id, ну и не понятно где брать id_qr


{
"rq_uid": "13bec0923259410f947c143fea58d55d",
"rq_tm": "2022-08-05T17:58:13Z",
"member_id": "00001652",
"order_number": "123456",
"order_create_date": "2022-08-04T15:00:00Z",
"id_qr": "2f618d9c-f22f-4e50-9bd5-ce5db7027397",
"order_sum": 399500,
"currency": "643",
"description": "Оплата клиентом розничного чека №123456",
"scope": "https://api.sberbank.ru/qr/order.create",
"sbp_member_id": "100000000111"
}
37 Кир Пластелинин
 
08.08.22
08:05
(36)     ОписаниеТелаЗапроса.Вставить("id_qr", ""); // string(36): Идентификатор устройства, на котором сформирован заказ.
                                               // Правила заполнения:
                                               // для операции "QR-код Продавца": IdQR (Уникальный идентификатор устройства в системе "Плати QR");
                                               // для операции "QR-код СБП": tid (Уникальный идентификатор терминала).

эта данные сам Сбер предоставляет
38 orensymrak
 
10.08.22
11:37
(37) Только получил id_qr от сбера, но вылетала все равно ошибка, и просто удалил указание скоупа, все заработало, получил все необходимые данные.
И запрос статус успешно произвел.
Отсюда вопросы: судя по тому что есть действия с неоплаченными заказами их необходимо будет постоянно удалять или они со временем автоматически аннулируются сами?

и я правильно понял, что для каждого скоупа необходим запрос отдельного токена?
создание - свой токен
статус - свой токен
отмена/возврат - свой токен и т.д.
39 Кир Пластелинин
 
10.08.22
11:54
(38) 1. вот почему и отсылал к сравнению сформированного тела и эталона.
2. вот хз - есть ли срок жизни заказа у Сбера или нет. но сервис для отмены неоплаченных заказов у них тоже был
3. да. на каждую область. более того. полученный токен имеет срок жизни (60 сек.). поэтому нужно сразу закладывать момент, что при каждом чихе сперва придется получить токен и потом выполнять операцию. даже если она повторяется через какой то промежуток времени, ибо есть шанс не успеть в рамках жизни токена.
40 orensymrak
 
10.08.22
16:01
(39) для полного понимания))
RqUID (Уникальный идентификатор запроса) используется в каждом запросе, вопрос таков в пределах одного заказа идентификатор должен быть одинаковый?
в каждом запросе есть идентификатор в заголовке и в теле, так вот в пределах запроса одинаковый и/или не важно какой запрос идентификатор должен быть одинаковый в любом из запросов
ИЛИ же )))
в заголовке и теле он должен быть одинаковый а в различных запросах разный (создание заказа - один, а при проверке статуса - другой)

Даже пишу запутанно, т.к. не понимаю как строить структуру интеграции с участием этого идентификатора
41 Кир Пластелинин
 
10.08.22
16:23
(40) RqUID в заголовках и rq_uid в теле - это один и тот же id. я туда guid пропихивал, в котором удалял "-", т.к. ограничение по длине в 32 символа + ограничения шаблона. этот id уникален должен быть уникален для запроса. т.е. получение токена - один id, последующее создание заказа - другой id
42 stone-w1987
 
16.08.22
10:30
Доброго дня токен с трудом получили, но при создании заказа 401 Unauthorized Not registered to plan
Хотя все по инструкции...
43 Кир Пластелинин
 
16.08.22
10:55
(42) могу только предположить, что не подключили api оплат по qr для своего приложения в личном кабинете для пространства организации.
44 stone-w1987
 
16.08.22
11:05
спасибо за совет, тема новая ... инструкции ...
45 Кир Пластелинин
 
16.08.22
11:43
(44) не все так прозрачно описано в документации конечно и в каких то непонятных ситуациях лучше в саппорт писать. но вот общение с ними полный рандом и ппц, если речь идет про сервис оплат по QR. порой быстро и адекватно отвечают, а порой чуть ли не прямым текстом приходится писать "перечитайте исходный вопрос" и вот только тогда соизволят предоставить ответ на поставленный вопрос. а вот поддержка интернет-эквайринга от них оставила только положительные впечатления.
46 stone-w1987
 
17.08.22
21:13
Добого всем, после обращения в тех поддержку появилась новая ошибка, спасибо за поддержку

Body of the request is not valid according to json schema
47 Кир Пластелинин
 
18.08.22
08:10
(46) ну черным по белому написано же, что структура json некорректна. открываем два окна: в одном эталонное из документации, в другом собственноручно сформированное. смотрим и делаем вывода. читаем внимательней документацию
48 stone-w1987
 
19.08.22
19:13
Запросы получились, всем спасибо)
49 dchumak
 
09.09.22
11:30
(42)
[401 Unauthorized Not registered to plan]
Добрый день. Как решили такую проблему? Что-то неправильно в запросе, или настройки в личном кабиненте?
50 Кир Пластелинин
 
09.09.22
12:55
(49) проверьте в лк, что подписали свое приложение на нужные API
51 arsik
 
гуру
09.09.22
13:03
(44) Нафига все это? Вроде у сбера сейчас прошивки для эквайринговых терминалов поддерживают СБП. Там даже делать ничего не надо в софте. Подключаешь его в 1С как обычный эквайринговый терминал.
52 dchumak
 
09.09.22
13:28
(51)
[поддерживают СБП]
это не СБП, а SberQR.
Там только в 3 банках можно оплачивать.
Урезанная реализация.
53 arsik
 
гуру
09.09.22
13:34
(52) Жаль. Я думал там полноценный СБП (в столовке просто видел). Тот кто натянет полноценный СБП на свои терминалы озолотится.