|
Помогите написать GET-запрос для получения заказов с kaspi.kz | ☑ | ||
---|---|---|---|---|
0
Повелитель
13.05.24
✎
14:50
|
Из инструкции к примеру запроса:
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> где: page[number] - Номер страницы с результатом запроса. На одной странице может быть максимум 100 заказов. Укажите номер нужной страницы, начиная с 0
page[size] - Количество заказов, которое будет на одной странице в ответе Максимум — 100 filter[orders][state] Состояние заказа: NEW, SIGN_REQUIRED, PICKUP, DELIVERY, KASPI_DELIVERY,ARCHIVE filter[orders][creationDate] Дата создания заказа. Указывается в миллисекундах. [$ge] начальное значение, [$le] конечное значение filter[orders][status] Статус заказа: APPROVED_BY_BANK, ACCEPTED_BY_MERCHANT, COMPLETED, CANCELLED, CANCELLING, KASPI_DELIVERY_RETURN_REQUESTED, RETURNED filter[orders][deliveryType] Способ доставки. Используйте, только если filter[orders][state] не равен PICKUP DELIVERY, KASPI_DELIVERY или PICKUP filter[orders][signatureRequired] Подписание документов Используйте, если filter[orders][state] не равен SIGN_REQUIRED include[orders] Дополнительные данные о заказе. user Информация о покупателе, который оформил заказ ////////////////////////////////////////////////////////// МОЙ КОД: Для простоты хочу получить последние 100 заказов, без учета статусов, состояний и прочего. Соединение = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); запросGET = Новый HTTPЗапрос("shop/api/v2/orders?page[number]=0&page[size]=100&filter[orders][creationDate][$ge]=1478736000000&filter[orders][creationDate][$le]=1479945600000"); запросGET.Заголовки.Вставить("Content-Type", "application/vnd.api+json"); запросGET.Заголовки.Вставить("X-Auth-Token", "мой токен"); //запросGET.УстановитьТелоИзСтроки(ТелоЗапроса); Ответ = Соединение.ОтправитьДляОбработки(запросGET); Получаю ответ 400, а должен быть 200. Подскажите как правильно составить такой GET запрос? И мне не очень понятно, как работать с параметрами [$ge] начальное значение, [$le] конечное значение. Ни разу не сталкивался. |
|||
1
realptrm
13.05.24
✎
14:58
|
запросGET = Новый HTTPЗапрос("/shop/api/v2/orders?page[number]=0&page[size]=100&filter[orders][creationDate][$ge]=1478736000000&filter[orders][creationDate][$le]=1479945600000");
Слеш забыл $ge, $le ТекущаяУниверсальнаяДатаВМиллисекундах() |
|||
2
asady
13.05.24
✎
14:57
|
Заголовки = Новый соответствие;
Заголовки.Вставить("content-type","application/json"); Заголовки.Вставить("X-Auth-Token", "мой токен"); запросGET = Новый HTTPЗапрос("shop/api/v2/orders?page[XMLString(number)]=0&page[size]=100&filter[orders][creationDate][$ge]=1478736000000&filter[orders][creationDate][$le]=1479945600000" ,заголовки); Ответ = Соединение.Получить(запросGET); |
|||
3
Повелитель
13.05.24
✎
14:58
|
(1) Не помогло, так же ответ 400
|
|||
4
asady
13.05.24
✎
14:59
|
Новый HTTPЗапрос("shop/api/v2/orders?page[number]=0&page[size]=100&filter[orders][creationDate][$ge]=1478736000000&filter[orders][creationDate][$le]=1479945600000"
,заголовки); xmLString -не нужен |
|||
5
asady
13.05.24
✎
15:00
|
ты вместо GET посылаешь POST
|
|||
7
Повелитель
13.05.24
✎
15:07
|
(5) Переделал:
Заголовки = Новый соответствие; Заголовки.Вставить("Content-Type","application/vnd.api+json"); Заголовки.Вставить("X-Auth-Token", "мой токен"); Соединение = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); запросGET = Новый HTTPЗапрос("/shop/api/v2/orders?page[number]=0&page[size]=100&filter[orders][creationDate][$ge]=1478736000000&filter[orders][creationDate][$le]=1479945600000",Заголовки); Ответ = Соединение.Получить(запросGET); Пока так же, ответ 400 |
|||
8
realptrm
13.05.24
✎
15:11
|
Попробуй
/shop/api/v2/orders?page[number]=0&page[size]=50&filter[orders][creationDate][$ge]=1715000000000&filter[orders][creationDate][$le]=1716000000000 |
|||
9
Повелитель
13.05.24
✎
15:14
|
(8) Проверил:
Заголовки = Новый соответствие; Заголовки.Вставить("Content-Type","application/vnd.api+json"); Заголовки.Вставить("X-Auth-Token", "мой токен"); Соединение = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); запросGET = Новый HTTPЗапрос("shop/api/v2/orders?page[number]=0&page[size]=50&filter[orders][creationDate][$ge]=1715000000000&filter[orders][creationDate][$le]=1716000000000",Заголовки); Ответ = Соединение.Получить(запросGET); Пока так же, ответ 400 |
|||
10
asady
13.05.24
✎
15:16
|
(7) вот работающий пример с их сайта
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> отправь для начала такой же - но со своим токеном - через POSTMAN например |
|||
11
Philix
13.05.24
✎
15:24
|
(9) Шальная мысль: А в теле ответа нет причины отказа? Потому что в ответ на неавторизованный запрос я получаю достаточно развернутый ответ о необходимости авторизации. Разработчики на этом этапе слова не экономили.
|
|||
12
Повелитель
13.05.24
✎
15:32
|
(10) Вроде бы работает:
https://disk.yandex.com/i/Fw8MOpn7cpFmYg |
|||
13
Повелитель
13.05.24
✎
15:33
|
(11) Я свой токен не выкладывал, может из-за этого
|
|||
14
Повелитель
13.05.24
✎
15:37
|
Запихал запрос целиком:
Заголовки = Новый соответствие; Заголовки.Вставить("Content-Type","application/vnd.api+json"); Заголовки.Вставить("X-Auth-Token", "мой токен"); Соединение = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); запросGET = Новый HTTPЗапрос("/shop/api/v2/orders?page[number]=0&page[size]=50&filter[orders][creationDate][$ge]=1715000000000&filter[orders][creationDate][$le]=1716000000000&filter[orders][status]=APPROVED_BY_BANK&filter[orders][deliveryType]=PICKUP&filter[orders][signatureRequired]=false&include[orders]=user",Заголовки); Ответ = Соединение.Получить(запросGET); Ответ, так же 400. |
|||
15
realptrm
13.05.24
✎
15:39
|
Сообщить(Ответ.ПолучитьТелоКакСтроку());
|
|||
16
Повелитель
13.05.24
✎
15:42
|
(15) {"errors":[{"status":"400","title":"Request parameters error","detail":"For input string: \"10\n\""}]}
|
|||
17
realptrm
13.05.24
✎
15:45
|
/shop/api/v2/orders?page[number]=0&page[size]=20
без фильтров попробуй |
|||
18
Повелитель
13.05.24
✎
15:47
|
(17)
Заголовки = Новый соответствие; Заголовки.Вставить("Content-Type","application/vnd.api+json"); Заголовки.Вставить("X-Auth-Token", "мой токен"); Соединение = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); запросGET = Новый HTTPЗапрос("shop/api/v2/orders?page[number]=0&page[size]=20 //|&filter[orders][creationDate][$ge]=1715000000000&filter[orders][creationDate][$le]=1716000000000 //|&filter[orders][status]=APPROVED_BY_BANK //|&filter[orders][deliveryType]=PICKUP //|&filter[orders][signatureRequired]=false //|&include[orders]=user |",Заголовки); Ответ = Соединение.Получить(запросGET); Сообщить(Ответ.ПолучитьТелоКакСтроку()); Так же: {"errors":[{"status":"400","title":"Request parameters error","detail":"For input string: \"20\n\""}]} |
|||
19
Повелитель
13.05.24
✎
15:50
|
Вот тут добавил двоеточие:
Заголовки.Вставить("Content-Type:","application/vnd.api+json"); Заголовки.Вставить("X-Auth-Token:", "мой токен") Ошибка вот такая стала: {"message":"Full authentication is required to access this resource.", "access-denied":true, "cause":"NOT AUTHENTICATED"} Значит до этого авторизацию проходило. |
|||
20
realptrm
13.05.24
✎
15:53
|
тут рабочий запрос
Регламентное задание автоматически срабатывает с ошибками, а вручную без |
|||
21
asady
13.05.24
✎
15:56
|
текстзапроса = "%2Fshop%2Fapi%2Fv2%2Forders%3Fpage%5Bnumber%5D%3D0%26page%5Bsize%5D%3D50%26filter%5Borders%5D%5BcreationDate%5D%5B%24ge%5D%3D1715000000000%26filter%5Borders%5D%5BcreationDate%5D%5B%24le%5D%3D1716000000000%26filter%5Borders%5D%5Bstatus%5D%3DAPPROVED_BY_BANK%26filter%5Borders%5D%5BdeliveryType%5D%3DPICKUP%26filter%5Borders%5D%5BsignatureRequired%5D%3Dfalse%26include%5Borders%5D%3Duser";
запросGET = Новый HTTPЗапрос(текстзапроса,Заголовки); |
|||
22
Повелитель
13.05.24
✎
15:57
|
Через posmtan И без параметров статус = 200
https://disk.yandex.com/i/jC67T5scXeNEVQ Но почему-то обязательно нужно указать GET, красным выделил, без этого не работает. Хотя слева и так тип GET выбран. Может и в 1с нужно где-то GET прописать? |
|||
23
Повелитель
13.05.24
✎
15:58
|
(20) Спасибо, буду пробовать
|
|||
24
asady
13.05.24
✎
15:58
|
ТС попробуй текст запроса с экранированием спецсимволов (21)
|
|||
25
Ёпрст
13.05.24
✎
15:59
|
(22) Получить это и есть GET
|
|||
26
Повелитель
13.05.24
✎
16:00
|
(21) Сообщить ничего не возвращает, но отладчиком ответ = 302
|
|||
27
Повелитель
13.05.24
✎
16:01
|
(24) ок
(25) понял |
|||
28
asady
13.05.24
✎
16:03
|
(26) поиграй с кодированием/декодированием url
https://meyerweb.com/eric/tools/dencoder/ |
|||
29
Philix
13.05.24
✎
19:13
|
(18) Мэтр, разделитель строк убирайте, который |. Кавычку и точку с запятой сразу за 20. Он мешает в запросе и добавляет перевод строки (Код символа 10).
|
|||
30
Волшебник
13.05.24
✎
19:15
|
(29) Интересная мысль!
|
|||
31
Philix
13.05.24
✎
19:26
|
(30) Сам в шоке. На 20-м году разработки в 1С такие новости для себя открывать :)
Стр1 = "Строка1 |Строка2"; Сообщить(Стр1); Сообщить(КодСимвола(Сред(Стр1,8,1))); |
|||
32
Волшебник
13.05.24
✎
19:22
|
(31) Мы, 1С-ники, высшее
|
|||
33
Ёпрст
13.05.24
✎
19:44
|
(31) см. (14) и (16).
|
|||
34
Волшебник
13.05.24
✎
19:49
|
Там ещё бывают 4-байтовые символы... Ну это просто я зажигаю
|
|||
35
Philix
13.05.24
✎
19:59
|
(33) Мэтр, есть подозрение, что это два разных этапа отладки. В запросе в (14) нет строки 10, упомянутой в (16) и текст ошибки там скорее всего был каким-то другим, либо наш коллега слега подчистил код перед публикацией. В любом случае, автор нашел тело ответа, в котором есть сообщение об ошибке и завтра он обречен на успех :)
|
|||
36
Волшебник
13.05.24
✎
20:02
|
(35) Не совсем так... Вы ошиблись
|
|||
37
Повелитель
14.05.24
✎
08:27
|
Всем спасибо.
Помог пример из (20). РЕШЕНИЕ НАЙДЕНО, РАБОЧИЙ КОД: ТекДата = ТекущаяДата(); ИсхДата = Дата(1970, 1, 1); ДатаВМил = (ТекДата - ИсхДата) * 1000; ДатаВМилСтрока = Формат(ДатаВМил,"ЧГ="); ДатаВмилНачало = ДатаВМил - 600 * 1000 * 100; ДатаВМилНачалоСтрока = Формат(ДатаВмилНачало,"ЧГ="); Заголовки = Новый Соответствие; Заголовки.Вставить("Content-Type","application/vnd.api+json"); Заголовки.Вставить("X-Auth-Token", "мой токен"); HTTP = Новый HTTPСоединение("kaspi.kz",,,,,,Новый ЗащищенноеСоединениеOpenSSL()); Запрос = Новый HTTPЗапрос("/shop/api/v2/orders?page[number]=0&page[size]=20&filter[orders][state]=NEW&filter[orders][creationDate][$ge]=" + ДатаВМилНачалоСтрока + "&filter[orders][creationDate][$le]=" + ДатаВМилСтрока + "&filter[orders][status]=APPROVED_BY_BANK&include[orders]=user", Заголовки); Результат = HTTP.Получить(Запрос); Сообщить(Результат.КодСостояния); Можно сказать, что верно всё было, отличия было только в параметре "&filter[orders][state]=NEW" у меня в запросе его ранее не было. Дата в миллисекундах это конечно прикольно, первый раз такой формат вижу, очень странный. Взять и просто разницу дат на 1000 умножить, мда. Никогда бы не догадался. |
|||
38
Ёпрст
14.05.24
✎
10:47
|
(37) вот эти 3 параметра вроде как обязательные у них при запросе заказов:
state creationDate status |
|||
39
novichok79
14.05.24
✎
11:31
|
Я забыл, в 1С нету же платформенных методов, чтобы красиво экранировать query parameters? А все, вижу выше. Проблема решена. |
|||
40
ttk
14.05.24
✎
11:35
|
(39)
Вроде нету, но можно самому быстро запилить, что б строка собиралась из соответствия например |
|||
41
novichok79
14.05.24
✎
11:35
|
(40) был кажется какой-то коннектор или что-то такое на ИС.
|
|||
42
Philix
14.05.24
✎
12:20
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |