Api sberbank ru ошибка

  

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 кода на оплату.

  

arsik

1 — 03.08.22 — 21:34

(0) Мануал или ссылку на него выложи.

  

orensymrak

2 — 03.08.22 — 22:13

  

Lexandr

3 — 04.08.22 — 08:37

Может не полагаться на строку вбитую вручную?    А то будешь три дня искать, где там запятая не по фэншую.  

        Запись = Новый ЗаписьJSON;    
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, СтруктураАтрибутов);
    Результат = Запись.Закрыть();
    Запрос.УстановитьТелоИзСтроки.УстановитьТелоИзСтроки(Результат);

  

arsik

4 — 04.08.22 — 09:56

(2) Ну так там же описано тело в примере. И оно не json

«grant_type=client_credentials&scope=https%3A%2F%2Fapi.sberbank.ru%2Forder.create»

  

orensymrak

5 — 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"}

  

arsik

6 — 04.08.22 — 10:00

(5) Ну значит ты не авторизировался. Разбирайся с Base64Логин = «Basic «+ПолучитьКодированнуюСтроку(Логин, Пароль);

  

Lexandr

7 — 04.08.22 — 10:07

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

  

arsik

8 — 04.08.22 — 10:18

(5) А где «x-ibm-client-id»?

  

orensymrak

9 — 04.08.22 — 10:20

(7) точно такая же строка получилась и соответствующая ошибка 400

(6) подозрение в том что эта ошибка указана именно в запросе «httpMessage»:»Bad Request»

Да и вроде по строению строки по инструкции все правильно

  

orensymrak

10 — 04.08.22 — 10:20

(8) а его я не могу найти в личном кабинете)))

  

orensymrak

11 — 04.08.22 — 11:45

(8) тем более судя по инструкции данный заголовок не обязательный…

  

orensymrak

12 — 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, либо есть подозрение, что я вовсе не тот скоуп пытаюсь использовать

  

orensymrak

13 — 04.08.22 — 12:14

и с этим моментом разобрался))) 

в инструкции имеются не точности — не правильный скоуп…

Необходимый был:

Запрос.УстановитьТелоИзСтроки(«grant_type=client_credentials&scope=https://api.sberbank.ru/qr/order.create»);

и токен получен….

  

Кир Пластелинин

14 — 04.08.22 — 12:14

(12) тоже в свое время знатно поломал голову — почему авторизация не проходила

токен для нужного скоупа получен?

  

orensymrak

15 — 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-шка попроще. не без минусов конечно

  

orensymrak

17 — 04.08.22 — 12:40

(16) вопросов и так куча) это второй раз когда использую API, до этого только с ОФД запрашивал данные (там в разы проще). Был бы рад наглядному примеру поэтапности действий.

Пока в голове только этапность:

-получить токен

-создать заказ на QR
-статус оплаты

Нужна методика в коде))

  

Кир Пластелинин

18 — 04.08.22 — 12:52

(17) уже косяк в логике. получение токена на скоуп создания заказа, создание заказа, получение токена на скоуп статуса заказа, получение статуса заказа. к тому же жизнь токена емнп 60 сек. плюс для подстраховки сделал «технические» документы, где все инфа от сбера аккумулировалась с привязкой к документу оплаты

  

Кир Пластелинин

19 — 04.08.22 — 12:54

+ (18) там для возвратов дс исходная инфа как я помню требуется помимо id заказа.

  

orensymrak

20 — 04.08.22 — 12:59

(18) (19) ну технические доки я тоже планировал делать, но мне пока что хочется пройти весь этап получения оплаты, чтобы уже из этого развивать внедрение в магазинах своих. Можно получить как то эту интеграцию на эти этапности, чтобы не ломать голову что оказывается там символ переноса есть…

  

Кир Пластелинин

21 — 04.08.22 — 13:13

(20) первое предложение в (17). и, если планируется возврат ДС через СБП, то сразу учитывать этот момент на этапе планирования

  

Кир Пластелинин

22 — 04.08.22 — 13:13

+(21) т.е. в (18)

  

Aswed

23 — 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 то там ещё один параметр надо передавать.

  

orensymrak

24 — 04.08.22 — 14:02

(23) Спасибо буду разбираться)

  

orensymrak

25 — 04.08.22 — 14:50

(23) а можно приложить и вложенные процедуры/функции типа ОбработатьПараметрыЗапроса и т.д.?)))

  

orensymrak

26 — 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) это на создание заказа

  

orensymrak

29 — 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, "rn", "");
    JSON = СтрЗаменить(JSON, "rn", "");
    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) я эт к тому написал, что бы человек сравнил свое тело с эталонным

  

orensymrak

35 — 05.08.22 — 17:49

(34) Где это найти «id_qr»? (для операции «QR-код СБП»: tid (Уникальный идентификатор терминала).) (если из за него конечно ругательства)

Весь ЛК облазил.

+ скоуп в этом случае где указывается? я в структуру тела уже пробовал засунуть.

+ убрал формирование товарных позиций и добавил sbp_member_id пока ошибка та же

  

orensymrak

36 — 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 (Уникальный идентификатор терминала).  эта данные сам Сбер предоставляет

  

orensymrak

38 — 10.08.22 — 11:37

(37) Только получил id_qr от сбера, но вылетала все равно ошибка, и просто удалил указание скоупа, все заработало, получил все необходимые данные.

И запрос статус успешно произвел.

Отсюда вопросы: судя по тому что есть действия с неоплаченными заказами их необходимо будет постоянно удалять или они со временем автоматически аннулируются сами?

и я правильно понял, что для каждого скоупа необходим запрос отдельного токена?

создание — свой токен

статус — свой токен

отмена/возврат — свой токен и т.д.

  

Кир Пластелинин

39 — 10.08.22 — 11:54

(38) 1. вот почему и отсылал к сравнению сформированного тела и эталона.

2. вот хз — есть ли срок жизни заказа у Сбера или нет. но сервис для отмены неоплаченных заказов у них тоже был

3. да. на каждую область. более того. полученный токен имеет срок жизни (60 сек.). поэтому нужно сразу закладывать момент, что при каждом чихе сперва придется получить токен и потом выполнять операцию. даже если она повторяется через какой то промежуток времени, ибо есть шанс не успеть в рамках жизни токена.

  

orensymrak

40 — 10.08.22 — 16:01

(39) для полного понимания))

RqUID (Уникальный идентификатор запроса) используется в каждом запросе, вопрос таков в пределах одного заказа идентификатор должен быть одинаковый?

в каждом запросе есть идентификатор в заголовке и в теле, так вот в пределах запроса одинаковый и/или не важно какой запрос идентификатор должен быть одинаковый в любом из запросов

ИЛИ же )))

в заголовке и теле он должен быть одинаковый а в различных запросах разный (создание заказа — один, а при проверке статуса — другой)

Даже пишу запутанно, т.к. не понимаю как строить структуру интеграции с участием этого идентификатора

  

Кир Пластелинин

41 — 10.08.22 — 16:23

(40) RqUID в заголовках и rq_uid в теле — это один и тот же id. я туда guid пропихивал, в котором удалял «-«, т.к. ограничение по длине в 32 символа + ограничения шаблона. этот id уникален должен быть уникален для запроса. т.е. получение токена — один id, последующее создание заказа — другой id

  

stone-w1987

42 — 16.08.22 — 10:30

Доброго дня токен с трудом получили, но при создании заказа 401 Unauthorized Not registered to plan

Хотя все по инструкции…

  

Кир Пластелинин

43 — 16.08.22 — 10:55

(42) могу только предположить, что не подключили api оплат по qr для своего приложения в личном кабинете для пространства организации.

  

stone-w1987

44 — 16.08.22 — 11:05

спасибо за совет, тема новая … инструкции …

  

Кир Пластелинин

45 — 16.08.22 — 11:43

(44) не все так прозрачно описано в документации конечно и в каких то непонятных ситуациях лучше в саппорт писать. но вот общение с ними полный рандом и ппц, если речь идет про сервис оплат по QR. порой быстро и адекватно отвечают, а порой чуть ли не прямым текстом приходится писать «перечитайте исходный вопрос» и вот только тогда соизволят предоставить ответ на поставленный вопрос. а вот поддержка интернет-эквайринга от них оставила только положительные впечатления.

  

stone-w1987

46 — 17.08.22 — 21:13

Добого всем, после обращения в тех поддержку появилась новая ошибка, спасибо за поддержку

Body of the request is not valid according to json schema

  

Кир Пластелинин

47 — 18.08.22 — 08:10

(46) ну черным по белому написано же, что структура json некорректна. открываем два окна: в одном эталонное из документации, в другом собственноручно сформированное. смотрим и делаем вывода. читаем внимательней документацию

  

stone-w1987

48 — 19.08.22 — 19:13

Запросы получились, всем спасибо)

  

dchumak

49 — 09.09.22 — 11:30

(42)

[401 Unauthorized Not registered to plan]

Добрый день. Как решили такую проблему? Что-то неправильно в запросе, или настройки в личном кабиненте?

  

Кир Пластелинин

50 — 09.09.22 — 12:55

(49) проверьте в лк, что подписали свое приложение на нужные API

  

arsik

51 — 09.09.22 — 13:03

(44) Нафига все это? Вроде у сбера сейчас прошивки для эквайринговых терминалов поддерживают СБП. Там даже делать ничего не надо в софте. Подключаешь его в 1С как обычный эквайринговый терминал.

  

dchumak

52 — 09.09.22 — 13:28

(51)

[поддерживают СБП]

это не СБП, а SberQR.

Там только в 3 банках можно оплачивать.

Урезанная реализация.

  

arsik

53 — 09.09.22 — 13:34

(52) Жаль. Я думал там полноценный СБП (в столовке просто видел). Тот кто натянет полноценный СБП на свои терминалы озолотится.

nixxel

0 / 0 / 0

Регистрация: 15.07.2013

Сообщений: 13

1

26.07.2016, 13:42. Показов 11531. Ответов 5

Метки нет (Все метки)


Здравствуйте. Возник вопрос при использовании API Сбербанка.
Как сказано у них в документации нужно отправить POST запрос с данными. Но в результате мне приходит ошибка

PHP
1 
{"errorCode":"5","errorMessage":"Доступ запрещён"}

Вот код отпавк:

PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 
$userName = "name"; $password = "pass"; $orderNumber = md5(uniqid(rand(),1)); $amount = 99000; $returnUrl = "http://site.com/?succes";  $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://3dsec.sberbank.ru/payment/rest/register.do'); curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, 'amount='.$amount.'&currency=810&language=ru&orderNumber='.$orderNumber.'&returnUrl='.$returnUrl.'&jsonParams={"orderNumber":'.$orderNumber.'}&pageView=DESKTOP&expirationDate =2014-09-08T14:14:14&merchantLogin=merch_child'); $out = curl_exec($curl); echo $out; curl_close($curl);

Логин и пароль верные же… Может кто-то сталкивался с подобным?
П.С. в поддержу их написал, но что-то они молчат

Добавлено через 19 часов 16 минут
Тему можно закрыть…

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

26.07.2016, 13:42

5

2 / 2 / 3

Регистрация: 02.08.2012

Сообщений: 36

26.07.2016, 15:04

2

В чем проблема была?

0

0 / 0 / 0

Регистрация: 15.07.2013

Сообщений: 13

27.07.2016, 11:33

 [ТС]

3

Нужно было внимательно читать документацию… И у них пример не рабочий был, нужно было еще поля добавить.
Написал вручную все переменные и заработало.

0

55 / 55 / 21

Регистрация: 01.03.2016

Сообщений: 594

17.08.2016, 00:41

4

nixxel, дайте ссылку на это апи

0

0 / 0 / 0

Регистрация: 15.07.2013

Сообщений: 13

17.08.2016, 08:59

 [ТС]

5

53ifbb, после заключения договора вам его дадут.

0

55 / 55 / 21

Регистрация: 01.03.2016

Сообщений: 594

17.08.2016, 18:57

6

nixxel, Это эквайринг ?

0

После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с интернет-магазином. Рассмотрим примеры основных обращений к REST API Сбербанка с помощью PHP CURL.

В примерах указаны URL для тестовой среды, после перехода в боевой режим, их нужно заменить на https://securepayments.sberbank.ru/

1

Онлайн оплата

При данном методе деньги клиента списываются сразу. Клиент добавляет товары в корзину, оформляет заказ, на этапе оплаты нужно сделать запрос в платежный шлюз на register.do.

Описание одностадийной оплаты, подробнее о передаче корзины.

$vars = array(); $vars['userName'] = 'логин'; $vars['password'] = 'пароль'; /* ID заказа в магазине */ $vars['orderNumber'] = '123'; /* Корзина для чека (необязательно) */ $cart = array( array( 'positionId' => 1, 'name' => 'Название товара', 'quantity' => array( 'value' => 1, 'measure' => 'шт' ), 'itemAmount' => 1 * (1000 * 100), 'itemCode' => '123456', 'tax' => array( 'taxType' => 0, 'taxSum' => 0 ), 'itemPrice' => 1000 * 100, ) ); $vars['orderBundle'] = json_encode( array( 'cartItems' => array( 'items' => $cart ) ), JSON_UNESCAPED_UNICODE ); /* Сумма заказа в копейках */ $vars['amount'] = 1000 * 100; /* URL куда клиент вернется в случае успешной оплаты */ $vars['returnUrl'] = 'http://example.com/success/'; /* URL куда клиент вернется в случае ошибки */ $vars['failUrl'] = 'http://example.com/error/'; /* Описание заказа, не более 24 символов, запрещены % + r n */ $vars['description'] = 'Заказ №' . $order_id . ' на example.com'; $ch = curl_init('https://3dsec.sberbank.ru/payment/rest/register.do?' . http_build_query($vars)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch);

PHP

Ответ будет в формате JSON, в котором содержатся ID платежа в банке и URL куда отправить клиента для оплаты.

{ "errorCode":"0", "orderId":"70906e55-7114-41d6-8332-4609dc6590f4", "formUrl":"https://3dsec.sberbank.ru/payment/merchants/test/payment_ru.html?mdOrder=70906e55-7114-41d6-8332-4609dc6590f4" }

TEXT

Далее обработаем ответ, и перенаправим клиента:

$res = json_decode($res, JSON_OBJECT_AS_ARRAY); if (empty($res['orderId'])){ /* Возникла ошибка: */ echo $res['errorMessage']; } else { /* Успех: */ /* Тут нужно сохранить ID платежа в своей БД - $res['orderId'] */ /* Перенаправление клиента на страницу оплаты */ header('Location: ' . $res['formUrl'], true); /* Или на JS */ echo '<script>document.location.href = "' . $res['formUrl'] . '"</script>'; }

PHP

В случае успешной оплаты, клиент вернется на страницу returnUrl. В адрес добавятся ID платежа полученный ранее:

http://example.com/success/?orderId=70906e55-7114-41d6-8332-4609dc6590f4&lang=ru

Также будет и в случаи ошибки (failUrl):

http://example.com/error/?orderId=70906e55-7114-41d6-8332-4609dc6590f4&lang=ru

2

Двухстадийная оплата

В этом методе деньги клиента холдируются (замораживаются), после этого магазин должен подтвердить платеж или его отменить. Описание на https://developer.sberbank.ru/doc/v1/acquiring/rest-requests2pay

Регистрация платежа отличается только методом registerPreAuth.do.

$vars = array(); $vars['userName'] = 'логин'; $vars['password'] = 'пароль'; /* ID заказа в магазине */ $vars['orderNumber'] = '123'; /* Корзина для чека (необязательно) */ $cart = array( array( 'positionId' => 1, 'name' => 'Название товара', 'quantity' => array( 'value' => 1, 'measure' => 'шт' ), 'itemAmount' => 1 * (1000 * 100), 'itemCode' => '123456', 'tax' => array( 'taxType' => 0, 'taxSum' => 0 ), 'itemPrice' => 1000 * 100, ) ); $vars['orderBundle'] = json_encode( array( 'cartItems' => array( 'items' => $cart ) ), JSON_UNESCAPED_UNICODE ); /* Сумма заказа в копейках */ $vars['amount'] = 1000 * 100; /* URL куда клиент вернется в случае успешной оплаты */ $vars['returnUrl'] = 'http://example.com/success/'; /* URL куда клиент вернется в случае ошибки */ $vars['failUrl'] = 'http://example.com/error/'; /* Описание заказа, не более 24 символов, запрещены % + r n */ $vars['description'] = 'Заказ №' . $order_id . ' на example.com'; $ch = curl_init('https://3dsec.sberbank.ru/payment/rest/registerPreAuth.do?' . http_build_query($vars)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch);

PHP

Если запрос возвращает ошибку, то возможно в вашем аккаунте отключены двухстадийные платежи, включить их можно через службу поддержки.

После оплаты, платеж подтверждается методом deposit.do.

В этом методе сумма платежа может быть меньше исходной, в таком случаи остаток вернется клиенту.

$vars = array(); $vars['userName'] = 'логин'; $vars['password'] = 'пароль'; /* Номер заказа в платежной системе */ $vars['orderId'] = '70906e55-7114-41d6-8332-4609dc6590f4'; /* Сумма платежа в копейках, Если указать 0, то завершение произойдет на всю сумму. */ $vars['amount'] = 1000 * 100; /* Если в первом запросе была передана корзина, то её нужно продублировать */ $cart = array( array( 'positionId' => 1, 'name' => 'Название товара', 'quantity' => array( 'value' => 1, 'measure' => 'шт' ), 'itemAmount' => 1000 * 100, 'itemCode' => '123456', 'tax' => array( 'taxType' => 0, 'taxSum' => 0 ), 'itemPrice' => 1000 * 100, ) ); $vars['depositItems'] = json_encode( array( 'items' => $cart ), JSON_UNESCAPED_UNICODE ); $ch = curl_init('https://3dsec.sberbank.ru/payment/rest/deposit.do?' . http_build_query($vars)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, JSON_OBJECT_AS_ARRAY); if (!empty($res['errorCode'])) { echo $res['errorMessage']; } else { echo 'Оплата завершена'; }

PHP

3

Информация о платеже

Методы getOrderStatus.do и getOrderStatusExtended.do возвращают данные о платеже.

$vars = array(); $vars['userName'] = 'логин'; $vars['password'] = 'пароль'; $vars['orderId'] = '70906e55-7114-41d6-8332-4609dc6590f4'; $ch = curl_init('https://3dsec.sberbank.ru/payment/rest/getOrderStatusExtended.do?' . http_build_query($vars)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, JSON_OBJECT_AS_ARRAY); print_r($res);

PHP

Результат

Array
(
[errorCode] => 0
[errorMessage] => Успешно
[orderNumber] => 123
[orderStatus] => 1
[actionCode] => 0
[actionCodeDescription] => 
[amount] => 1000
[currency] => 643
[date] => 1540207733683
[orderDescription] => Заказ №123 на example.com
[ip] => 192.168.27.138
[merchantOrderParams] => Array()
[attributes] => Array(
[0] => Array(
[name] => mdOrder
[value] => 70906e55-7114-41d6-8332-4609dc6590f4
)
)
[cardAuthInfo] => Array(
[expiration] => 201912
[cardholderName] => CARDHOLDER NAME
[approvalCode] => 123456
[pan] => 411111XXXXXX1111
)
[authDateTime] => 1540207881419
[terminalId] => 123456
[authRefNum] => 111111111111
[paymentAmountInfo] => Array(
[paymentState] => APPROVED
[approvedAmount] => 1000
[depositedAmount] => 0
[refundedAmount] => 0
)
[bankInfo] => Array(
[bankName] => TEST CARD
[bankCountryCode] => RU
[bankCountryName] => Россия
)
)

Выведем информацию на странице:

<?php $orderStatus = array( 0 => 'Заказ зарегистрирован, но не оплачен', 1 => 'Предавторизованная сумма захолдирована (для двухстадийных платежей)', 2 => 'Проведена полная авторизация суммы заказа', 3 => 'Авторизация отменена', 4 => 'По транзакции была проведена операция возврата', 5 => 'Инициирована авторизация через ACS банка-эмитента', 6 => 'Авторизация отклонена', ); ?> Статус: <?php echo $orderStatus[$res['orderStatus']]; ?> Сумма регистрации: <?php echo $res['paymentAmountInfo']['approvedAmount'] / 100; ?> р. Сумма списания: <?php echo $res['paymentAmountInfo']['depositedAmount'] / 100; ?> р. Сумма возврата: <?php echo $res['paymentAmountInfo']['refundedAmount'] / 100; ?> р. Дата: <?php echo date('d.m.Y H:i:s', $res['date'] / 1000); ?> Карта: <?php echo $res['cardAuthInfo']['pan']; ?>, <?php echo $res['cardAuthInfo']['expiration']; ?>, <?php echo $res['cardAuthInfo']['cardholderName']; ?> Банк: <?php echo $res['bankInfo']['bankName']; ?>, <?php echo $res['bankInfo']['bankCountryName']; ?>

PHP

4

Отмена оплаты

Для запроса отмены оплаты заказа используется reverse.do. Функция отмены доступна в течение ограниченного времени после оплаты, точные сроки необходимо уточнять в Банке.

$vars = array(); $vars['userName'] = 'логин'; $vars['password'] = 'пароль'; $vars['orderId'] = '70906e55-7114-41d6-8332-4609dc6590f4'; $ch = curl_init('https://3dsec.sberbank.ru/payment/rest/reverse.do?' . http_build_query($vars)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, JSON_OBJECT_AS_ARRAY); if (!empty($res['errorCode'])) { echo $res['errorMessage']; } else { echo 'Оплата отменена'; }

PHP

5

Возврат средств

Вызвав метод refund.do, средства будут возвращены плательщику. Система позволяет возвращать средства более одного раза, но в общей сложности не более первоначальной суммы списания.

// Сумма возврата. $sum = 500; $vars = array(); $vars['userName'] = 'логин'; $vars['password'] = 'пароль'; $vars['orderId'] = '70906e55-7114-41d6-8332-4609dc6590f4'; $vars['amount'] = $sum * 100; $ch = curl_init('https://3dsec.sberbank.ru/payment/rest/refund.do?' . http_build_query($vars)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, JSON_OBJECT_AS_ARRAY); if (!empty($res['errorCode'])) { echo $res['errorMessage']; } else { echo $sum . 'р. возвращены плательщику'; }

PHP

   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 кода на оплату.

   arsik

1 — 03.08.22 — 21:34

(0) Мануал или ссылку на него выложи.

   orensymrak

2 — 03.08.22 — 22:13

   Lexandr

3 — 04.08.22 — 08:37

Может не полагаться на строку вбитую вручную?    А то будешь три дня искать, где там запятая не по фэншую.  

        Запись = Новый ЗаписьJSON;    

    Запись.УстановитьСтроку();

    ЗаписатьJSON(Запись, СтруктураАтрибутов);

    Результат = Запись.Закрыть();

    Запрос.УстановитьТелоИзСтроки.УстановитьТелоИзСтроки(Результат);

   arsik

4 — 04.08.22 — 09:56

(2) Ну так там же описано тело в примере. И оно не json

«grant_type=client_credentials&scope=https%3A%2F%2Fapi.sberbank.ru%2Forder.create»

   orensymrak

5 — 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»}

   arsik

6 — 04.08.22 — 10:00

(5) Ну значит ты не авторизировался. Разбирайся с Base64Логин = «Basic «+ПолучитьКодированнуюСтроку(Логин, Пароль);

   Lexandr

7 — 04.08.22 — 10:07

СтрокаАвторизации = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(«»+Имя+»:»+Пароль,КодировкаТекста.UTF8,Ложь));

ЗаголовокHTTP.Вставить(«Authorization», «Basic «+СтрокаАвторизации);

   arsik

8 — 04.08.22 — 10:18

(5) А где «x-ibm-client-id»?

   orensymrak

9 — 04.08.22 — 10:20

(7) точно такая же строка получилась и соответствующая ошибка 400

(6) подозрение в том что эта ошибка указана именно в запросе «httpMessage»:»Bad Request»

Да и вроде по строению строки по инструкции все правильно

   orensymrak

10 — 04.08.22 — 10:20

(8) а его я не могу найти в личном кабинете)))

   orensymrak

11 — 04.08.22 — 11:45

(8) тем более судя по инструкции данный заголовок не обязательный…

   orensymrak

12 — 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, либо есть подозрение, что я вовсе не тот скоуп пытаюсь использовать

   orensymrak

13 — 04.08.22 — 12:14

и с этим моментом разобрался)))

в инструкции имеются не точности — не правильный скоуп…

Необходимый был:

Запрос.УстановитьТелоИзСтроки(«grant_type=client_credentials&scope=https://api.sberbank.ru/qr/order.create»);

и токен получен….

   Кир Пластелинин

14 — 04.08.22 — 12:14

(12) тоже в свое время знатно поломал голову — почему авторизация не проходила

токен для нужного скоупа получен?

   orensymrak

15 — 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-шка попроще. не без минусов конечно

   orensymrak

17 — 04.08.22 — 12:40

(16) вопросов и так куча) это второй раз когда использую API, до этого только с ОФД запрашивал данные (там в разы проще). Был бы рад наглядному примеру поэтапности действий.

Пока в голове только этапность:

-получить токен

-создать заказ на QR

-статус оплаты

Нужна методика в коде))

   Кир Пластелинин

18 — 04.08.22 — 12:52

(17) уже косяк в логике. получение токена на скоуп создания заказа, создание заказа, получение токена на скоуп статуса заказа, получение статуса заказа. к тому же жизнь токена емнп 60 сек. плюс для подстраховки сделал «технические» документы, где все инфа от сбера аккумулировалась с привязкой к документу оплаты

   Кир Пластелинин

19 — 04.08.22 — 12:54

+ (18) там для возвратов дс исходная инфа как я помню требуется помимо id заказа.

   orensymrak

20 — 04.08.22 — 12:59

(18) (19) ну технические доки я тоже планировал делать, но мне пока что хочется пройти весь этап получения оплаты, чтобы уже из этого развивать внедрение в магазинах своих. Можно получить как то эту интеграцию на эти этапности, чтобы не ломать голову что оказывается там символ переноса есть…

   Кир Пластелинин

21 — 04.08.22 — 13:13

(20) первое предложение в (17). и, если планируется возврат ДС через СБП, то сразу учитывать этот момент на этапе планирования

   Кир Пластелинин

22 — 04.08.22 — 13:13

+(21) т.е. в (18)

   Aswed

23 — 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 то там ещё один параметр надо передавать.

   orensymrak

24 — 04.08.22 — 14:02

(23) Спасибо буду разбираться)

   orensymrak

25 — 04.08.22 — 14:50

(23) а можно приложить и вложенные процедуры/функции типа ОбработатьПараметрыЗапроса и т.д.?)))

   orensymrak

26 — 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) это на создание заказа

   orensymrak

29 — 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, "rn", "");
    JSON = СтрЗаменить(JSON, "rn", "");
    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) я эт к тому написал, что бы человек сравнил свое тело с эталонным

   orensymrak

35 — 05.08.22 — 17:49

(34) Где это найти «id_qr»? (для операции «QR-код СБП»: tid (Уникальный идентификатор терминала).) (если из за него конечно ругательства)

Весь ЛК облазил.

+ скоуп в этом случае где указывается? я в структуру тела уже пробовал засунуть.

+ убрал формирование товарных позиций и добавил sbp_member_id пока ошибка та же

   orensymrak

36 — 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 (Уникальный идентификатор терминала).

эта данные сам Сбер предоставляет

   orensymrak

38 — 10.08.22 — 11:37

(37) Только получил id_qr от сбера, но вылетала все равно ошибка, и просто удалил указание скоупа, все заработало, получил все необходимые данные.

И запрос статус успешно произвел.

Отсюда вопросы: судя по тому что есть действия с неоплаченными заказами их необходимо будет постоянно удалять или они со временем автоматически аннулируются сами?

и я правильно понял, что для каждого скоупа необходим запрос отдельного токена?

создание — свой токен

статус — свой токен

отмена/возврат — свой токен и т.д.

   Кир Пластелинин

39 — 10.08.22 — 11:54

(38) 1. вот почему и отсылал к сравнению сформированного тела и эталона.

2. вот хз — есть ли срок жизни заказа у Сбера или нет. но сервис для отмены неоплаченных заказов у них тоже был

3. да. на каждую область. более того. полученный токен имеет срок жизни (60 сек.). поэтому нужно сразу закладывать момент, что при каждом чихе сперва придется получить токен и потом выполнять операцию. даже если она повторяется через какой то промежуток времени, ибо есть шанс не успеть в рамках жизни токена.

   orensymrak

40 — 10.08.22 — 16:01

(39) для полного понимания))

RqUID (Уникальный идентификатор запроса) используется в каждом запросе, вопрос таков в пределах одного заказа идентификатор должен быть одинаковый?

в каждом запросе есть идентификатор в заголовке и в теле, так вот в пределах запроса одинаковый и/или не важно какой запрос идентификатор должен быть одинаковый в любом из запросов

ИЛИ же )))

в заголовке и теле он должен быть одинаковый а в различных запросах разный (создание заказа — один, а при проверке статуса — другой)

Даже пишу запутанно, т.к. не понимаю как строить структуру интеграции с участием этого идентификатора

   Кир Пластелинин

41 — 10.08.22 — 16:23

(40) RqUID в заголовках и rq_uid в теле — это один и тот же id. я туда guid пропихивал, в котором удалял «-«, т.к. ограничение по длине в 32 символа + ограничения шаблона. этот id уникален должен быть уникален для запроса. т.е. получение токена — один id, последующее создание заказа — другой id

   stone-w1987

42 — 16.08.22 — 10:30

Доброго дня токен с трудом получили, но при создании заказа 401 Unauthorized Not registered to plan

Хотя все по инструкции…

   Кир Пластелинин

43 — 16.08.22 — 10:55

(42) могу только предположить, что не подключили api оплат по qr для своего приложения в личном кабинете для пространства организации.

   stone-w1987

44 — 16.08.22 — 11:05

спасибо за совет, тема новая … инструкции …

   Кир Пластелинин

45 — 16.08.22 — 11:43

(44) не все так прозрачно описано в документации конечно и в каких то непонятных ситуациях лучше в саппорт писать. но вот общение с ними полный рандом и ппц, если речь идет про сервис оплат по QR. порой быстро и адекватно отвечают, а порой чуть ли не прямым текстом приходится писать «перечитайте исходный вопрос» и вот только тогда соизволят предоставить ответ на поставленный вопрос. а вот поддержка интернет-эквайринга от них оставила только положительные впечатления.

   stone-w1987

46 — 17.08.22 — 21:13

Добого всем, после обращения в тех поддержку появилась новая ошибка, спасибо за поддержку

Body of the request is not valid according to json schema

   Кир Пластелинин

47 — 18.08.22 — 08:10

(46) ну черным по белому написано же, что структура json некорректна. открываем два окна: в одном эталонное из документации, в другом собственноручно сформированное. смотрим и делаем вывода. читаем внимательней документацию

   stone-w1987

48 — 19.08.22 — 19:13

Запросы получились, всем спасибо)

   dchumak

49 — 09.09.22 — 11:30

(42)

[401 Unauthorized Not registered to plan]

Добрый день. Как решили такую проблему? Что-то неправильно в запросе, или настройки в личном кабиненте?

   Кир Пластелинин

50 — 09.09.22 — 12:55

(49) проверьте в лк, что подписали свое приложение на нужные API

   arsik

51 — 09.09.22 — 13:03

(44) Нафига все это? Вроде у сбера сейчас прошивки для эквайринговых терминалов поддерживают СБП. Там даже делать ничего не надо в софте. Подключаешь его в 1С как обычный эквайринговый терминал.

   dchumak

52 — 09.09.22 — 13:28

(51)

[поддерживают СБП]

это не СБП, а SberQR.

Там только в 3 банках можно оплачивать.

Урезанная реализация.

  

arsik

53 — 09.09.22 — 13:34

(52) Жаль. Я думал там полноценный СБП (в столовке просто видел). Тот кто натянет полноценный СБП на свои терминалы озолотится.


Информация о статусе сервера обновлена только что.

Проверить снова

    Что делать, если сайт недоступен?

Api.sberbank.ru не работает сегодня июнь 2023?

Узнайте, работает ли Api.sberbank.ru в нормальном режиме или есть проблемы сегодня

 Статус Api.sberbank.ru : нет сбоя  

0 комментариев

Сообщить о сбое в соцсетях:

Api.sberbank.ru сбои за последние 24 часа

Не работает Api.sberbank.ru?

Не открывается, не грузится, не доступен, лежит или глючит?

Самые частые проблемы Api.sberbank.ru

Не определены.

Что делать, если сайт API.SBERBANK.RU недоступен?

Если API.SBERBANK.RU работает, однако вы не можете получить доступ к сайту или отдельной его странице, попробуйте одно из возможных решений:

Кэш браузера.

Чтобы удалить кэш и получить актуальную версию страницы, обновите в браузере страницу с помощью комбинации клавиш Ctrl + F5.

Блокировка доступа к сайту.

Очистите файлы cookie браузера и смените IP-адрес компьютера.

Антивирус и файрвол.
Проверьте, чтобы антивирусные программы (McAfee, Kaspersky Antivirus или аналог) или файрвол, установленные на ваш компьютер — не блокировали доступ к API.SBERBANK.RU.

DNS-кэш.

Очистите DNS-кэш на вашем компьютере и повторите попытку доступа на сайт.
Смотреть видео-инструкцию  

VPN и альтернативные службы DNS.

VPN: например, мы рекомендуем NordVPN.


Альтернативные DNS: OpenDNS или Google Public DNS.

Плагины браузера.

Например, расширение AdBlock вместе с рекламой может блокировать содержимое сайта. Найдите и отключите похожие плагины для исследуемого вами сайта.

Сбой драйвера микрофона

Быстро проверить микрофон: Тест Микрофона.

Форум пользователей Api.sberbank.ru

Подсказки? Разочарования? Обсуждаем проблемы сервиса с другими посетителями сайта:

Чат с регистрацией



идентификация не требуется

комментарии с нецензурной лексикой и оскорблениями удаляются

[Sber|Request URL] https://securepayments.sberbank.ru/payment/rest/register.do [Sber|Request headers] {content-type: application/x-www-form-urlencoded} [Sber|RawRequest] {orderNumber: test, amount: 15100, returnUrl: https://test.ru/return.html, pageView: MOBILE, userName: T2**********0-api, password: T2**********0} [Sber|RawResponse] 200 | {"errorCode":"5","errorMessage":"Access denied"} [Sber|RawResponse] {"errorCode":"5","errorMessage":"Access denied"} [Sber|Response] RegisterResponse(errorCode: 5, errorMessage: Access denied, orderId: null, formUrl: null, externalParams: null)
В чем может быть проблема? Логин/пароль отправляю корректный

Код ответа Расшифровка кода ответа Сообщение на платёжной странице
-20010 Транзакция отклонена по причине того, что размер платежа превысил установленные лимиты Банком-эмитентом. Операция отклонена. Обратитесь в банк, выпустивший карту.
-9000 Состояние начала транзакции. Операция отклонена. Обратитесь в магазин.
-2101 Блокировка по e-mail Операция отклонена. Обратитесь в магазин.
-2020 Получен неверный ECI. Код выставляется в том случае, если пришедший в PaRes ECI не соответствует допустимому значению для данной МПС. Правило работает только для MasterCard (01,02) и Visa (05,06), где значения в скобках — допустимые для МПС. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2019 PARes от эмитента содержит iReq, вследствие чего платёж был отклонён. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2018 Directory server Visa или MasterCard либо недоступен, либо в ответ на запрос вовлечённости карты (VeReq) пришла ошибка связи. Это ошибка взаимодействия платёжного шлюза и серверов МПС по причине технических неполадок на стороне последних. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2017 Отклонено. Статус PARes-а не «Y». Операция отклонена. Обратитесь в магазин.
-2016 Банк-эмитент не смог определить, является ли карта 3dsecure. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2015 VERes от DS содержит iReq, вследствие чего платёж был отклонён. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2013 Исчерпаны попытки оплаты. Операция отклонена. Проверьте введённые данные, достаточность средств на карте и повторите операцию.
-2012 Данная операция не поддерживается. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2011 Банк-эмитент не смог провести авторизацию 3dsecure-карты. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2010 Несовпадение XID. Операция отклонена. Обратитесь в магазин.
-2007 Истёк срок, отведённый на ввод данных карты с момента регистрации платежа (таймаут по умолчанию — 20 минут; продолжительность сессии может быть указана при регистрации заказа; если у мерчанта установлена привилегия «Нестандартная продолжительность сессии», то берётся период, указанный в настройках мерчанта). Истёк срок ожидания ввода данных.
-2006 Означает, что эмитент отклонил аутентификацию (3DS авторизация не пройдена). Операция невозможна. Аутентификация держателя карты завершена неуспешно.
-2005 Означает, что мы не смогли проверить подпись эмитента, то есть PARes был читаемый, но подписан неверно. Операция отклонена. Обратитесь в банк, выпустивший карту.
-2003 Блокировка по порту. Операция отклонена. Обратитесь в магазин.
-2002

Примечание: имеется в виду либо лимиты Банка-эквайера на дневной оборот Магазина, либо лимиты Магазина на оборот по одной карте, либо лимит Магазина по одной операции. | Операция отклонена. Обратитесь в магазин. |

-2001 Транзакция отклонена по причине того, что IP-адрес Клиента внесён в чёрный список. Операция отклонена. Обратитесь в магазин.
-2000 Транзакция отклонена по причине того, что карта внесена в чёрный список. Операция отклонена. Обратитесь в магазин.
-100 Не было попыток оплаты.
0 Платёж успешно прошёл.
1 Для успешного завершения транзакции требуется подтверждение личности. В случае интернет-транзакции (соот-но и в нашем) невозможно, поэтому считается как declined. Операция отклонена. Обратитесь в банк, выпустивший карту.
5 Отказ сети проводить транзакцию. Операция отклонена. Обратитесь в банк, выпустивший карту.
15 МПС не смогла определить эмитента карты. Ошибка проведения платежа. Попробуйте позднее. Если данная ошибка возникла повторно, обратитесь в Ваш банк для разъяснения причин. Телефон банка должен быть указан на обратной стороне карты.
53 Карты не существует в системах процессинга. Операция отклонена. Обратитесь в магазин.
81 DECLINED_BY_PINPROC Операция отклонена. Обратитесь в банк, выпустивший карту.
100 Ограничение по карте (Банк эмитент запретил интернет транзакции по карте). Операция отклонена. Обратитесь в банк, выпустивший карту.
101 Истёк срок действия карты. Операция отклонена. Проверьте введённые данные, достаточность средств на карте и повторите операцию.
103 Нет связи с Банком-Эмитентом. Торговой точке необходимо связаться с банком-эмитентом. Операция отклонена. Обратитесь в банк, выпустивший карту.
104 Попытка выполнения операции по счёту, на использование которого наложены ограничения. Операция отклонена. Обратитесь в банк, выпустивший карту.
106 Превышено допустимое число попыток ввода ПИН. Вероятно карта временно заблокирована. Операция отклонена. Обратитесь в магазин.
107 Следует обратиться к Банку-Эмитенту. Операция отклонена. Обратитесь в банк, выпустивший карту.
109 Неверно указан идентификатор продавца/терминала или АСС заблокирован на уровне процессинга. Операция отклонена. Обратитесь в магазин.
110 Неверно указана сумма транзакции. Операция отклонена. Обратитесь в магазин.
111 Неверный номер карты. Операция отклонена. Обратитесь в банк, выпустивший карту.
116 Сумма транзакции превышает доступный остаток средств на выбранном счёте. Операция отклонена. Проверьте введённые данные, достаточность средств на карте и повторите операцию.
118 Сервис не разрешён (отказ от эмитента). Операция отклонена. Обратитесь в банк, выпустивший карту.
119 Транзакция незаконна. Операция отклонена. Обратитесь в банк, выпустивший карту.
120 Отказ в проведении операции — транзакция не разрешена эмитентом. Код ответа платёжной сети — 57. Причины отказа необходимо уточнять у эмитента. Операция отклонена. Обратитесь в банк, выпустивший карту.
121 Предпринята попытка выполнить транзакцию на сумму, превышающую дневной лимит, заданный банком-эмитентом. Операция отклонена. Обратитесь в банк, выпустивший карту.
123 Превышен лимит на число транзакций: клиент выполнил максимально разрешённое число транзакций в течение лимитного цикла и пытается провести ещё одну. Операция отклонена. Обратитесь в банк, выпустивший карту.
125 Неверный номер карты. Подобная ошибка может означать ряд вещей: Попытка возврата на сумму, больше холда, попытка возврата нулевой суммы. Для AmEx — неверно указан срок действия карты. Операция отклонена. Проверьте введённые данные, достаточность средств на карте и повторите операцию.
208 Карта утеряна. Операция отклонена. Обратитесь в магазин.
209 Превышены ограничения по карте. Операция отклонена. Обратитесь в магазин.
400 Реверсал обработан.
902 Ограничение по карте (Владелец карты пытается выполнить транзакцию, которая для него не разрешена). Операция отклонена. Обратитесь в банк, выпустивший карту.
903 Предпринята попытка выполнить транзакцию на сумму, превышающую лимит, заданный банком-эмитентом. Операция отклонена. Обратитесь в банк, выпустивший карту.
904 Ошибочный формат сообщения с точки зрения банка эмитента. Операция отклонена. Обратитесь в банк, выпустивший карту.
907 Нет связи с Банком, выпустившим Вашу карту. Для данного номера карты не разрешена авторизация в режиме stand-in (этот режим означает, что эмитент не может связаться с платёжной сетью и поэтому транзакция возможна либо в оффлайне с последующей выгрузкой в бэк офис, либо она будет отклонена). Нет связи с банком. Повторите позже.
909 Невозможно провести операцию (Ошибка функционирования системы, имеющая общий характер. Фиксируется платёжной сетью или банком-эмитентом). Операция отклонена. Обратитесь в банк, выпустивший карту.
910 Банк-эмитент недоступен. Нет связи с банком. Повторите позже.
913 Неверный формат сообщения (Неправильный формат транзакции с точки зрения сети). Операция отклонена. Обратитесь в банк, выпустивший карту.
914 Не найдена транзакция (когда посылается завершение или reversal или refund). Операция отклонена. Обратитесь в магазин.
999 Отсутствует начало авторизации транзакции. Отклонено по фроду или ошибка 3dsec. После получения этого кода ответа дальнейшие попытки проведения платежа отклоняются. Операция отклонена. Обратитесь в магазин.
1001 Пусто (Выставляется в момент регистрации транзакции, т.е. когда еще по транзакции не было введено данных карт). Не получен ответ от банка. Повторите позже.
2002 Неверная операция. Операция отклонена. Обратитесь в магазин.
2003 SSL (Не 3d-Secure/SecureCode) транзакции запрещены Магазину. Операция отклонена. Обратитесь в магазин.
2004 Оплата через SSL без ввода CVС2 запрещена. Операция отклонена. Обратитесь в магазин.
2005 Платёж не соответствует условиям правила проверки по 3ds. Операция отклонена. Обратитесь в магазин.
2006 Однофазные платежи запрещены. Операция отклонена. Обратитесь в магазин.
2008 Транзакция ещё не завершена. Операция отклонена. Обратитесь в магазин.
2009 Сумма возврата превышает сумму оплаты. Операция отклонена. Обратитесь в магазин.
2014 Ошибка выполнения 3DS-правила. Операция отклонена. Обратитесь в магазин.
2015 Ошибка выполнения правила выбора терминала (правило некорректно). Операция отклонена. Обратитесь в магазин.
2016 Мерчант не имеет разрешения на 3-D Secure, необходимое для проведения платежа. Операция отклонена. Обратитесь в магазин.
2023 Очередь на запросов на обработку в процессинг превысила допустимый лимит. Ошибка проведения платежа. Попробуйте позднее.
4005 Заказ отклонён продавцом. Отклонено продавцом.
71015 Введены неправильные параметры карты. Операция отклонена. Проверьте введённые данные, достаточность средств на карте и повторите операцию.
151018 Таймаут в процессинге. Не удалось отправить. Не получен ответ от банка. Повторите позже.
151019 Таймаут в процессинге. Удалось отправить, но не получен ответ от банка. Не получен ответ от банка. Повторите позже.
341014 Код отказа РБС. Операция отклонена. Обратитесь в магазин.

Возможно, вам также будет интересно:

  • Api ms win crt stdio l1 1 0 dll ошибка
  • Api ms win crt runtime l1 1 0 dll ошибка атол
  • Api ms win crt runtime l1 1 0 dll ошибка viber
  • Api ms win crt runtime l1 1 0 dll ошибка crfxfnm
  • Api ms win core winrt l1 1 0 dll ошибка

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии