![]() |
|
Post запрос не получается | ☑ | ||
---|---|---|---|---|
0
Gector
02.02.21
✎
21:34
|
Всем здравствуйте. Нужна помощь в POST запросе.
Отправляю запрос с POSTMAN все проходит, по API создается заказ, вот скрин запроса https://yadi.sk/i/ar9Ypv3nULnKBw Всего 3 параметра в POST запросе В 1с не получается реализовать, код ответа 200 приходит, но заказ не создается В ответе приходит "Customer email cannot be empty" "Product names cannot be empty" Много чего пробовал, прежде чем сюда написать Платформа 8.3.16 Вот мой код &НаСервере Процедура Команда1НаСервере() ПараметрыAPI = Новый Структура; ПараметрыAPI.Вставить("rpsKey", КлючAPI); ПараметрыAPI.Вставить("customer_email", "test@mail.ru"); ПараметрыAPI.Вставить("product_names", "BP1C"); HTTPСоединение = Новый HTTPСоединение("uchi.justclick.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL); // POST HTTPЗапрос = Новый HTTPЗапрос("/api/createorder"); // HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыAPI,КодировкаТекста.UTF8); //HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); Если HTTPОтвет.КодСостояния <> 200 Тогда РезультатМетода = "Ошибка выполнения http запроса. Код состояния - " + HTTPОтвет.КодСостояния; КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку()); // Структура = ПрочитатьJSON(ЧтениеJSON); // ЧтениеJSON.Закрыть(); КонецПроцедуры |
|||
1
Asmody
02.02.21
✎
21:38
|
Давно УстановитьТелоИзСтроки() понимает структуру на входе?
|
|||
2
Ёпрст
гуру
02.02.21
✎
21:45
|
(0) зачем делать отправить для обработки и потом следом пост? Ну и параметры..тупо воткни в метод хттпзапрос, тупо строкой ?вася=федя&....
|
|||
3
Asmody
02.02.21
✎
21:46
|
(2) там закомментарено. Много чего пробовал же!
|
|||
4
Gector
02.02.21
✎
21:59
|
(1) сорри поправил код, в торопях вставлял
&НаСервере Процедура Команда1НаСервере() ПараметрыAPI = Новый Структура; ПараметрыAPI.Вставить("rpsKey", КлючAPI); ПараметрыAPI.Вставить("customer_email", "test@mail.ru"); ПараметрыAPI.Вставить("product_names", "BP1C"); МассивПараметров = Новый Массив; Для Каждого Пара Из ПараметрыAPI Цикл МассивПараметров.Добавить(Пара.Ключ + "=" + Пара.Значение); КонецЦикла; // СтрокаПараметров = СтрСоединить(МассивПараметров, "&"); HTTPСоединение = Новый HTTPСоединение("uchi.justclick.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL); // POST HTTPЗапрос = Новый HTTPЗапрос("/api/createorder"); // HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); HTTPЗапрос.УстановитьТелоИзСтроки("&" + СтрокаПараметров,КодировкаТекста.UTF8); //HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST",HTTPЗапрос); Если HTTPОтвет.КодСостояния <> 200 Тогда РезультатМетода = "Ошибка выполнения http запроса. Код состояния - " + HTTPОтвет.КодСостояния; КонецЕсли; ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку()); // Структура = ПрочитатьJSON(ЧтениеJSON); // ЧтениеJSON.Закрыть(); КонецПроцедуры Теперь код состояния 307 возвращает |
|||
5
Gector
02.02.21
✎
22:01
|
(2) я закомментировал ОтправитьДляОбработки
|
|||
6
Gector
02.02.21
✎
22:10
|
Коды ошибок API тут описаны https://help.justclick.ru/archives/511
307 нет ошибки |
|||
7
Gector
02.02.21
✎
22:11
|
(2) напиши как по твоему будет работать, попробую
|
|||
8
Asmody
02.02.21
✎
22:16
|
(4) зачем строку параметров начал с амперсанда?
в том же постмане есть raw-режим. ну собери ты там параметры, посмотри в "сыром" виде как должна выглядеть строка. чего велосипед-то изобретать? |
|||
9
Ёпрст
гуру
02.02.21
✎
23:08
|
(7) ну, тело из сьроки не нужно тебе
|
|||
10
Ёпрст
гуру
02.02.21
✎
23:09
|
(3) с телефона камменты на другой строке окпзыааются..перенос строк однако)
|
|||
11
acht
03.02.21
✎
00:36
|
(6) HTTP код перенаправления 307 Temporary Redirect означает, что запрошенный ресурс был временно перемещен в URL-адрес, указанный в заголовке Location.
Если для тебя это китайская грамота, то лучше отдай задачу кому-нибудь другому. "Напиши как по твоему" не поможет. |
|||
12
Сергиус
03.02.21
✎
00:57
|
(0)ЗАчем структуру 1с пихать в тело? Там либо обычная строка вида параметр=значение и & разделитель, либо json/xml какой-ть.
|
|||
13
Сергиус
03.02.21
✎
01:00
|
+(12) функция УстановитьТелоИзСтроки - параметр ИспользоватьBOM
|
|||
14
Gector
03.02.21
✎
14:10
|
(12) посмотри внимательно 4 пост, потом структура в строку переводится
|
|||
15
Gector
03.02.21
✎
14:24
|
(9) как это не нужно, у меня POST запрос, а не GET
|
|||
16
Gector
03.02.21
✎
14:25
|
(13) ИспользоватьBOM пробовал, использовать и не использовать, не помогло
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.Использовать); |
|||
17
Ёпрст
гуру
03.02.21
✎
14:28
|
(9) и че ?
|
|||
18
Gector
03.02.21
✎
14:29
|
(17) ну вообщем пробовал, не помог твой совет
|
|||
19
Ёпрст
гуру
03.02.21
✎
14:29
|
(15) И че что пост ?
У тя нет "тела" в этом запросе. Ты не должен тыды передавать ничего. |
|||
20
Ёпрст
гуру
03.02.21
✎
14:30
|
Показывай, как проюовал. И покажи, как твой запрос в постмане выглядит, ну или где ты там проверяешь
|
|||
21
Gector
03.02.21
✎
14:32
|
||||
22
acht
03.02.21
✎
14:33
|
(21) "Headers (7)" ну это так, к слову
|
|||
23
Ёпрст
гуру
03.02.21
✎
14:34
|
у тя еще и urlencoded.. тут кодированную строку надо пихать тогда
|
|||
24
Ёпрст
гуру
03.02.21
✎
14:34
|
и да, покажи, что в заголовках
|
|||
25
Ёпрст
гуру
03.02.21
✎
14:34
|
в постмане
|
|||
26
Gector
03.02.21
✎
14:38
|
||||
27
Ёпрст
гуру
03.02.21
✎
14:50
|
Ну , у меня пока так:
код состояния 200 и ответ такой.. {"status":false,"result":[{"message":"Customer email cannot be empty","name":"create_order[customer_email]"},{"message":"Product names cannot be empty","name":"create_order[product_names]"}]} ща, отвлекают тут |
|||
28
Gector
03.02.21
✎
14:54
|
(27) да, такое я тоже получал
|
|||
29
Ёпрст
гуру
03.02.21
✎
15:52
|
У тя хотя бы простой запрос HTTPЗапрос = Новый HTTPЗапрос("api/getgoods"); работает ?
|
|||
30
Ёпрст
гуру
03.02.21
✎
15:53
|
вот тут
HTTPЗапрос.УстановитьТелоИзСтроки("&" + СтрокаПараметров,КодировкаТекста.UTF8); выкинь & |
|||
31
Gector
03.02.21
✎
16:07
|
(29) Да у меня получилось getgoods, но только через COMОбъект
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); WinHttp.Option(2,"ANSI"); WinHttp.Open("POST","https://uchi.justclick.ru/api/getgoods",0); WinHttp.SetRequestHeader("Accept-Language", "ru"); WinHttp.SetRequestHeader("Accept-Charset","ANSI"); WinHttp.setRequestHeader("Content-Language", "ru"); WinHttp.setRequestHeader("Content-Charset", "ANSI"); WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=ANSI"); СтрокаЗапроса="rpsKey="+КлючApi; WinHttp.Send(СтрокаЗапроса); ТекстОтвета = WinHttp.ResponseText(); |
|||
32
Ёпрст
гуру
03.02.21
✎
16:27
|
ну а так, ?
HTTPСоединение = Новый HTTPСоединение("uchi.justclick.ru",443, , , , , Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/GetGoods"); HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Accept-Charset","ANSI"); HTTPЗапрос.Заголовки.Вставить("Content-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Content-Charset", "ANSI"); СтрокаПараметров = "rpsKey="+КлючApi;// ну или СтрокаПараметров = КодироватьСтроку("rpsKey="+КлючApi,СпособКодированияСтроки.КодировкаURL); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров ,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку()); |
|||
33
acht
03.02.21
✎
16:32
|
Параметры-то кодировкой прикройте. Там же у вас собаки водятся.
|
|||
34
Gector
03.02.21
✎
16:45
|
(32) работает
|
|||
35
Gector
03.02.21
✎
17:04
|
(32) GetGoods работает, createorder не проходит
HTTPСоединение = Новый HTTPСоединение("uchi.justclick.ru",443, , , , , Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/CreateOrder"); HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Accept-Charset","ANSI"); HTTPЗапрос.Заголовки.Вставить("Content-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Content-Charset", "ANSI"); СтрокаПараметров = КодироватьСтроку("rpsKey="+КлючApi,СпособКодированияСтроки.КодировкаURL)+"&"+КодироватьСтроку("customer_email=test@yandex.ru",СпособКодированияСтроки.КодировкаURL)+"&"+КодироватьСтроку("product_names=BP1C", СпособКодированияСтроки.КодировкаURL); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров ,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку()); ответ {"error_code":1,"error_text":"Not transferred hash","hash":"644639af72db5155a9f7902dc4f84304"} |
|||
36
Gector
03.02.21
✎
17:16
|
как хеш прицепить?
|
|||
37
acht
03.02.21
✎
17:19
|
(35) Если по феншую, то "строку параметров" надо лепить как
КодироватьСтроку(...) + "=" + КодироватьСтроку(...) + "&" + ... |
|||
38
acht
03.02.21
✎
17:20
|
(36) > хеш
А это к поставщику АПИ |
|||
39
Gector
03.02.21
✎
17:52
|
(37) сделал по феншую, теперь получаю ответ {"error_code":600,"error_text":"Wrong email: ''","hash":"e8f743c26e3ab8eb31b572bb664059e7"}
|
|||
40
Gector
03.02.21
✎
17:54
|
вот как лепил по феншую строкупараметров
СтрокаПараметров = КодироватьСтрокуПараметра("rpsKey",КлючApi)+"&"+ КодироватьСтрокуПараметра("customer_email","test@mail.ru")+"&"+КодироватьСтрокуПараметра("product_names","BP1C"); Функция КодироватьСтрокуПараметра(Параметр, Значение) Возврат КодироватьСтроку(Параметр, СпособКодированияСтроки.КодировкаURL) + "=" + КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL); КонецФункции |
|||
41
DAFA
03.02.21
✎
18:23
|
проверь что возвращает РезультатМетода = "Ошибка выполнения http запроса. Код состояния - "
+ HTTPОтвет.КодСостояния; 600 быть не должно . |
|||
42
Gector
03.02.21
✎
18:30
|
(41) код состояния 200, но заказ не создается
|
|||
43
Gector
03.02.21
✎
19:13
|
Код сейчас выглядит так:
Процедура КнопкаВыполнитьНажатие(Кнопка) HTTPСоединение = Новый HTTPСоединение("uchi.justclick.ru",443, , , , , Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/CreateOrder"); HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Accept-Charset","ANSI"); HTTPЗапрос.Заголовки.Вставить("Content-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Content-Charset", "ANSI"); СтрокаПараметров = КодироватьСтрокуПараметра("rpsKey",КлючApi)+"&"+ КодироватьСтрокуПараметра("customer_email","test@mail.ru")+"&"+КодироватьСтрокуПараметра("product_names","BP1C"); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку()); КонецПроцедуры Функция КодироватьСтрокуПараметра(Параметр, Значение) Возврат КодироватьСтроку(Параметр, СпособКодированияСтроки.КодировкаURL) + "=" + КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL); КонецФункции Получаю HTTPОтвет.КодСостояния=200 HTTPОтвет.ПолучитьТелоКакСтроку() = {"error_code":600,"error_text":"Wrong email: ''","hash":"e8f743c26e3ab8eb31b572bb664059e7"} Заказ не создается. |
|||
44
Гений 1С
гуру
03.02.21
✎
19:49
|
(43) а что в СтрокаПараметров счас?
|
|||
45
Гений 1С
гуру
03.02.21
✎
19:50
|
он у тебя email видит как пустой, по человечески же отвечает
|
|||
46
Gector
03.02.21
✎
20:07
|
(45) я ему по чеовечески отправляю емайл, а он говорит пустой.
|
|||
47
Гений 1С
гуру
03.02.21
✎
20:14
|
(46) строку параметров дай, бл
|
|||
48
Ёпрст
гуру
03.02.21
✎
20:27
|
(43) ё..
так пробуй: СтрокаПараметров = КодироватьСтроку("rpsKey=КлючApi&email=.....&Вася=Федя",СпособКодированияСтроки.КодировкаURL); |
|||
49
Fram
03.02.21
✎
20:27
|
Тут кто то ссылку на обёртку на гитхабе выкладывал. Там вроде для урленкодед тоже методы были. Чтобы самому не париться вот так.
|
|||
50
Ёпрст
гуру
03.02.21
✎
20:28
|
Ну или пробуй параметры json-ом передать, мот там их сервис умеет json, раз ответ в json-e приходит
|
|||
51
Fram
03.02.21
✎
20:32
|
(50) +1 99% что умеет
|
|||
52
Ёпрст
гуру
03.02.21
✎
20:46
|
Тип того:
|
|||
53
Fram
03.02.21
✎
20:54
|
(52) имхо, для json кодироватьстроку это уже лишнее
|
|||
54
Ёпрст
гуру
03.02.21
✎
21:02
|
(53) ну.. у него же в заголовках стоит что передача кодированной строки
|
|||
55
Fram
03.02.21
✎
21:45
|
(54) заголовок тоже на json надо поменять, если json засылать
|
|||
56
Gector
04.02.21
✎
14:45
|
(52) попробовал, в ответ приходит {"error_code":2,"error_text":"No transmitted data","hash":"f95109a0ca4b2ec82b41adc4dd5b90c6"}
Код состояния 200 Пробовал и просто json, не кодировал, и в заголовке указывал application/json, ответ одинаковый, видимо не понимают они json на входе HTTPСоединение = Новый HTTPСоединение("uchi.justclick.ru",443, , , , , Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос("/api/CreateOrder"); HTTPЗапрос.Заголовки.Вставить("Content-type","application/json"); //"application/x-www-form-urlencoded"); HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Accept-Charset","ANSI"); HTTPЗапрос.Заголовки.Вставить("Content-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Content-Charset", "ANSI"); ПараметрыAPI = Новый Структура; ПараметрыAPI.Вставить("rpsKey", КлючApi); ПараметрыAPI.Вставить("customer_email", "test@mail.ru"); ПараметрыAPI.Вставить("product_names", "BP1C"); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписьJSON.ЗаписатьНачалоМассива(); ЗаписатьJSON(ЗаписьJSON,ПараметрыAPI); ЗаписьJSON.ЗаписатьКонецМассива(); СтрокаJSON = ЗаписьJSON.Закрыть();//КодироватьСтроку(ЗаписьJSON.Закрыть(),СпособКодированияСтроки.КодировкаURL); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); Сообщить(HTTPОтвет.ПолучитьТелоКакСтроку()); |
|||
57
Garykom
гуру
04.02.21
✎
14:51
|
(56) "ANSI"
|
|||
58
Gector
04.02.21
✎
14:57
|
(47) держи rpsKey=8074da4206bf4f587cec7&customer_email=test%40mail.ru&product_names=BP1C
|
|||
59
Gector
04.02.21
✎
15:04
|
(57) что ANSI?
|
|||
60
Ёпрст
гуру
04.02.21
✎
15:10
|
(59) ты передаешь utf8 а в заголовках указываешь анси
|
|||
61
Gector
04.02.21
✎
15:27
|
(60) поменял на utf-8, не помогло, с json и без него попробовал
|
|||
62
Gector
04.02.21
✎
15:27
|
HTTPЗапрос.Заголовки.Вставить("Accept-Charset","utf-8");
HTTPЗапрос.Заголовки.Вставить("Content-Language", "ru"); HTTPЗапрос.Заголовки.Вставить("Content-Charset", "utf-8"); |
|||
63
Garykom
гуру
04.02.21
✎
15:44
|
(61) Если у тебя в POSTMAN все работает то я не понимаю проблемы повторить на 1С.
|
|||
64
Gector
04.02.21
✎
15:45
|
(63) ну вот не работает в 1С, скажи что не так, если видишь
|
|||
65
Garykom
гуру
04.02.21
✎
15:47
|
(64) Потому что кто то тупой.
У тебя в постмане "x-www-form-urlencoded" и в теле параметры. Какого хрена ты в заголовки суешь в 1С? |
|||
66
Garykom
гуру
04.02.21
✎
15:49
|
(65)+ Короче изучи сначала теорию а потом легко и просто сделай. А не методом тыка. Тут такое очень плохо работает, задолбаешься над 5 минутной задачкой 5 дней сидеть.
|
|||
67
Garykom
гуру
04.02.21
✎
15:49
|
(65)+ Это про код из (0)
|
|||
68
Garykom
гуру
04.02.21
✎
15:49
|
А дальше нахрена то в json стал сувать что еще странней.
|
|||
69
Garykom
гуру
04.02.21
✎
15:50
|
"При x-www-form-urlencoded надо передавать данные в виде variable=val&variable2=val"
|
|||
70
Gector
04.02.21
✎
15:51
|
(69) ты посмотри ветку, прежде чем писать, пробовали так
|
|||
71
Garykom
гуру
04.02.21
✎
15:54
|
||||
72
Garykom
гуру
04.02.21
✎
15:56
|
У тебя не rest api а по сути эмуляция методов/вызовов из браузера одностраничника на js
И там куча редиректов на другие пути, для браузера/js это фигня штатная как и для Постмана А вот для тех кто не понимает что ответ бывает не только 200 но и 201, 202 и т.д. и это все ПРАВИЛЬНЫЕ ОТВЕТЫ! Очень тяжко. |
|||
73
Gector
04.02.21
✎
16:50
|
(72) в заголовке в Location приходит вот такая "/api/createOrderZapier?products=%5B%7B%22product_name%22%3A%22BP1C%22%7D%5D&eventName=api%20-%20createorder"
Тоесть мне надо еще один запрос послать. Верно? |
|||
74
Garykom
гуру
04.02.21
✎
16:51
|
(73) угадал
|
|||
75
Garykom
гуру
04.02.21
✎
16:52
|
(74)+ причем вполне возможно что хватит простого GET по указанному URL
|
|||
76
Gector
04.02.21
✎
16:58
|
бинго
послал и заказ создался Если HTTPОтвет.КодСостояния = 307 Тогда HTTPСоединение = Новый HTTPСоединение("uchi.justclick.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL); HTTPЗапрос = Новый HTTPЗапрос(HTTPОтвет.Заголовки["Location"]); // HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded"); HTTPЗапрос.Заголовки.Вставить("User-Agent", "PostmanRuntime/7.26.10"); HTTPЗапрос.Заголовки.Вставить("Accept", "*/*"); HTTPЗапрос.Заголовки.Вставить("Accept-Encoding", "gzip, deflate, br"); HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); КонецЕсли; |
|||
77
Gector
04.02.21
✎
16:58
|
(75) Егор спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |