POST-запрос form-urlencoded при изменении заказа в ABCP
Столкнулся с проблемой при изменении заказа из 1С на сайт под управлением ABCP.
В API метод POST для изменения заказа был описан странно:
Меня смутили именно параметры POST. Я пробовал сначала вообще передавать JSON, но получал ошибку, причем странным образом закодированную:
Мне пришлось расшифровывать ее специальным декодером. Было забавно, я сперва думал, что это я не указал какие-то параметры, когда передавал текст в декодер, хотя сам декодер лишь буквально расшифровывал мою ошибку. Потупил на этом минут 5.
Постепенно до меня дошло, что нужно передавать параметры в адресную строку. Через адресную строку работало, но ведь заказ может быть большим и не влезет в адресную строку, поэтому и используется POST, а не GET.
К счастью, я нашел пример кода для работы с другой командой и там выявил ключевую свою ошибку, нужно в заголовки вставлять:
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded")
Сам текст запроса я установил подобным образом (для простоты восприятия добавил переводы строки):
userlogin=*******&
userpsw=*******&
order[positions][1][statusCode]=25544&
order[positions][1][id]=4033372&
order[positions][0][id]=40333349&
order[positions][0][statusCode]=25544
&order[number]=12345
После этого POST-запрос заработал и я получил желаемые изменения в статусе заказа.
Да, отмечу один нюанс ABCP, нужно указывать ID строки, если есть желание изменять строку. Иначе она пытается добавлять строку и ругается, что не заполнен brand в строке.
Объем: 2 час Среда: APCB API.
1. Ты вроде веб-ом немного занимался, а про urlencoded не слыхал.. Странно
2. Никаких странных кодов в ошибке нет, просто обычный Unicode в escape варианте. Если бы занимался нормальным программированием то знал бы.
Всё это еще больше подтверждает, что 1С разработчики это особый, изолированный мир.
я использовал многое, да, но не глубоко в теме. Не сталкивался ранее с такими интересными POST-запросами.