|
|
|
Помогите написать 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)👍
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |