1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-05-22 10:05:29 +02:00

Начало CDEK

This commit is contained in:
Anton Titovets
2024-10-09 09:39:06 +03:00
parent f09913bb83
commit 47588e601a
10 changed files with 5183 additions and 4885 deletions
+4872 -4859
View File
File diff suppressed because it is too large Load Diff
+98
View File
@@ -0,0 +1,98 @@
// OneScript: ./OInt/core/Modules/OPI_CDEK.os
// Lib: CDEK
// CLI: cdek
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:LineLength-off
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
// Раскомментировать, если выполняется OneScript
#Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область ОбщиеМетоды
// Получить токен
// Получает токен на основе идентификатора аккаунта и пароля
//
// Примечание:
// Метод в документации API: [Авторизация клиентов](@api-docs.cdek.ru/29923918.html)
//
// Параметры:
// Аккаунт - Строка - Идентификатор клиента (Account) - account
// Пароль - Строка - Секретный ключ (Password) - pass
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьТокен(Знач Аккаунт, Знач Пароль, ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/oauth/token", ТестовыйAPI);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("grant_type" , "client_credentials", "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_id" , Аккаунт , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_secret", Пароль , "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, , Ложь);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СформироватьURL(Знач Метод, Знач ТестовыйAPI)
OPI_ПреобразованиеТипов.ПолучитьБулево(ТестовыйAPI);
Если ТестовыйAPI Тогда
URL = "https://api.edu.cdek.ru/v2";
Иначе
URL = "https://api.cdek.ru";
КонецЕсли;
URL = URL + Метод;
Возврат URL;
КонецФункции
#КонецОбласти
+1
View File
@@ -1,6 +1,7 @@
<package-def>
<module name="OPI_Airtable" file="core/Modules/OPI_Airtable.os"/>
<module name="OPI_Bitrix24" file="core/Modules/OPI_Bitrix24.os"/>
<module name="OPI_CDEK" file="core/Modules/OPI_CDEK.os"/>
<module name="OPI_Dropbox" file="core/Modules/OPI_Dropbox.os"/>
<module name="OPI_GoogleCalendar" file="core/Modules/OPI_GoogleCalendar.os"/>
<module name="OPI_GoogleDrive" file="core/Modules/OPI_GoogleDrive.os"/>
@@ -1984,6 +1984,20 @@
#КонецОбласти
#Область CDEK
Процедура СдэкАПИ_ОбщиеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("CDEK_Account" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("CDEK_Password" , ПараметрыТеста);
CDEK_ПолучитьТокен(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -13464,7 +13478,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13487,7 +13500,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайлы", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13506,19 +13518,16 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьВыбранныеФайлы", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
Результат = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, "/testfolder");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьВыбранныеФайлы (каталог 1)");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
Результат = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, "/test");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьВыбранныеФайлы (каталог 2)");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13552,7 +13561,6 @@
Результат = OPI_Neocities.ПолучитьДанныеОСайте(Токен);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьДанныеОСайте", "Neocities"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат); // SKIP
Результат = OPI_Neocities.ПолучитьДанныеОСайте(Токен, Сайт);
@@ -13560,7 +13568,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьДанныеОСайте (Сайт)");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13575,8 +13582,8 @@
// END
Результат["api_key"] = "***";
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТокен", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13593,13 +13600,34 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СинхронизироватьКаталоги", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НССинхронизация(Результат);
КонецПроцедуры
#КонецОбласти
#Область CDEK
Процедура CDEK_ПолучитьТокен(ПараметрыФункции)
Аккаунт = ПараметрыФункции["CDEK_Account"];
Пароль = ПараметрыФункции["CDEK_Password"];
Результат = OPI_CDEK.ПолучитьТокен(Аккаунт, Пароль, Истина);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТокен", "CDEK");
OPI_ПолучениеДанныхТестов.Проверка_СдэкТокен(Результат);
Токен = Результат["access_token"];
OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("CDEK_Token", Результат);
OPI_Инструменты.ДобавитьПоле("CDEK_Token", Токен, "Строка", ПараметрыФункции);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -64,6 +64,7 @@
Разделы.Вставить("VkTeams" , 5);
Разделы.Вставить("Ozon" , 5);
Разделы.Вставить("Neocities" , 5);
Разделы.Вставить("CDEK" , 5);
Возврат Разделы;
@@ -88,6 +89,7 @@
ВКТ = "VkTeams";
Озон = "Ozon";
Неоситиз = "Neocities";
Сдэк = "CDEK";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@@ -211,6 +213,7 @@
НовыйТест(ТаблицаТестов, "ОзонАПИ_РаботаСоСкладами" , "Работа со складами" , Озон);
НовыйТест(ТаблицаТестов, "НС_РаботаСФайлами" , "Работа с файлами" , Неоситиз);
НовыйТест(ТаблицаТестов, "НС_ПолучениеДанных" , "Получение данных" , Неоситиз);
НовыйТест(ТаблицаТестов, "СдэкАПИ_ОбщиеМетоды" , "ОбщиеМетоды" , Сдэк);
Возврат ТаблицаТестов;
@@ -1753,6 +1756,14 @@
КонецПроцедуры
Процедура Проверка_СдэкТокен(Знач Результат) Экспорт
ОжидаетЧто(Результат["access_token"]).Заполнено();
ОжидаетЧто(Результат["expires_in"]).Заполнено();
ОжидаетЧто(Результат["token_type"]).Заполнено();
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -1789,9 +1800,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции
@@ -1893,10 +1904,9 @@
КонецЕсли;
ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
// ФайлЛога = Новый Файл(ПутьКФайлу);
ФайлЛога = Новый Файл(ПутьКФайлу);
// Если Не ФайлЛога.Существует() Тогда
Если Истина Тогда
Если Не ФайлЛога.Существует() Тогда
ДокументЛога = Новый ТекстовыйДокумент;
ДокументЛога.УстановитьТекст(Данные);
ДокументЛога.Записать(ПутьКФайлу);
@@ -0,0 +1,98 @@
// OneScript: ./OInt/core/Modules/OPI_CDEK.os
// Lib: CDEK
// CLI: cdek
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:LineLength-off
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область ОбщиеМетоды
// Получить токен
// Получает токен на основе идентификатора аккаунта и пароля
//
// Примечание:
// Метод в документации API: [Авторизация клиентов](@api-docs.cdek.ru/29923918.html)
//
// Параметры:
// Аккаунт - Строка - Идентификатор клиента (Account) - account
// Пароль - Строка - Секретный ключ (Password) - pass
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьТокен(Знач Аккаунт, Знач Пароль, ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/oauth/token", ТестовыйAPI);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("grant_type" , "client_credentials", "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_id" , Аккаунт , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("client_secret", Пароль , "Строка", Параметры);
Ответ = OPI_Инструменты.Post(URL, Параметры, , Ложь);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СформироватьURL(Знач Метод, Знач ТестовыйAPI)
OPI_ПреобразованиеТипов.ПолучитьБулево(ТестовыйAPI);
Если ТестовыйAPI Тогда
URL = "https://api.edu.cdek.ru/v2";
Иначе
URL = "https://api.cdek.ru";
КонецЕсли;
URL = URL + Метод;
Возврат URL;
КонецФункции
#КонецОбласти
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e5232cd3-87cc-4942-bf6c-d52823affb45">
<name>OPI_CDEK</name>
<synonym>
<key>ru</key>
<value>CDEK (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -64,6 +64,7 @@
Разделы.Вставить("VkTeams" , 5);
Разделы.Вставить("Ozon" , 5);
Разделы.Вставить("Neocities" , 5);
Разделы.Вставить("CDEK" , 5);
Возврат Разделы;
@@ -88,6 +89,7 @@
ВКТ = "VkTeams";
Озон = "Ozon";
Неоситиз = "Neocities";
Сдэк = "CDEK";
ТаблицаТестов = Новый ТаблицаЗначений;
ТаблицаТестов.Колонки.Добавить("Метод");
@@ -211,6 +213,7 @@
НовыйТест(ТаблицаТестов, "ОзонАПИ_РаботаСоСкладами" , "Работа со складами" , Озон);
НовыйТест(ТаблицаТестов, "НС_РаботаСФайлами" , "Работа с файлами" , Неоситиз);
НовыйТест(ТаблицаТестов, "НС_ПолучениеДанных" , "Получение данных" , Неоситиз);
НовыйТест(ТаблицаТестов, "СдэкАПИ_ОбщиеМетоды" , "ОбщиеМетоды" , Сдэк);
Возврат ТаблицаТестов;
@@ -1753,6 +1756,14 @@
КонецПроцедуры
Процедура Проверка_СдэкТокен(Знач Результат) Экспорт
ОжидаетЧто(Результат["access_token"]).Заполнено();
ОжидаетЧто(Результат["expires_in"]).Заполнено();
ОжидаетЧто(Результат["token_type"]).Заполнено();
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -1893,10 +1904,9 @@
КонецЕсли;
ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
// ФайлЛога = Новый Файл(ПутьКФайлу);
ФайлЛога = Новый Файл(ПутьКФайлу);
// Если Не ФайлЛога.Существует() Тогда
Если Истина Тогда
Если Не ФайлЛога.Существует() Тогда
ДокументЛога = Новый ТекстовыйДокумент;
ДокументЛога.УстановитьТекст(Данные);
ДокументЛога.Записать(ПутьКФайлу);
@@ -1984,6 +1984,20 @@
#КонецОбласти
#Область CDEK
Процедура СдэкАПИ_ОбщиеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("CDEK_Account" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("CDEK_Password" , ПараметрыТеста);
CDEK_ПолучитьТокен(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -13464,7 +13478,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайл", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13487,7 +13500,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ЗагрузитьФайлы", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13506,19 +13518,16 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьВыбранныеФайлы", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
Результат = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, "/testfolder");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьВыбранныеФайлы (каталог 1)");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
Результат = OPI_Neocities.УдалитьВыбранныеФайлы(Токен, "/test");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьВыбранныеФайлы (каталог 2)");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13552,7 +13561,6 @@
Результат = OPI_Neocities.ПолучитьДанныеОСайте(Токен);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьДанныеОСайте", "Neocities"); // SKIP
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат); // SKIP
Результат = OPI_Neocities.ПолучитьДанныеОСайте(Токен, Сайт);
@@ -13560,7 +13568,6 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьДанныеОСайте (Сайт)");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13575,8 +13582,8 @@
// END
Результат["api_key"] = "***";
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТокен", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НСУспех(Результат);
КонецПроцедуры
@@ -13593,13 +13600,34 @@
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СинхронизироватьКаталоги", "Neocities");
OPI_ПолучениеДанныхТестов.Проверка_НССинхронизация(Результат);
КонецПроцедуры
#КонецОбласти
#Область CDEK
Процедура CDEK_ПолучитьТокен(ПараметрыФункции)
Аккаунт = ПараметрыФункции["CDEK_Account"];
Пароль = ПараметрыФункции["CDEK_Password"];
Результат = OPI_CDEK.ПолучитьТокен(Аккаунт, Пароль, Истина);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьТокен", "CDEK");
OPI_ПолучениеДанныхТестов.Проверка_СдэкТокен(Результат);
Токен = Результат["access_token"];
OPI_ПолучениеДанныхТестов.ЗаписатьПараметр("CDEK_Token", Результат);
OPI_Инструменты.ДобавитьПоле("CDEK_Token", Токен, "Строка", ПараметрыФункции);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецОбласти
@@ -61,6 +61,7 @@
<commonModules>CommonModule.OPI_VKTeams</commonModules>
<commonModules>CommonModule.OPI_Ozon</commonModules>
<commonModules>CommonModule.OPI_Neocities</commonModules>
<commonModules>CommonModule.OPI_CDEK</commonModules>
<commonModules>CommonModule.OPI_Тесты</commonModules>
<commonModules>CommonModule.OPI_ТестыCLI</commonModules>
<commonModules>CommonModule.OPI_ПолучениеДанныхТестов</commonModules>