Имя: Пароль:
1C
1С v8
API запрос на сайт ABCP
0 Обизян
 
31.10.25
13:05
Может кто-то работал в апишкой abcp, пытаюсь отправить заказ поставщику, но ловлю ошибку 500

	ТекстЗапроса = "&orderParams[shipmentAddress]=FD765B07-2B9E-11E9-A2C9-005056802F4C&orderParams[paymentMethod]=2&orderParams[shipmentMethod]=1&orderParams[shippingDateLast]=1&orderParams[transportType]=1&positions[0][id]=98989898&positions[0][positionParams][comment]=тест"	
	ФрагментЗапроса = "userlogin=api@abcp****&userpsw=d07**************9c" + ТекстЗапроса;
	HTTPСоединение = Новый HTTPСоединение("abcp****.public.api.abcp.ru",,,,,, Новый ЗащищенноеСоединениеOpenSSL());//, , Пользователь, Пароль);
	HTTPЗапрос = Новый HTTPЗапрос("/cp/orders/online");
	HTTPЗапрос.УстановитьТелоИзСтроки(ФрагментЗапроса);
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
	Попытка
		HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос, ИмяВыходногоФайла);	
		КодСостояния = HTTPОтвет.КодСостояния;
	Исключение
		ТекстСообщения = "Код ошибки"+КодСостояния+"ошибка получения заказов:"+ОписаниеОшибки();
		сообщить(ТекстСообщения);
		возврат;
	КонецПопытки;
1 Волшебник
 
31.10.25
13:16
ошибка 500 означает внутренняя ошибка сервера
обращайтесь ТУДА
https://www.abcp.ru/support
2 Обизян
 
31.10.25
13:18
я когда им скидываю текст запроса, они говорят что когда его пробуют, у них все хорошо
3 Волшебник
 
31.10.25
13:21
(2) Пусть покажут логи сервера, когда Вы им делаете запрос. Скажите им свой IP-адрес, они по нему пошукают error.log для своего веб-сервера
4 Обизян
 
31.10.25
13:22
хорошая мысль, спасибо
5 Garykom
 
гуру
31.10.25
13:32
вот эта хрень
ТекстЗапроса = "&orderParams[shipmentAddress]=FD765B07-2B9E-11E9-A2C9-005056802F4C&orderParams[paymentMethod]=2&orderParams[shipmentMethod]=1&orderParams[shippingDateLast]=1&orderParams[transportType]=1&positions[0][id]=98989898&positions[0][positionParams][comment]=тест"

некорректное содержимое для
"application/x-www-form-urlencoded"
6 Garykom
 
гуру
31.10.25
13:33
И кстати даже логин с паролем кстати енкодить!
Там могут быть служебные символы типа "=" или "&"
7 Обизян
 
31.10.25
13:34
(5) а что с ней не так, поддержка написала что надо в url кодировке передавать
8 Garykom
 
гуру
31.10.25
13:34
9 Обизян
 
31.10.25
13:36
я использовал КодироватьСтроку, чот тоже не завелось(
10 Обизян
 
31.10.25
13:37
а необходимо
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
использовать вместе с КодироватьСтроку?
11 Garykom
 
гуру
31.10.25
13:37
ФрагментЗапроса = КодироватьСтроку(ФрагментЗапроса, СпособКодированияСтроки.КодировкаURL);
HTTPЗапрос.УстановитьТелоИзСтроки(ФрагментЗапроса);
12 Garykom
 
гуру
31.10.25
13:42
(11)+ Точнее конечно не так
Надо КодироватьСтроку не целиком а все отдельные значения которые вставляешь в итоговую
Значение1Кодированное = КодироватьСтроку(Значение1, СпособКодированияСтроки.КодировкаURL);
Значение2Кодированное = КодироватьСтроку(Значение2, СпособКодированияСтроки.КодировкаURL);
ТелоЗапроса = "value1="+Значение1Кодированное+"&"+"value2="+Значение2Кодированное;
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
13 Обизян
 
31.10.25
13:42
(11) а так выходит ошибка 400
14 Обизян
 
31.10.25
13:43
(12) ага, сейчас попробую только значения закодировать тогда
15 Garykom
 
гуру
31.10.25
13:48
Кстати "[" и "]" в именах параметров не уверен что допустимы
Возможно имена тоже надо кодировать
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.