|
Api и сбер | ☑ | ||
---|---|---|---|---|
0
pleasure
29.05.23
✎
15:29
|
Пробую получить токен через API от Сбера для последующего создания заказа на оплату, в итоге после выполнения ниже представленного куска кода получаю следующее:
{"httpCode":"401", "httpMessage":"Unauthorized", "moreInformation":"Invalid credentials"} что я делаю не так куда смотреть? Код: СтрокаАвторизации = "Basic "+ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки(""+ClientId+":"+clientSecret,КодировкаТекста.UTF8,Ложь)); СтрокаАвторизации =СтрЗаменить(СтрокаАвторизации,Символы.ПС,""); СтрокаАвторизации =СтрЗаменить(СтрокаАвторизации,Символы.ВК,""); // получение токена с авторизацией ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл("g:\certificatet.p12", Пароль),Новый СертификатыУдостоверяющихЦентровОС); Соединение = Новый HTTPСоединение("api.sberbank.ru",8443,,,,5,SSL,Ложь); Заголовки = Новый Соответствие(); Заголовки.Вставить("authorization", СтрокаАвторизации); Заголовки.Вставить("accept","application/json"); Заголовки.Вставить("content-type","application/json"); Запрос = Новый HTTPЗапрос("/prod/tokens/v2/oauth",Заголовки); Запрос.УстановитьТелоИзСтроки("grant_type=client_credentials&oauth=https://api.sberbank.ru:8443/prod/tokens/v2/oauth"); Ответ = Соединение.ОтправитьДляОбработки(Запрос); СписокДоковПоФН = Ответ.ПолучитьТелоКакСтроку(); |
|||
1
dchumak
30.05.23
✎
12:57
|
[что я делаю не так куда смотреть?]
Неверный скоуп. Для каждой операции свой, в теле запроса получения токена grant_type=client_credentials&scope= Создание заказа https://api.sberbank.ru/qr/order.create Отмена заказа https://api.sberbank.ru/qr/order.revoke Запрос статусов https://api.sberbank.ru/qr/order.status ... |
|||
2
pleasure
30.05.23
✎
19:17
|
(1) предыдущий шаг получения токена я прошёл, получаю следующий ответ:
{"access_token":"4b6ce5dd-b08b-4523-9ba5-8dca15183cc8","expires_in":"60","scope":"https://api.sberbank.ru/qr/order.create","session_state":"6a79efc3-e73a-44f9-8971-88ca988febde","token_type":"bearer"}. Тут вроде всё Ок. а далее со следующим кодом получаю: {"httpCode":"400","httpMessage":"Bad Request","moreInformation":"Body of the request is not valid according to json schema"} // получение ссылки QR через токен Заголовки = Новый Соответствие; Заголовки.Вставить("Authorization","Bearer "+Токен); Заголовки.Вставить("RqUID" , СтрокаGUID); Заголовки.Вставить("Content-Type" , "application/json"); Заголовки.Вставить("accept" , "application/json"); ТелоЗапроса = "grant_type=client_credentials&creation=https://api.sberbank.ru:8443/prod/qr/order/v3/creation"; АдресРесурса = "prod/qr/order/v3/creation"; HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса,, ИспользованиеByteOrderMark.НеИспользовать); Результат = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); ОтветСтрока = Результат.ПолучитьТелоКакСтроку(); Док.ДобавитьСтроку(ОтветСтрока); ясно что JSON схема не та или как? авторизация по токену проходит, а схема ДЖСОН нета или не туда вставил? |
|||
3
pleasure
30.05.23
✎
19:35
|
JSON
{ "rq_uid": "cae0dd74e6694caf8651ce954ac133f7", "rq_tm": "2023-05-30T19:31:55Z", "member_id": "00002***", "order_number": "2222203551", "order_create_date": "2023-05-30T19:31:55Z", "order_params_type: [ { "position_name": "Услуга", "position_count": 1, "position_sum": 100, "position_description": "Услуги" } ], "id_qr": "1000100051", "order_sum": 100, "currency": "643", "description": "Оплата клиентом", "sbp_member_id": "100000000111" } |
|||
4
dchumak
31.05.23
✎
05:57
|
Вот мой запрос
{ "rq_uid": "e397997e8f0644f98e582082223a71ec", "rq_tm": "2023-05-31T02:53:46Z", "member_id": "0000****", в номер заказа я каждый раз передаю ГУИД "order_number": "e397997e8f0644f98e582082223a71ec", "order_create_date": "2023-05-31T02:53:46Z", "order_params_type": [ { "position_name": "Оплата за товары/услуги", "position_count": 1, "position_sum": 893, "position_description": "Оплата за товары/услуги" } ], "id_qr": "2502****", сумма в копейках "order_sum": 89300, "currency": "643", "description": "Invoice", "sbp_member_id": "100000000111" } |
|||
5
dchumak
31.05.23
✎
06:00
|
вот заголовки, посмотрите еще, сравните со своими
Заголовки = Новый Соответствие(); Заголовки.Вставить("Authorization", СтрокаАвторизации); Заголовки.Вставить("Accept","*/*"); Заголовки.Вставить("Content-Type","application/json"); Заголовки.Вставить("rquid", rqUID); |
|||
6
dchumak
31.05.23
✎
06:01
|
и вот это там уже не нужно
ТелоЗапроса = "grant_type=client_credentials ..... |
|||
7
dchumak
31.05.23
✎
06:42
|
[в номер заказа я каждый раз передаю ГУИД]
это сделано, чтобы можно было несколько раз передавать заказ на оплату, иначе выдается ошибка, что заказ с таким номером есть |
|||
8
pleasure
31.05.23
✎
09:21
|
(5) Заголовки = Новый Соответствие;
GUID = Новый УникальныйИдентификатор(); СтрокаGUID = СтрЗаменить(Строка(GUID),"-",""); --------- Заголовки.Вставить("Authorization","Bearer "+Токен); Заголовки.Вставить("Accept","*/*"); Заголовки.Вставить("Content-Type","application/json"); Заголовки.Вставить("rquid", СтрокаGUID); HTTPСоединение = Новый HTTPСоединение("api.sberbank.ru",8443,,,,5,ssl); АдресРесурса = "prod/qr/order/v3/creation"; HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки); HTTPЗапрос.УстановитьТелоИзСтроки(JSON,, ИспользованиеByteOrderMark.НеИспользовать); Результат = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); ОтветСтрока = Результат.ПолучитьТелоКакСтроку(); Док.ДобавитьСтроку(ОтветСтрока); Док.ДобавитьСтроку(JSON); Результат: {"access_token":"20cccd2d-0e2d-4308-88ba-f83d5ca89eff","expires_in":"60","scope":"https://api.sberbank.ru/qr/order.create","session_state":"79732520-3a62-4f9f-878e-eb193bd5829f","token_type":"bearer"} {"httpCode":"400","httpMessage":"Bad Request","moreInformation":"Body of the request is not valid according to json schema"} { "rq_uid": "a710b9f191e344c6870e42675eb02ca9", "rq_tm": "2023-05-31T09:15:52Z", "member_id": "0000****", "order_number": "a710b9f191e344c6870e42675eb02ca9", "order_create_date": "2023-05-31T09:15:52Z", "order_params_type: [ { "position_name": "Услуги", "position_count": 1, "position_sum": 100, "position_description": "Услуги" } ], "id_qr": "10001002", "order_sum": 100, "currency": "643", "description": "Оплата клиентом", "sbp_member_id": "100000000111" } Или я тело запроса не так передаю или уже хз, столько вариантов перепробовано, не знаю куда смотреть ;(. |
|||
9
dchumak
31.05.23
✎
09:56
|
Попробуйте поиграться с настройками
ЗаписьJSON = Новый ЗаписьJSON; НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON; // вот тут НастройкиСериализацииJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO; НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, СтруктураДляФормированияЗапроса, НастройкиСериализацииJSON); СтрокаJSON = ЗаписьJSON.Закрыть(); |
|||
10
dchumak
31.05.23
✎
09:59
|
// в ссл также посмотрите настройки
ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаФайл(ПутьКСертификатуСБП, ПарольСертификатаСБП), Новый СертификатыУдостоверяющихЦентровОС); Соединение = Новый HTTPСоединение(АдресСервераСБП, ПортСервераСБП, ClientId, SecretId, , 30, ssl, Ложь); // ну и дальше Запрос = Новый HTTPЗапрос(АдресДляСозданияЗаказаСБП, Заголовки); Запрос.УстановитьТелоИзСтроки(СтрокаJSON); Ответ = Соединение.ОтправитьДляОбработки(Запрос); СтруктураОтвета = Новый Структура("КодСостояния, Тело", Ответ.КодСостояния, Ответ.ПолучитьТелоКакСтроку()); Если СтруктураОтвета.КодСостояния = 200 Тогда ..... |
|||
11
dchumak
31.05.23
✎
10:01
|
[не знаю куда смотреть]
1. Попробуйте сделать запрос в Postman 2. Обратитесь в техподдержку, приложите свой member_id, они вам ответят. В процессе ответа могут попросить cURL из п.1. Отвечают в течение 2-3 часов. |
|||
12
pleasure
31.05.23
✎
10:16
|
(10) по логину, сертификату и паролю получает токен, что видно в отклике access_token.
а то что я адрес для создания заказа оплаты использую https://api.sberbank.ru:8443/prod/qr/order/v3/creation а при запросе токен используется scope=https://api.sberbank.ru/qr/order.create это не может быть причиной? |
|||
13
pleasure
31.05.23
✎
10:45
|
обработка https://dropmefiles.com/mlDLV
|
|||
14
dchumak
31.05.23
✎
11:28
|
[это не может быть причиной?]
1. Это разные понятия. Получили токен со скоупом scope=https://api.sberbank.ru/qr/order.create и дальше его используете для создания заказа, иначе будет ошибка Invalid Scope. 2. api.sberbank.ru:8443/prod/qr/order/v3/creation а это уже адрес, а не скоуп. |
|||
15
pleasure
04.06.23
✎
14:56
|
проблема была здесьJSON = СтрЗаменить(JSON, "order_params_type"": {", "order_params_type"": [
| {"); вместо "order_params_type": [ было "order_params_type: [ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |