|
php получает кривой json | ☑ | ||
---|---|---|---|---|
0
nikweel
08.02.21
✎
19:13
|
Подскажите в чем дело.
Php получает post с json данными, получив данные записывает их в файл: file_put_contents(__DIR__ . '/post.txt', print_r($_POST,true).PHP_EOL, FILE_APPEND); Почему то получаем кривой json: Array ( [{ "onec_id_order":_"ЦВ000001381", "id_order":_"", "phone":_"_79210837012", "post_track":_] => Array ( [ "80111457622359", "80111457621468" ] => ) ) Код: тДанные = Новый Структура; тДанные.Вставить("onec_id_order", Источник.номер); Если ЗначениеЗаполнено(Источник.Сделка) И Источник.Сделка.Метаданные().Имя = "ЗаказПокупателя" Тогда тДанные.Вставить("id_order", Прав(Источник.Сделка.БЭ_НомерСАдминки, СтрДлина(Источник.Сделка.БЭ_НомерСАдминки)-1)); // 09.11.2020 по новому требованию КонецЕсли; тДанные.Вставить("phone", ПолучитьКонтактнуюИнформацию(Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента, Источник.Контрагент)); тДанные.Вставить("post_track", Массив); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,тДанные); СтрокаПараметров = ЗаписьJSON.Закрыть(); ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить("Content-type", "application/x-www-form-urlencoded"); HTTPЗапрос = Новый HTTPЗапрос("/voin/connector/", ЗаголовокHTTP); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаПараметров); HTTPСоединение = Новый HTTPСоединение("script.in-crm.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL); Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); |
|||
1
ДенисЧ
08.02.21
✎
19:23
|
Сообщить(СтрокаПараметров );
что показывает? |
|||
2
Asmody
08.02.21
✎
19:30
|
Если у тебя Content-type: application/x-www-form-urlencoded, то тело должно выглядеть как key1=value1&key2=value2 и т.д.
php такие штуки разбирает сам в массив $_POST. весь твой json стал строкой - ключом элемента массива |
|||
3
nikweel
09.02.21
✎
06:45
|
(2) Подскажите пожалуйста, я не 1с разработчик, работаю с php, совместно со мной но со стороны другой компании работает 1с разработчик, и вот с такой сложностью столкнулись, 1с разраб говорит что уже все перепробовал, и в итоге данные либо вообще не приходят ко мне либо в таком вот виде...
Что можно изменить в коде 1с что бы мне приходил нормальный json на php? В таком виде: { "id_order":"111", "onec_id_order":"цв0000223", "post_track":["1111","22222"], "phone":"79999999999" } print_r: Array ( [id_order] => 111 [onec_id_order] => цв0000223 [post_track] => Array ( [0] => 1111 [1] => 22222 ) [phone] => 79999999999 ) Буду очень признателен за любую помощь! |
|||
4
breezee
09.02.21
✎
09:12
|
Познакомьте разработчка 1с с сериализитором в json. В 2 строки все делается) Гуглится, но и в СП есть
СериализаторXDTO (XDTOSerializer) ЗаписатьJSON (WriteJSON) Синтаксис: ЗаписатьJSON(<ЗаписьJSON>, <Значение>, <НазначениеТипаXML>) Параметры: <ЗаписьJSON> (обязательный) Тип: ЗаписьJSON. Объект, через который осуществляется запись JSON. <Значение> (обязательный) Тип: Произвольный. Записываемое в поток JSON значение. <НазначениеТипаXML> (необязательный) |
|||
5
ДенисЧ
09.02.21
✎
09:16
|
(4) ммм.. в (0) есть строчка ЗаписатьJSON(ЗаписьJSON,тДанные);
Чем она отличается от твоего сообщения? |
|||
6
craxx
09.02.21
✎
09:39
|
(0) странный какой-то контент-тайп
|
|||
7
Asmody
09.02.21
✎
09:48
|
(3) Если ты разработчик php, то должен знать как php разбирает тело post-запроса.
Даже если на стороне 1С написан код из (0) (в котором, кстати, никакого криминала нет, за исключением Content-type), но даже в этом случае php может получить тело запроса через file_get_contents('php://input'), и распарсить его через json_decode() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |