Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Получение данных с сайта POST запросом API из 1с7.7 , Получение данных API с 4logist.com          
programm.ist Подменю пользователя
сообщение 26.03.19, 12:12
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день.
Получаю данные с сайта 4logist.com в 1С 7.7 (7.70.027, нетиповая Бухгалтерия).
По документации:
Авторизация и получение token
Пример получения access_token и refresh_token
http POST {domain}/oauth/v2/token grant_type=password client_id={you_key} client_secret={secret} username={login_in_system} password={password_in_system}
При корректном запросе в ответ придет json
"access_token": "{access_token}",
"expires_in": 3600,
"refresh_token": "{refresh_token}",
"scope": null,
"token_type": "bearer"

Данный этап отрабатывает без проблем:
Процедура ОтправитьЗапросТокена(Сервер)
    Соединение = СоздатьОбъект("Msxml2.ServerXMLHTTP.6.0");
    Соединение.Open("POST",Сервер+"oauth/v2/token?grant_type=password&client_id="
    +СокрЛП(you_key)
    +"&client_secret="
    +СокрЛП(secret)
    +"&username="
    +СокрЛП(login_in_system)
    +"&password="
    +СокрЛП(password_in_system)
    );
    Соединение.Send();
    Ответ = Соединение.ResponseText();
    СохранениеОтвета        = СоздатьОбъект("Adodb.Stream");
    СохранениеОтвета.Type    = 2;
    СохранениеОтвета.Mode    = 3;
    СохранениеОтвета.charset="utf-8";
    СохранениеОтвета.Open();
    СохранениеОтвета.WriteText(Ответ);
    СохранениеОтвета.SaveToFile(ФайлТокена,2);
    СохранениеОтвета.Close();
КонецПроцедуры

По документации:
Пример получения данных о заказе
http POST {domain}/api/orders/list limit=1 sort=asc "Authorization:Bearer {access_token}"

Данный код без параметров отрабатывает:
Процедура ОтправитьЗапросЗаказа(СписокТокена, Ресурс, Фильтр, ДопДанные="")
    Путь = Ресурс + Фильтр;
    СтрокаТокен = "Bearer " + СписокТокена.Получить("access_token");
    Соединение = СоздатьОбъект("Msxml2.ServerXMLHTTP");
    Соединение.Open("POST", Путь, 0);
    //Соединение.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    Соединение.setRequestHeader("Authorization", СтрокаТокен);
    Соединение.Send();
    Ответ = Соединение.ResponseText();
    //Текст = СоздатьОбъект("Текст");
    //Текст.ДобавитьСтроку(Ответ);
    //Текст.Записать(ФайлОтвета);
    
    СохранениеОтвета = СоздатьОбъект("Adodb.Stream");
    СохранениеОтвета.Type = 2;
    СохранениеОтвета.Mode = 3;
    СохранениеОтвета.charset = "utf-8";
    СохранениеОтвета.Open();
    СохранениеОтвета.WriteText(Ответ);
    СохранениеОтвета.SaveToFile(ФайлОтвета,2);
    СохранениеОтвета.Close();
КонецПроцедуры

Но в Ответе содержится текст в такой кодировке:
Цитата
"order_code_referral":"58 \u043e\u0442 01.03.2019"

Пробовал устанавливать различные заголовки - не помогло.
Подскажите, каких данных не хватает для правильной кодировки ответа?





Naghual Подменю пользователя
сообщение 26.03.19, 12:20
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 102
Из: Днепропетровск
Спасибо сказали: 21 раз
Рейтинг: 0

Так это корректный UTF-8 как и указано в коде )


Signature
Я желаю всем Счастья!

programm.ist Подменю пользователя
сообщение 26.03.19, 15:01
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Naghual @ 26.03.19, 12:20) *
Так это корректный UTF-8 как и указано в коде )

Ткните носом, плиз - как мне тогда указать параметры, чтобы получить в ответе и кириллицу?

mut Подменю пользователя
сообщение 26.03.19, 19:44
Сообщение #4

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

programm.ist @ Сегодня, 15:01 * ,
Например простой заменой, вот список символов (код из восьмерки, так что для 77 нужно переделать, но смысл понятен)
    СписокСимволов = Новый СписокЗначений;
    СписокСимволов.Добавить("\u0430", "а");
    СписокСимволов.Добавить("\u0431", "б");
    СписокСимволов.Добавить("\u0432", "в");
    СписокСимволов.Добавить("\u0433", "г");
    СписокСимволов.Добавить("\u0434", "д");
    СписокСимволов.Добавить("\u0435", "е");
    СписокСимволов.Добавить("\u0451", "ё");
    СписокСимволов.Добавить("\u0436", "ж");
    СписокСимволов.Добавить("\u0437", "з");
    СписокСимволов.Добавить("\u0438", "и");
    СписокСимволов.Добавить("\u0439", "й");
    СписокСимволов.Добавить("\u043a", "к");
    СписокСимволов.Добавить("\u043b", "л");
    СписокСимволов.Добавить("\u043c", "м");
    СписокСимволов.Добавить("\u043d", "н");
    СписокСимволов.Добавить("\u043e", "о");
    СписокСимволов.Добавить("\u043f", "п");
    СписокСимволов.Добавить("\u0440", "р");
    СписокСимволов.Добавить("\u0441", "с");
    СписокСимволов.Добавить("\u0442", "т");
    СписокСимволов.Добавить("\u0443", "у");
    СписокСимволов.Добавить("\u0444", "ф");
    СписокСимволов.Добавить("\u0445", "х");
    СписокСимволов.Добавить("\u0446", "ц");
    СписокСимволов.Добавить("\u0447", "ч");
    СписокСимволов.Добавить("\u0448", "ш");
    СписокСимволов.Добавить("\u0448", "щ");
    СписокСимволов.Добавить("\u044a", "ъ");
    СписокСимволов.Добавить("\u044b", "ы");
    СписокСимволов.Добавить("\u044c", "ь");
    СписокСимволов.Добавить("\u044d", "э");
    СписокСимволов.Добавить("\u044e", "ю");
    СписокСимволов.Добавить("\u044f", "я");
    
    СписокСимволов.Добавить("\u0410", "А");
    СписокСимволов.Добавить("\u0411", "Б");
    СписокСимволов.Добавить("\u0412", "В");
    СписокСимволов.Добавить("\u0413", "Г");
    СписокСимволов.Добавить("\u0414", "Д");
    СписокСимволов.Добавить("\u0415", "Е");
    СписокСимволов.Добавить("\u0401", "Ё");
    СписокСимволов.Добавить("\u0416", "Ж");
    СписокСимволов.Добавить("\u0417", "З");
    СписокСимволов.Добавить("\u0418", "И");
    СписокСимволов.Добавить("\u0419", "Й");
    СписокСимволов.Добавить("\u041a", "К");
    СписокСимволов.Добавить("\u041b", "Л");
    СписокСимволов.Добавить("\u041c", "М");
    СписокСимволов.Добавить("\u041d", "Н");
    СписокСимволов.Добавить("\u041e", "О");
    СписокСимволов.Добавить("\u041f", "П");
    СписокСимволов.Добавить("\u0420", "Р");
    СписокСимволов.Добавить("\u0421", "С");
    СписокСимволов.Добавить("\u0422", "Т");
    СписокСимволов.Добавить("\u0423", "У");
    СписокСимволов.Добавить("\u0424", "Ф");
    СписокСимволов.Добавить("\u0425", "Х");
    СписокСимволов.Добавить("\u0426", "Ц");
    СписокСимволов.Добавить("\u0427", "Ч");
    СписокСимволов.Добавить("\u0428", "Ш");
    СписокСимволов.Добавить("\u0428", "Щ");
    СписокСимволов.Добавить("\u042a", "Ъ");
    СписокСимволов.Добавить("\u042b", "Ы");
    СписокСимволов.Добавить("\u042c", "Ь");
    СписокСимволов.Добавить("\u042d", "Э");
    СписокСимволов.Добавить("\u042e", "Ю");
    СписокСимволов.Добавить("\u042f", "Я");

Спасибо сказали: programm.ist,

programm.ist Подменю пользователя
сообщение 27.03.19, 8:25
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

mut @ Вчера, 19:44 * ,
Спасибо, добавил функцию с заменой.
И тогда сразу следующий вопрос. который также самостоятельно не смог решить.
По документации:

Данный Путь отрабатывает:
/api/orders/list?form_order_api_filter[dateFrom]=19-03-15&form_order_api_filter[dateTo]=19-03-15
Адрес с установленным в интерфейсе фильтром:
/order/list?filter[start_date]=15.03.2019&filter[end_date]=15.03.2019
из кода:
Соединение = СоздатьОбъект("Msxml2.ServerXMLHTTP");
Соединение.Open("POST", Путь, 0);
Соединение.setRequestHeader("Authorization", СтрокаТокен);
Соединение.Send();

Не отрабатывает данный Путь, т.е. получает все данные без учета параметров:
/api/orders/list?form_order_api_filter[unloadingDate]=19-03-15
Адрес с установленным в интерфейсе фильтром:
/order/list?filter[unloading_date_from]=15.03.2019&filter[unloading_date_to]=15.03.2019

Что я неправильно пишу?

mut Подменю пользователя
сообщение 27.03.19, 10:30
Сообщение #6

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

programm.ist @ Сегодня, 8:25 * ,
из этого скрина непонятно, как передавать параметры и из кода непонятно, как они у вас передаются. Возможно просто проблема в синтаксисе запроса.

programm.ist Подменю пользователя
сообщение 27.03.19, 12:00
Сообщение #7

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

mut @ Сегодня, 10:30 * ,
Добрый день.
Постараюсь уточнить, какая информация у меня имеется, к вышеуказанной.
Есть локальная страница HTML с документацией, но не знаю - как её сюда прикрепить faceoff.gif
1. Пример кода на PHP, взято из документации:
<?php
class API
{
    private $domain = "";
    private $access_token = null;
    private $refresh_token = null;
    public function connect($domain,$client_id,$client_secret,$username,$password)
    {
        $this->domain = $domain;
        $result = json_decode(file_get_contents("http://{$domain}/oauth/v2/token?grant_type=password&client_id={$client_id}&client_secret={$client_secret}&username={$username}&password={$password}"),true);
        if(!$result)throw new Exception("Not connect");
        $this->access_token = $result["access_token"];
        $this->refresh_token = $result["refresh_token"];
    }

    public function request($apiUrl,$params = "")
    {
         $curl = curl_init();
         if(!empty($params))$params = "?".$params;
         curl_setopt_array($curl,
              [
                  CURLOPT_URL => "http://{$this->domain}{$apiUrl}{$params}",
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_ENCODING => "",
                  CURLOPT_MAXREDIRS => 10,
                  CURLOPT_TIMEOUT => 30,
                  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                  CURLOPT_CUSTOMREQUEST => "POST",
                  CURLOPT_HTTPHEADER =>
                  [
                      "authorization: Bearer {$this->access_token}",
                      "cache-control: no-cache"
                  ],
              ]);


         $response = curl_exec($curl);
         $err = curl_error($curl);
         curl_close($curl);

         if ($err) {
             throw new Exception("cURL Error #:" . $err);
         } else {
             return json_decode($response,true);
         }
    }
}

$api = new API();
$api->connect("domain","client_id", "secret","user","password");
$result = $api->request("/api/place/list","place=Москва");
print_r($result);

2. Собственно, код в 1С:
    Соединение = СоздатьОбъект("Msxml2.ServerXMLHTTP");

    //// Получение данных о заказах
    //Путь = "https://"+Сервер+".4logist.com/api/orders/list";
    //// Получение данных о заказах, созданных за 15.03.2019
    //Путь = "https://"+Сервер+".4logist.com/api/orders/list?form_order_api_filter[dateFrom]=19-03-15&form_order_api_filter[dateTo]=19-03-15";
    ////адресная строка в браузере: /order/list?filter[start_date]=15.03.2019&filter[end_date]=15.03.2019
    // Получение данных о заказе № 1903228
    Путь = "https://"+Сервер+".4logist.com/api/orders/list?form_order_api_filter[invoiceNumber]=1903228";
    //// Получение данных о заказах, разгруженных 15.03.2019
    //Путь = "https://"+Сервер+".4logist.com/api/orders/list?form_order_api_filter[unloadingDate]=19-03-15";    // не работает!!!
    ////адресная строка в браузере: /order/list?filter[unloading_date_from]=15.03.2019&filter[unloading_date_to]=15.03.2019
    
    Соединение.Open("POST", Путь, 0);
    Соединение.setRequestHeader("Authorization", "Bearer " + СписокТокена.Получить("access_token"));
    Соединение.Send();

3. Данные из документации по фильтрам и параметрам при получении заказов:
/api/orders/list                
POST /api/orders/list                 
                
[b]Documentation[/b]
[i]Получить список заказов    [/i]        
    
Filters    
            
Name        Information    
        
limit            Datatype    integer        
            Pattern    max=100        
sort            Datatype    string        
            Pattern    ASC|DESC        

Parameters
                
Parameter                        Type                    Required?    Format        Description

form_order_api_filter                object(OrderApiFilterType)    true        
form_order_api_filter[dateFrom]        date                    false        yyyy-MM-dd    Дата с
form_order_api_filter[dateTo]        date                    false        yyyy-MM-dd    Дата до
form_order_api_filter[loadingDate]    date                    false        yyyy-MM-dd    Дата загрузки
form_order_api_filter[unloadingDate]    date                    false        yyyy-MM-dd    Дата разгрузки
form_order_api_filter[orderCode]        string                false                    Код заказа
form_order_api_filter[clientId]        float                    false                    Id клиента
form_order_api_filter[orderId]        float                    false                    Id заказа
form_order_api_filter[dateInvoice]    date                    false        yyyy-MM-dd    Счет выписан с
form_order_api_filter[dateInvoiceTo]    date                    false        yyyy-MM-dd    Счет выписан до
form_order_api_filter[invoiceNumber]    string                false                    Номер выставленного счета
form_order_api_filter[requestNumber]    string                false                    Номер заявки
form_order_api_filter[contractNumber]    string                false                    Номер договора
form_order_api_filter[cmrNumber]        string                false                    Номер CMR
form_order_api_filter[actNumber]        string                false                    Номер акта
form_order_api_filter[dateAct]        date                    false        yyyy-MM-dd    Дата акта
form_order_api_filter[carNumber]        string                false                    Номер авто
form_order_api_filter[trailerNumber]    string                false                    Номер прицепа
form_order_api_filter[apiExtranetId]    string                false                    Пользовательский id
form_order_api_filter[orderStatus]    choice                false                    Статус заказа
form_order_api_filter[company]        choice                false                    Компания
                
Status Codes                
                
Status Code    Description
            
200        Returned when successful            
                
500        Returned when the form has errors

mut Подменю пользователя
сообщение 27.03.19, 12:37
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 199
Из: Новая Каховка
Спасибо сказали: 203 раз
Рейтинг: 237.5

programm.ist @ Сегодня, 12:00 * ,
а если дату передать в виде 2019-03-15 ?

programm.ist Подменю пользователя
сообщение 27.03.19, 14:44
Сообщение #9

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

mut @ Сегодня, 12:37 * ,
Путь = "https://"+Сервер+".4logist.com/api/orders/list?form_order_api_filter[unloadingDate]=2019-03-15";

- тот же результат - данные о разгруженных заказах получаю без фильтра.
При этом рабочие запросы работают и с новым форматом даты:
Путь = "https://"+Сервер+".4logist.com/api/orders/list?form_order_api_filter[dateFrom]=2019-03-15&form_order_api_filter[dateTo]=2019-03-15";

- фильтр по заказам, созданным 15.03.2019 работает.

[необходимо зарегистрироваться для просмотра ссылки]

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.03.24, 8:02
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!