|
Сбер СБП | ☑ | ||
---|---|---|---|---|
0
FreeWay
03.02.24
✎
09:57
|
до середины января работал код, всё было шикарно, но после прилетело откуда не ждали:
собственно часть кода авторизация проходит успешно, а вот дальше создание заказа qr-кода с ошибкой Заголовки = Новый Соответствие; Заголовки.Вставить("Authorization","Bearer "+Токен); Заголовки.Вставить("Accept","application/json"); Заголовки.Вставить("Content-Type","application/json"); Заголовки.Вставить("rquid", СтрокаGUID); HTTPСоединение = Новый HTTPСоединение("mc.api.sberbank.ru",443,,,,3600,ssl); АдресРесурса = "/prod/qr/order/v3/creation"; HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(JSON,, ИспользованиеByteOrderMark.НеИспользовать); Результат = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); Если Результат.КодСостояния=200 Тогда ...... ответ от сервера: { "httpCode": "400", "httpMessage": "Validation Error. Response phase", "moreInformation": "/qr/order/v3/creation" } сбер поддержка молчит третью неделю. куда смотреть и что делать ума не приложу |
|||
1
stopa85
03.02.24
✎
10:05
|
Может сертификат протух?
Ну и полный текст запроса в студию. У нас все работает. Все норм. |
|||
2
FreeWay
03.02.24
✎
10:11
|
авторизация по сертификату проходит, токен получается.
Authorization = "Basic "+ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(""+ClientId+":"+clientSecret,КодировкаТекста.UTF8,Ложь)); Authorization =СтрЗаменить(Authorization,Символы.ПС,""); Authorization =СтрЗаменить(Authorization,Символы.ВК,""); ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл(ПутьКСертификату,ПарольСертификата)); HTTPСоединение = Новый HTTPСоединение("mc.api.sberbank.ru",443,,,,5,ssl); ТелоЗапроса = "grant_type=client_credentials"; ТелоЗапроса = ТелоЗапроса + "&scope=https://api.sberbank.ru/qr/order.create"; ТекстЗапроса = "/prod/tokens/v3/oauth"; HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса); HTTPЗапрос.АдресРесурса = ТекстЗапроса; HTTPЗапрос.Заголовки.Вставить("x-ibm-client-id", clientID); HTTPЗапрос.Заголовки.Вставить("authorization", Authorization); HTTPЗапрос.Заголовки.Вставить("rquid", СтрокаGUID); HTTPЗапрос.Заголовки.Вставить("content-type","application/x-www-form-urlencoded" ); HTTPЗапрос.Заголовки.Вставить("accept", "application/json"); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать); Результат = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); ОтветСтрока = Результат.ПолучитьТелоКакСтроку(); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветСтрока); Ответ = ПрочитатьJSON(ЧтениеJSON); Токен=Ответ.access_token; // получение ссылки QR через токен Заголовки = Новый Соответствие; Заголовки.Вставить("Authorization","Bearer "+Токен); Заголовки.Вставить("Accept","application/json"); Заголовки.Вставить("Content-Type","application/json"); Заголовки.Вставить("rquid", СтрокаGUID); HTTPСоединение = Новый HTTPСоединение("mc.api.sberbank.ru",443,,,,3600,ssl); АдресРесурса = "/prod/qr/order/v3/creation"; HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(JSON,, ИспользованиеByteOrderMark.НеИспользовать); Результат = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); Если Результат.КодСостояния=200 Тогда |
|||
3
stopa85
03.02.24
✎
10:14
|
Я по другому делаю
ВебЗапрос.УстановитьТелоИзСтроки(ТелоВебЗапроса, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Авто); ВебОтвет = Соединение.ОтправитьДляОбработки(ВебЗапрос); ТелоОтвета = ВебОтвет.ПолучитьТелоКакСтроку(); |
|||
4
stopa85
03.02.24
✎
10:16
|
HTTPЗапрос.Заголовки.Вставить("content-type","application/x-www-form-urlencoded" );
нужно тут application/json |
|||
5
stopa85
03.02.24
✎
10:16
|
Тыж JSON отправляешь...
|
|||
6
FreeWay
03.02.24
✎
10:19
|
в первом запросе авторизации через сертификат application/x-www-form-urlencoded, далее получая токен Заголовки.Вставить("Content-Type","application/json")
|
|||
7
FreeWay
03.02.24
✎
10:28
|
||||
8
stopa85
03.02.24
✎
10:29
|
Кидай json запроса тестом и заголовки текстом
|
|||
9
stopa85
03.02.24
✎
10:30
|
Я со своим сравню
|
|||
10
FreeWay
03.02.24
✎
10:37
|
я не менял JSON, ни чего не менялось, пока со стороны сбера не накрутили
|
|||
11
FreeWay
03.02.24
✎
10:40
|
{
"rq_uid": "3a025bceb0be466db5fc659850d51ac8", "rq_tm": "2024-02-03T10:38:22Z", "member_id": "00001292", "order_number": "3a025bceb0be466db5fc659850d51ac8", "order_create_date": "2024-02-03T10:38:22Z", "id_qr": "29115815", "order_sum": 284362, "currency": "643", "order_params_type": [ { "position_name": "Услуга Т***ь", "position_count": 1, "position_sum": 284362, "position_description": "Оплата клиентом л/с №565*0*1600; г. Р****, улица Станиславского. Дом № 1 А, Квартира 5; **** **** **" } ], "description": "Оплата клиентом л/с №565*0*1600; г. Р****, улица Станиславского. Дом № 1 А, Квартира 5; **** **** **", "sbp_member_id": "100000000111" } |
|||
12
FreeWay
03.02.24
✎
10:43
|
"rquid" "3a025bceb0be466db5fc659850d51ac8"
"Content-Type" "application/json" "Accept" "application/json" "Authorization" "Bearer 38105208-2be1-4451-889b-29f535f5a949" |
|||
13
stopa85
03.02.24
✎
13:49
|
Странно. Попробуй без order_params_type.
У меня без него работает Запрос: 127.0.0.1/prod/qr/order/v3/creation Заголовки: RqUID: c343a0dc4093475fb61a59d582923b6e authorization: Bearer f9d33694-6c52-45d2-9b46-ХХХХХХ13a37e content-type: application/json accept: application/json Тело Запроса: { "rq_uid": "c343a0dc4093475fb61a59d582923b6e", "rq_tm": "2024-02-03T10:28:29Z", "member_id": "00000302", "order_number": "ООО075689", "order_create_date": "2024-02-03T10:28:29Z", "id_qr": "25978323", "order_sum": 100, "currency": "643", "description": "Счет 116899 от 17 сентября 2021г", "sbp_member_id": "100000000111" } Ответ: КодОтвета:200 |
|||
14
stopa85
03.02.24
✎
13:59
|
Ну я единственное еще
HTTPЗапрос.УстановитьТелоИзСтроки(JSON,, ИспользованиеByteOrderMark.НеИспользовать); явно указываю кодировку |
|||
15
FreeWay
03.02.24
✎
14:19
|
(13) Расшифровка услуги, по докам так же есть позиции.
|
|||
16
stopa85
03.02.24
✎
15:01
|
Чисто для пробы. Где-то же ошибка.
Все равно придется теперь проверить все методы |
|||
17
stopa85
03.02.24
✎
15:05
|
И про (14) не забудь.
А вообще postman в руки и в перед. Это сбер, как ни крути. |
|||
18
stopa85
04.02.24
✎
01:13
|
Я разобрался! У меня тоже такой глюк был!
Символ номер убери из описания заказа! Описание заказа (Спец.символы требуется экранировать) Для заказа СБП значение ограничено 140 символами: pattern ^ [A-Za-zА-Яa-я0-9' '!"#$%&'()*+,-.\/\:;<=>?@[\]^_`{|}~]{140} |
|||
19
stopa85
04.02.24
✎
01:13
|
Они тут это даже в доку вписали наконец
https://api.developer.sber.ru/index.php/product/PlatiQR/doc/v1/QR_API_doc522 |
|||
20
FreeWay
04.02.24
✎
14:07
|
(19) (18) я думаю при таком раскладе ошибка был бы другой но ни как не 400
|
|||
21
FreeWay
04.02.24
✎
14:13
|
и без спец символа не работает
|
|||
22
FreeWay
04.02.24
✎
14:23
|
Документация Сбебанка для прямого шлюза СБП https://ecomtest.sberbank.ru/doc
Реализуем без сертификата по паролям логинам Функция ФормированиеСБПQR() //ЛС,СуммаПлатежа,ФИО,адрес Login = "********"; Pass = "*******"; Authorization = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(Login+":"+pass)); Authorization =СтрЗаменить(Authorization,Символы.ПС,""); Authorization =СтрЗаменить(Authorization,Символы.ВК,""); JSON = СформироватьТелоЗапроса(); ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows()); Заголовки = Новый Соответствие(); Заголовки.Вставить("Authorization", "Basic " +Authorization); Заголовки.Вставить("Content-Type", "application/json;charset=utf-8"); HTTPСоединение = Новый HTTPСоединение("ecommerce.sberbank.ru",443,,,,5,ssl); АдресРесурса = "/ecomm/gw/partner/api/v1/register.do"; HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(JSON,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Результат = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); Если Результат.КодСостояния=200 Тогда ОтветСервера = Результат.ПолучитьТелоКакСтроку(); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветСервера); Соответствие = ПрочитатьJSON(ЧтениеJSON,Истина); Если не Соответствие.Получить("externalParams").Получить("sbpPayload")=Неопределено Тогда ПлатежнаяСсылка=Соответствие.Получить("externalParams").Получить("sbpPayload"); КонецЕсли; КонецЕсли; Возврат ПлатежнаяСсылка; КонецФункции Функция СформироватьТелоЗапроса() GUID =Новый УникальныйИдентификатор(); ДатаОкончанияЖизниЗаказа = Строка(Формат(ДобавитьМесяц(ТекущаяДата(),1),"ДФ='yyyy-MM-ddTHH:mm:ss'")); JSON_Структура_Тело = Новый Структура; JSON_Структура_Тело.Вставить("userName","*********"); JSON_Структура_Тело.Вставить("password","**********"); JSON_Структура_Тело.Вставить("merchantLogin","","**********");"); JSON_Структура_Тело.Вставить("orderNumber",""+GUID+""); JSON_Структура_Тело.Вставить("description","Лицевой счет №123456789 период 01.2024 сумма 1,00 руб"); JSON_Структура_Тело.Вставить("expirationDate",ДатаОкончанияЖизниЗаказа); JSON_Структура_Тело.Вставить("amount",100); JSON_Структура_Тело.Вставить("returnUrl","https://online.sberbank.ru/"); СтруктураПараметровТ = Новый Соответствие; СтруктураПараметровТ.Вставить("qrType","DYNAMIC_QR_SBP"); СтруктураПараметровТ.Вставить("sbp.scenario","C2B"); JSON_Структура_Тело.Вставить("jsonParams",СтруктураПараметровТ); ЗаписьJSON = Новый ЗаписьJSON; НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON; НастройкиСериализацииJSON.ФорматСериализацииДаты = ФорматДатыJSON.JavaScript; НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,JSON_Структура_Тело, НастройкиСериализацииJSON); СтрокаJSON = ЗаписьJSON.Закрыть(); Возврат СтрокаJSON; КонецФункции код рабочий |
|||
23
stopa85
04.02.24
✎
18:43
|
(20) У меня именно такое поведение, как у тебя. Русские буквы можно, а "№" нельзя. Ну и 400 вполне логичный код.
(22) некоторым моим организациям Сбер прикрывает этот api, переводит на yookassa. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |