|
Помогите написать POST-запрос для обработки заказов kaspi.kz | ☑ | ||
---|---|---|---|---|
0
Повелитель
29.08.24
✎
09:24
|
Всем привет.
В каспи есть справочник, в котором есть примеры запросов. Например вот пример получения заказов: GET https://kaspi.kz/shop/api/v2/orders?page[number]=0&page[size]=20&filter[orders][state]=NEW &filter[orders][creationDate][$ge]=1478736000000&filter[orders][creationDate][$le]=1479945600000 &filter[orders][status]=APPROVED_BY_BANK&filter[orders][deliveryType]=PICKUP &filter[orders][signatureRequired]=false&include[orders]=user Content-Type:application/vnd.api+json X-Auth-Token: <token> Более подробно из справочника: https://guide.kaspi.kz/partner/ru/shop/api/orders/q3201 С получением заказов через GET-запрос я с вашей помощью разобрался. Запрос из примера выше, на данный момент работает и в 1с выглядит вот так: мТокен = "v+Lm2au10000000000000000000000000000000000000"; //реальный токен скрыл //Формируем период в миллисекундах ПолучатьЗаказыСДаты = Дата('20240829'); ДнейДо = (НачалоДня(ТекущаяДата()) - ПолучатьЗаказыСДаты)/86400 + 1; ТекДата = ТекущаяДата(); ИсхДата = Дата(1970, 1, 1); ДатаВМил = (ТекДата - ИсхДата) * 1000; ДатаВМилСтрока = Формат(ДатаВМил,"ЧГ="); ДатаВмилНачало = ДатаВМил - 86400*ДнейДо * 1000; ДатаВМилНачалоСтрока = Формат(ДатаВмилНачало,"ЧГ="); //Заголовки ЗаголовокЗапроса = Новый Соответствие; ЗаголовокЗапроса.Вставить("Content-Type","application/vnd.api+json"); ЗаголовокЗапроса.Вставить("X-Auth-Token", мТокен); HTTP = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); //Запрос ТекстЗапроса = "/shop/api/v2/orders?page[number]=0&page[size]=100&filter[orders][state]= NEW&filter[orders][creationDate][$ge]=" + ДатаВМилНачалоСтрока + "&filter[orders][creationDate][$le]=" + ДатаВМилСтрока + "&filter[orders][status]=APPROVED_BY_BANK&include[orders]=user"; Запрос = Новый HTTPЗапрос(ТекстЗапроса, ЗаголовокЗапроса); Результат = HTTP.Получить(Запрос); Если Результат.КодСостояния <> 200 Тогда Сообщить(Результат.КодСостояния); Возврат; КонецЕсли; ОтветJSON = Результат.ПолучитьТелоКакСтроку(); ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ОтветJSON); ОбъектJSON = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); Теперь нужно в 1с отправить POST запрос для формирования накладных. В справке: https://guide.kaspi.kz/partner/ru/shop/api/orders/q3210 вот такой пример: https://kaspi.kz/shop/api/v2/orders POST /api/v2/orders HTTP/1.1 Host: kaspi.kz/shop Content-Type: application/vnd.api+json X-Auth-Token:token { "data": { "type": "orders", "id": " ordersID", "attributes": { "status": "ASSEMBLE", "numberOfSpace": "2" } } } Не понимаю, как и куда вставить эти параметры, которые в скобках {{}} Помогите, подскажите. |
|||
1
Волшебник
29.08.24
✎
09:24
|
Это POST-запрос
|
|||
2
trad
29.08.24
✎
09:36
|
(0)
HTTPЗапрос.УстановитьТелоИзСтроки(JSON) HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос) |
|||
3
Повелитель
29.08.24
✎
09:45
|
(1) (2) Я нашел пример POST запроса:
КодПриглашения = "inviteCode=" + "<=" + ltValue + "&execution=" + executionValue + "&_eventId=" + _eventIdValue + "&username=" + ЛогинИТС + "&password=" + ПарольИТС; // 4. Наконец, посылаем Post-запрос, вкладывая в тело запроса // код приглашения, а куках указыаем второй идентификатор сессии. Ресурс = "/login;" + ИдентификаторСессии2 + "?service=https%3A%2F%2Fusers.v8.1c.ru%2Fdistribution%2Fpublic%2Fsecurity_check%3B" + ИдентификаторСессии1; Соединение = Новый HTTPСоединение("login.1c.ru",,,,,, Новый ЗащищенноеСоединениеOpenSSL()); Заголовки = Новый Соответствие; Заголовки.Вставить("Cookie", ИдентификаторСессии2); Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded;"); Запрос = Новый HTTPЗапрос(Ресурс, Заголовки); Запрос.УстановитьТелоИзСтроки(КодПриглашения); Результат = Соединение.ОтправитьДляОбработки(Запрос); Вот эти параметры не пойму как вписать: { "data": { "type": "orders", "id": " ordersID", "attributes": { "status": "ASSEMBLE", "numberOfSpace": "2" } } } По аналогии как с кодом приглашения? Тут просто двойные скобки, не могу понять |
|||
4
Волшебник
29.08.24
✎
09:41
|
(3) это формат wiki:JSON
|
|||
5
Повелитель
29.08.24
✎
09:42
|
(4) (2) Понятно, спасибо, буду изучать.
|
|||
6
trad
29.08.24
✎
09:49
|
(3) ранее ты освоил ЧтениеJSON и ПрочитатьJSON
Теперь надо освоить ЗаписьJSON и ЗаписатьJSON Делаешь структуру, загоняешь ее в ЗаписатьJSON и получаешь строку JSON со своими "двойными скобками" |
|||
7
Повелитель
11.09.24
✎
10:20
|
Нужна помощь. Вернемся к моему запросу.
нужно в 1с отправить POST запрос для формирования накладных. В справке: https://guide.kaspi.kz/partner/ru/shop/api/orders/q3210 вот такой пример: https://kaspi.kz/shop/api/v2/orders POST /api/v2/orders HTTP/1.1 Host: kaspi.kz/shop Content-Type: application/vnd.api+json X-Auth-Token:token { "data": { "type": "orders", "id": " ordersID", "attributes": { "status": "ASSEMBLE", "numberOfSpace": "2" } } } Составил код: мТокен = "v+Lm2au1"; ЗаголовокЗапроса = Новый Соответствие; ЗаголовокЗапроса.Вставить("Content-Type","application/vnd.api+json"); ЗаголовокЗапроса.Вставить("X-Auth-Token", мТокен); ЗаголовокЗапроса.Вставить("Host", "kaspi.kz/shop"); HTTP = Новый HTTPСоединение("kaspi.kz",,,,,15,Новый ЗащищенноеСоединениеOpenSSL()); //ТекстЗапроса = "shop/api/v2/orders"; ТекстЗапроса = "/api/v2/orders"; Запрос = Новый HTTPЗапрос(ТекстЗапроса, ЗаголовокЗапроса); //Формируем Параметр JSON СтруктураАртирбуты = Новый Структура; СтруктураАртирбуты.Вставить("status","ASSEMBLE"); СтруктураАртирбуты.Вставить("numberOfSpace","2"); СтруктураТела = Новый Структура; СтруктураТела.Вставить("type","orders"); СтруктураТела.Вставить("id","NDA5OT"); //ИД заказа СтруктураТела.Вставить("attributes",СтруктураАртирбуты); СтруктураДопПолей = Новый Структура; СтруктураДопПолей.Вставить("data", СтруктураТела); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Ложь; //ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,Символы.Таб); ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(); ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); ЗаписатьJSON(ЗаписьJSON, СтруктураДопПолей); ТелоЗапроса = ЗаписьJSON.Закрыть(); Запрос.УстановитьТелоИзСтроки(ТелоЗапроса); РезультатЗапроса = HTTP.ОтправитьДляОбработки(Запрос); Сообщить("Нам вернули код " + РезультатЗапроса.КодСостояния); Тело запроса получилось сделать как в справке: https://disk.yandex.com/i/wOCGyiukc3SF-A Результат такого запроса: Нам вернули код 503 <html><body><b>Http/1.1 Service Unavailable</b></body> </html> Если заголовки поменять: ЗаголовокЗапроса = Новый Соответствие; ЗаголовокЗапроса.Вставить("Content-Type","application/vnd.api+json"); ЗаголовокЗапроса.Вставить("X-Auth-Token", мТокен); //ЗаголовокЗапроса.Вставить("Host", "kaspi.kz/shop"); HTTP = Новый HTTPСоединение("kaspi.kz",,,,,15,Новый ЗащищенноеСоединениеOpenSSL()); ТекстЗапроса = "shop/api/v2/orders"; //ТекстЗапроса = "/api/v2/orders"; То получаем: Нам вернули код 500 Получен пустой ответ Подскажите что не так? |
|||
8
Волшебник
11.09.24
✎
10:21
|
ошибки 500 и 503 сигнализируют о проблемах на стороне сервиса.
Сообщите разработчикам |
|||
9
Повелитель
11.09.24
✎
10:30
|
(8) Так может я запрос не правильно составил, и он стучится не туда?
Например вот тут у них в примере https://kaspi.kz/shop/api/v2/orders POST /api/v2/orders HTTP/1.1 Host: kaspi.kz/shop Content-Type: application/vnd.api+json X-Auth-Token:token { "data": { "type": "orders", "id": " ordersID", "attributes": { "status": "ASSEMBLE", "numberOfSpace": "2" } } } есть HTTP/1.1, а я нигде это не указывал. |
|||
10
Галахад
11.09.24
✎
11:16
|
Если убрать ЗаголовокЗапроса.Вставить("Host", "kaspi.kz/shop");
ругается на просроченный токен. )) |
|||
11
Повелитель
11.09.24
✎
12:11
|
(10) К сожалению реальный токен выложить не могут, так как поменять его нет возможности
|
|||
12
ttk
11.09.24
✎
12:11
|
Тести в постмане, а потом уже в 1с сделай все по красоте.
|
|||
13
Галахад
11.09.24
✎
12:18
|
(11) Я к тому, что ошибки 500-х уходят.
|
|||
14
Повелитель
11.09.24
✎
12:47
|
(12) Не получается через постман тоже.
Вот скрины параметры: https://disk.yandex.com/i/6HiWVsfXQTTqaw авторизация: https://disk.yandex.com/i/Khdt2M0j-zT03A заголовки: https://disk.yandex.com/i/mrAMTHqilclAxA Ответ: 400 Bad Request Заголовки: https://disk.yandex.com/i/x5ctE2sMrlRcAw Ответ: Response |
|||
15
ttk
11.09.24
✎
12:52
|
{
"data": { "type": "orders", "id": " ordersID", "attributes": { "status": "ASSEMBLE", "numberOfSpace": "2" } } ну это обычно в тело пихают |
|||
16
ttk
11.09.24
✎
12:52
|
(15)
|
|||
17
dergreche
11.09.24
✎
13:01
|
(0) посмотри как сделано в решении на инфостарте https://infostart.ru/1c/tools/2041374/
|
|||
18
Повелитель
11.09.24
✎
13:03
|
(15) Спасибо, в посмман получилось:
Тело: https://disk.yandex.com/i/ZhyeK3aBuvM8uw Заголовки: https://disk.yandex.com/i/ZVBORZmf4-XHIA Теперь бы это ещё в 1с заработало. |
|||
19
ttk
11.09.24
✎
13:05
|
(18) в 1с заработает, если сделаешь как в (2)
|
|||
20
Greeen
11.09.24
✎
13:17
|
вы как в (10) попробовали? =)
|
|||
21
Повелитель
11.09.24
✎
13:19
|
(20) Пробовал, не помогает.
Сейчас буду пробовать (19) и (2) |
|||
22
Повелитель
11.09.24
✎
13:47
|
Всем спасибо. Всё получилось!
Вот рабочий код: мТокен = "хххххх"; ЗаголовокЗапроса = Новый Соответствие; ЗаголовокЗапроса.Вставить("Content-Type","application/vnd.api+json"); ЗаголовокЗапроса.Вставить("X-Auth-Token", мТокен); //ЗаголовокЗапроса.Вставить("Host", "kaspi.kz/shop"); HTTP = Новый HTTPСоединение("kaspi.kz",,,,,15,Новый ЗащищенноеСоединениеOpenSSL()); ТекстЗапроса = "/shop/api/v2/orders"; HTTPЗапрос = Новый HTTPЗапрос(ТекстЗапроса, ЗаголовокЗапроса); //Формируем Параметр JSON СтруктураАртирбуты = Новый Структура; СтруктураАртирбуты.Вставить("status","ASSEMBLE"); СтруктураАртирбуты.Вставить("numberOfSpace","1"); СтруктураТела = Новый Структура; СтруктураТела.Вставить("type","orders"); СтруктураТела.Вставить("id","idzakaz"); СтруктураТела.Вставить("attributes",СтруктураАртирбуты); СтруктураДопПолей = Новый Структура; СтруктураДопПолей.Вставить("data", СтруктураТела); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Ложь; ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(); ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON); ЗаписатьJSON(ЗаписьJSON, СтруктураДопПолей); ТелоЗапроса = ЗаписьJSON.Закрыть(); HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать); Попытка РезультатЗапроса = HTTP.ОтправитьДляОбработки(HTTPЗапрос); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Сообщить("Нам вернули код " + РезультатЗапроса.КодСостояния); До этого код был практически такой же. Вот тут: HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать); Не хватало параметров в УстановитьТелоИзСтроки КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать и сразу заработало. |
|||
23
Greeen
11.09.24
✎
13:48
|
(22)👍
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |