Имя: Пароль:
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) Жаль. Я думал там полноценный СБП (в столовке просто видел). Тот кто натянет полноценный СБП на свои терминалы озолотится.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн