Имя: Пароль:
1C
1С v8
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()
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший