8.х POST-запрос (yii framework)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем 1с-ник, 30 окт 2017.

  1. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    У меня похожая проблема, правда сервер говорит, что поля не заполнены, хотя я их заполняю!

    Код:
        HTTPСоединение = Новый HTTPСоединение(Сервер, 80);
     
        Телефоны = Новый Массив;
        Телефоны.Добавить(Новый Структура("type, number", 1, Телефон));
        Клиент = Новый Структура("lastname, middleName, firstName, phones", Фамилия, Имя, Отчество, Телефоны);
     
        //сериализуем в json
        ЗаписьJSON = Новый ЗаписьJSON;
        ЗаписьJSON.УстановитьСтроку();
        ЗаписатьJSON(ЗаписьJSON, Клиент);
        СтрокаДляТела = ЗаписьJSON.Закрыть();
     
        ФайлТелаЗапроса = ПолучитьИмяВременногоФайла();
        ТекстФайл = Новый ТекстовыйДокумент;
        ТекстФайл.УстановитьТекст(СтрокаДляТела);
        ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.UTF8);
     
        ЗаголовокЗапросаHTTP = Новый Соответствие();
        ЗаголовокЗапросаHTTP.Вставить("Authorization", ПолучитьСтрокуАвторизации());
        ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
    
        ЗапросHTTP = Новый HTTPЗапрос(URL + "?type=individual", ЗаголовокЗапросаHTTP);
        ЗапросHTTP.УстановитьИмяФайлаТела(ФайлТелаЗапроса);
    
        ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(ЗапросHTTP);
    
    ТелоЗапроса:
    Код:
    {
    "lastname": "Иванов",
    "middleName": "Евгений",
    "firstName": "Александрович",
    "phones": [
    {
    "type": 1,
    "number": "79520903333"
    }
    ]
    }
    
    
    Ответ всегда один:
    {"success":false,"errors":{"firstName":["Необходимо заполнить поле «Имя»."],"phones":["Укажите номер телефона или email"]}}
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    не дезинформируй.. ) у тебя вообще не о том речь.. )
  3. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    Так у меня тож самое:) Передавать - передаю, а он говорит, что нет
    --- Объединение сообщений, 30 окт 2017 ---
    Через встроенный конструктор сей JSON работает! А из 1с нет.

    Вложения:

  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    нет не то же.. у Svb дело в кривоватом api (рукожопстве api писателей). И в том как передать параметр.

    А ты сказал что с моделью разобрался (частично). api у тебя нормальное, и параметры нормально передаются. Просто выясни актуальную версию модели обмена.
  5. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    От техподдержки ответ голубями летит :(
    Вот модель:
    Код:
    {
      "id": 0,
      "createdAt": "string",
      "creatorId": 0,
      "type": "string",
      "primaryPersonId": 0,
      "primaryPerson": {
        "id": 0,
        "lastName": "string",
        "firstName": "string",
        "middleName": "string",
        "addressId": 0,
        "email": "string",
        "gender": "string",
        "birthday": "string",
        "driverLicenseNumber": "string",
        "driverLicenseIssuedBy": "string",
        "driverLicenseIssuedAt": "string",
        "passportSeries": "string",
        "passportNumber": "string",
        "passportIssuedAt": "string",
        "passportIssuedBy": "string",
        "passportDepartmentCode": "string",
        "consentProcessingPersonalInformation": "string",
        "consentObtainingSmsMailing": "string",
        "phones": [
          {
            "id": 0,
            "type": 0,
            "number": "string"
          }
        ],
        "address": {
          "id": 0,
          "zipCode": "string",
          "region": "string",
          "city": "string",
          "street": "string",
          "house": "string",
          "building": "string",
          "apartment": "string"
        }
      },
      "persons": [
        {
          "id": 0,
          "lastName": "string",
          "firstName": "string",
          "middleName": "string",
          "addressId": 0,
          "email": "string",
          "gender": "string",
          "birthday": "string",
          "driverLicenseNumber": "string",
          "driverLicenseIssuedBy": "string",
          "driverLicenseIssuedAt": "string",
          "passportSeries": "string",
          "passportNumber": "string",
          "passportIssuedAt": "string",
          "passportIssuedBy": "string",
          "passportDepartmentCode": "string",
          "consentProcessingPersonalInformation": "string",
          "consentObtainingSmsMailing": "string",
          "phones": [
            {
              "id": 0,
              "type": 0,
              "number": "string"
            }
          ],
          "address": {
            "id": 0,
            "zipCode": "string",
            "region": "string",
            "city": "string",
            "street": "string",
            "house": "string",
            "building": "string",
            "apartment": "string"
          }
        }
      ],
      "vehicles": [
        {
          "id": 0,
          "client_id": 0,
          "brand_id": 0,
          "model_id": 0,
          "reg_number": "string",
          "vin": "string",
          "mileage": 0,
          "bought_at": "string",
          "production_year": 0,
          "generation_id": 0,
          "series_id": 0,
          "modification_id": 0,
          "warranty_start_at": "string",
          "warranty_end_at": "string",
          "service_period": 0,
          "service_auto_class_id": 0,
          "seller_id": 0,
          "model": {
            "id": 0,
            "brand_id": 0,
            "name": "string"
          },
          "brand": {
            "id": 0,
            "name": "string"
          },
          "seller": {
            "id": 0,
            "name": "string"
          },
          "generation": {
            "id_car_generation": 0,
            "name": "string"
          },
          "series": {
            "id_car_serie": 0,
            "id_car_generation": 0,
            "name": "string"
          },
          "modification": {
            "id_car_modification": 0,
            "id_car_serie": 0,
            "id_car_generation": 0,
            "name": "string"
          }
        }
      ]
    }
    --- Объединение сообщений, 30 окт 2017 ---
    Но проблема то получается во мне, причем тут модель? Ведь конструктором все работает, клиент создался.
  6. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    Я пробовал передать этот JSON тупо в теле, и как параметр ("client=" + СтрокаТелаJSON), но результат одинаковый.

    Вложения:

  7. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    Svb, у меня аналогичная проблема :)
  8. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    А у меня все равно не пашет, у меня в АПИ сказано, что "Content-Type" = "application/json"
  9. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    1.090
    Симпатии:
    23
    Баллы:
    29
    Давай выкладывай заново ТекстДляТела (из отладчика), код которым отправляешь тело и результат. Может углядим что-нибудь.
  10. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    Код:
        HTTPСоединение = Новый HTTPСоединение("хххcrm.ru", 80);
        Телефоны = Новый Массив;
        Телефоны.Добавить(Новый Структура("type, number", 1, Телефон));
        Клиент = Новый Структура("lastname, middleName, firstName, phones", Фамилия, Имя, Отчество, Телефоны);
      
        //сериализуем в json
        ЗаписьJSON = Новый ЗаписьJSON;
        ЗаписьJSON.УстановитьСтроку();
        ЗаписатьJSON(ЗаписьJSON, Клиент);
        СтрокаДляТела = ЗаписьJSON.Закрыть();
      
        ЗаголовокЗапросаHTTP = Новый Соответствие();
        ЗаголовокЗапросаHTTP.Вставить("Authorization", ПолучитьСтрокуАвторизации());
        ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
      
        ЗапросHTTP = Новый HTTPЗапрос(URL + "?type=individual", ЗаголовокЗапросаHTTP);
        ЗапросHTTP.УстановитьТелоИзСтроки("client="+СтрокаДляТела, КодировкаТекста.UTF8);
      
        ФайлОтвета = ПолучитьИмяВременногоФайла();
     
        ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(ЗапросHTTP, ФайлОтвета);
    
    
    Пробовал и без "client=" отправлять - та же чертовщина!
    полный урл - http://хххcrm.ru/yii/api/client?type=individual
    Тело запроса:
    Код:
    client={
    "lastname": "Иванов",
    "middleName": "Евгений",
    "firstName": "Александрович",
    "phones": [
    {
    "type": 1,
    "number": "79520903333"
    }
    ]
    }
    Дублирую описание параметров:
    2017-10-30_16-44-03.png
  11. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    1.090
    Симпатии:
    23
    Баллы:
    29
    Ты так и не выложил отправляемый текст, и текст ответа.
    --- Объединение сообщений, 31 окт 2017 ---
    Отправляемый вижу )
    --- Объединение сообщений, 31 окт 2017 ---
    А эту часть передавать не надо?
    А параметр "type" ты передаешь?
  12. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    Тайп я передаю в самом запросе, как на сткриншоте с параметрами я показал.
    Текст ответа всегда один и тот же:
    Будь текст запроса пустой или передаю JSON некого формата - ответ один. Видимо он вообще не алёша
  13. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.685
    Симпатии:
    1.011
    Баллы:
    204
    Да жеванный крот :)

    Код:
        ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
        ИмяФайлаЗапроса    = ПолучитьИмяВременногоФайла();
      
        НТТР = Новый HTTPСоединение("xxxcrm.ru");
      
        Заголовки = Новый Соответствие;
        Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
        Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
        .....
      
        ЗаписьJSON = Новый ЗаписьJSON;
        ЗаписьJSON.ОткрытьФайл(ИмяФайлаЗапроса);
    
        //тут формируем значение-структуру из структур/массивов/соответствий
    
        ЗаписатьJSON(ЗаписьJSON, <Значение-Структура>);
      
        ЗаписьJSON.Закрыть();
      
        Попытка
            НТТР.ОтправитьДляОбработки(ИмяФайлаЗапроса, "/yii/api/client", ИмяФайлаОтвета, Заголовки);  
        Исключение
            СообщениеПользователю = Новый СообщениеПользователю;
            СообщениеПользователю.Текст = "Ошибка: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
            СообщениеПользователю.Сообщить();
            Возврат;
        КонецПопытки;
      
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.ОткрытьФайл(ИмяФайлаОтвета);
      
        ПотокJSON = ПрочитатьJSON(ЧтениеJSON);
      
        ЧтениеJSON.Закрыть();
              
        УдалитьФайлы(ИмяФайлаЗапроса);
        УдалитьФайлы(ИмяФайлаОтвета);
    
  14. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    И что это? Во-первых нет передачи параметра type, во вторых чем у меня хуже? В третьих, заголовок с "application/x-www-form-urlencoded" тут ни к чему, в четвертых у меня http
  15. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.685
    Симпатии:
    1.011
    Баллы:
    204
    Если ничем не отличается, разбирайся сам.....
  16. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    1с-ник чет ты как-то вообще не так все делаешь. У тебя вот есть приблуда для тестирования запросов к этому сайту. Ты там создай пример своих тестовых данных и добейся чтобы там ответ нормально приходил. А потом уже в 1С это суй. А то у тебя там ошибку возвращает, ты я так понял с ней не разобрался и в 1С начинаешь программировать, а что программируешь то?
  17. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    Нет, я же написал потом, что конструктором работает! Просто структура JSON была другая.
    Я изначально пытался структуру тела запроса сделать как в модели описано. Мучался полдня, но неожиданно случилась "Эврика", и я попробовал передать новую структуру.

    Теперь я умею создавать клиентов через этот тест-помощник. Но через 1с всё равно не могу.
  18. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    эм... ок.. хорошо.
    вопрос 1) а может дело все же в модели? (ну я к тому что не твое самописное надо, а так как фрэймворк все таки хочет)
    вопрос 2) на текущий момент какая ошибка при обращении к сервису?
  19. TopicStarter Overlay
    1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    163
    Баллы:
    104
    1) видимо в модели тоже имеется проблема, но это уже другая проблема. С ней я пойду к ТП.
    2) Нет, ошибку я описал.
    Документация:
    Ответ я получаю, код ответа 200, но "саксес = фолс", список ошибок я указал:
    Эмпирически выяснил, то эти ошибки будут даже если передать пустое тело.
    Сделал вывод, что некорректно передаю или какой-то подводный камень.
  20. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104
    Т.е. ты не можешь в тестовой среде сформировать нужный запрос, поскольку не знаешь формат, но что-то там программируешь в 1С. Ты прикалываешься что-ли?

    Вот это - формат запроса или ответа сервиса? Я так понимаю что ответ. Ответ тебе в данную минуту для чего?
    Чтобы отправить что-то фрейворку тебе нужно знать формат запроса. Когда получишь success будешь уже парсить ответ.
Похожие темы
  1. Iwashka
    Ответов:
    5
    Просмотров:
    2.813
  2. Vladius
    Ответов:
    31
    Просмотров:
    15.397
  3. kisol
    Ответов:
    12
    Просмотров:
    2.920
Загрузка...