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