1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-11-25 22:12:29 +02:00
Files
OpenIntegrations/XML/CommonModules/OPI_CDEK/Ext/Module.bsl
Vitaly the Alpaca (bot) cdef2d02ab Main build (Jenkins)
2025-10-21 21:43:05 +03:00

1334 lines
86 KiB
Plaintext

// OneScript: ./OInt/core/Modules/OPI_CDEK.os
// Lib: CDEK
// CLI: cdek
// Keywords: cdek
// MIT License
// Copyright (c) 2023-2025 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
// BSLLS:UsingSynchronousCalls-off
// BSLLS:MagicNumber-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
#Область ПрограммныйИнтерфейс
#Область ОбщиеМетоды
// Получить токен
// Получает токен на основе идентификатора аккаунта и пароля
//
// Примечание:
// Метод в документации 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_ЗапросыHTTP.PostСТелом(URL, Параметры, , Ложь);
Возврат Ответ;
КонецФункции
// Получить чеки на дату
// Получает информацию о чеках за указанную дату
//
// Примечание:
// Метод в документации API: [Информация о чеке](@api-docs.cdek.ru/68257388.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// ДатаПолучения - Дата - Дата, за которую необходимо получить данные - date
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьЧекиНаДату(Знач Токен, Знач ДатаПолучения, Знач ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/check", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("date", ДатаПолучения, "ДатаБезВремени", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить реестры платежей на дату
// Полуает реестры наложенных платежей, по которым клиенту был переведен платеж
//
// Примечание:
// Метод в документации API: [Информация о реестрах наложенных платежей](@api-docs.cdek.ru/107254706.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// ДатаПолучения - Дата - Дата, за которую необходимо получить данные - date
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьРеестрыПлатежейНаДату(Знач Токен, Знач ДатаПолучения, Знач ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/registries", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("date", ДатаПолучения, "ДатаБезВремени", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить переводы платежей на дату
// Получает информацию о заказах, по которым был переведен наложенны платеж интернет магазину
//
// Примечание:
// Метод в документации API: [Информация о переводе наложенного платежа](@api-docs.cdek.ru/71059888.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// ДатаПолучения - Дата - Дата, за которую необходимо получить данные - date
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьПереводыПлатежейНаДату(Знач Токен, Знач ДатаПолучения, Знач ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/payment", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("date", ДатаПолучения, "ДатаБезВремени", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить список офисов
// Получает список офисов с фильтром или без
//
// Примечание:
// Метод в документации API: [Список офисов](@api-docs.cdek.ru/36982648.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// Фильтр - Структура Из КлючИЗначение - Фильтр офисов. См. ПолучитьОписаниеФильтраОфисов - filter
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьСписокОфисов(Знач Токен, Знач Фильтр = "", Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Фильтр);
URL = СформироватьURL("/deliverypoints", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Get(URL, Фильтр, Заголовки);
Возврат Ответ;
КонецФункции
// Получить список регионов
// Получает список доступных регионов
//
// Примечание:
// Метод в документации API: [Список регионов](@api-docs.cdek.ru/33829418.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// Страны - Массив Из Строка - Массив кодов стран в формате ISO_31661_alpha2 для отбора - countries
// Страница - Число - Страница выборки результата - page
// Язык - Строка - Язык: rus, eng, zho - lang
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьСписокРегионов(Знач Токен
, Знач Страны = Неопределено
, Знач Страница = 0
, Знач Язык = "rus"
, Знач ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/location/regions", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("country_codes", Страны , "Массив", Параметры);
OPI_Инструменты.ДобавитьПоле("page" , Страница, "Число" , Параметры);
OPI_Инструменты.ДобавитьПоле("lang" , Язык , "Строка", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить описание фильтра офисов
// Получает пустой макет фильтра получения списка офисов в функции ПолучитьСписокОфисов
//
// Примечание:
// Обязательность реквизитов может зависить от типа зказа или вложенности. Обязательно ознакомьтесь с документацией CDEK
// Описания полей в документации: [Список офисов](@api-docs.cdek.ru/36982648.html)
//
// Параметры:
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура полей
Функция ПолучитьОписаниеФильтраОфисов(Знач Пустая = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("postal_code" , "<Почтовый индекс города, для которого необходим список офисов>");
СтруктураФильтра.Вставить("city_code" , "<Код населенного пункта СДЭК>");
СтруктураФильтра.Вставить("type" , "<Тип офиса: PVZ, POSTAMAT, ALL>");
СтруктураФильтра.Вставить("country_code" , "<Код страны в формате ISO_3166-1_alpha-2>");
СтруктураФильтра.Вставить("region_code" , "<Код региона по базе СДЭК>");
СтруктураФильтра.Вставить("have_cashless" , "<Наличие терминала оплаты>");
СтруктураФильтра.Вставить("have_cash" , "<Есть прием наличных>");
СтруктураФильтра.Вставить("allowed_cod" , "<Разрешен наложенный платеж>");
СтруктураФильтра.Вставить("is_dressing_room", "<Наличие примерочной>");
СтруктураФильтра.Вставить("weight_max" , "<Максимальный вес в кг, который может принять офис>");
СтруктураФильтра.Вставить("weight_min" , "<Минимальный вес в кг, который принимает офис>");
СтруктураФильтра.Вставить("lang" , "<Локализация офиса>");
СтруктураФильтра.Вставить("take_only" , "<Является ли офис только пунктом выдачи>");
СтруктураФильтра.Вставить("is_handout" , "<Является пунктом выдачи>");
СтруктураФильтра.Вставить("is_reception" , "<Есть ли в офисе приём заказов>");
СтруктураФильтра.Вставить("fias_guid" , "<Код города ФИАС>");
СтруктураФильтра.Вставить("code" , "<Код ПВЗ>");
СтруктураФильтра.Вставить("is_ltl" , "<Работает ли офис с LTL>");
СтруктураФильтра.Вставить("fulfillment" , "<Работает ли офис с Фулфилмент.Приход>");
СтруктураФильтра.Вставить("size" , "<Ограничение выборки результата>");
СтруктураФильтра.Вставить("page" , "<Номер страницы выборки результата>");
Если Пустая Тогда
СтруктураФильтра = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураФильтра);
КонецЕсли;
//@skip-check constructor-function-return-section
Возврат СтруктураФильтра;
КонецФункции
#КонецОбласти
#Область РаботаСЗаказми
// Создать заказ
// Создает заказ по описанию полей
//
// Примечание:
// Метод в документации API: [Регистрация заказа](@api-docs.cdek.ru/29923926.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// ОписаниеЗаказа - Структура Из КлючИЗначение - Набор полей заказа. См. ПолучитьОписаниеЗаказа - order
// ИнтернетМагазин - Булево - Признак типа заказа Интернет магазин - ostore
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция СоздатьЗаказ(Знач Токен, Знач ОписаниеЗаказа, Знач ИнтернетМагазин = Ложь, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеЗаказа);
OPI_ПреобразованиеТипов.ПолучитьБулево(ИнтернетМагазин);
URL = СформироватьURL("/orders", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
OPI_Инструменты.ДобавитьПоле("type", ?(ИнтернетМагазин, 1, 2), "Число", ОписаниеЗаказа);
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, ОписаниеЗаказа, Заголовки);
Возврат Ответ;
КонецФункции
// Изменить заказ
// Изменяет значения полей выбранного заказа
//
// Примечание:
// Метод в документации API: [Изменение заказа](@api-docs.cdek.ru/36981178.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа для изменение - uuid
// ОписаниеЗаказа - Структура Из КлючИЗначение - Набор изменяемых полей заказа - order
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ИзменитьЗаказ(Знач Токен, Знач UUID, Знач ОписаниеЗаказа, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеЗаказа);
URL = СформироватьURL("/orders", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
OPI_Инструменты.ДобавитьПоле("uuid", UUID, "Строка", ОписаниеЗаказа);
Ответ = OPI_ЗапросыHTTP.PatchСТелом(URL, ОписаниеЗаказа, Заголовки);
Возврат Ответ;
КонецФункции
// Удалить заказ
// Удаляет заказ по UUID
//
// Примечание:
// Метод в документации API: [Удаление заказа](@api-docs.cdek.ru/29924487.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа для удаления - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция УдалитьЗаказ(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/orders/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Delete(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Получить заказ
// Получает заказ по UUID
//
// Примечание:
// Метод в документации API: [Информация о заказе](@api-docs.cdek.ru/29923975.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьЗаказ(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/orders/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Получить заказ по номеру
// Получает заказ по номеру СДЭК или внутреннему номеру клиента
//
// Примечание:
// Метод в документации API: [Информация о заказе](@api-docs.cdek.ru/29923975.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// НомерЗаказа - Строка - Номер заказа - number
// Внутренний - Булево - Вид номера заказа. Истина > номер в базе клиента, Ложь > номер СДЭК - internal
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьЗаказПоНомеру(Знач Токен, Знач НомерЗаказа, Знач Внутренний = Ложь, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(Внутренний);
URL = СформироватьURL("/orders", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
ИмяПараметра = ?(Внутренний, "im_number", "cdek_number");
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле(ИмяПараметра, НомерЗаказа, "Строка", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Оформить клиентский возврат
// Оформляет клиентский возврат для заказа интернет магазина
//
// Примечание:
// Этот метод используется в случае, если прямой заказ доставлялся СДЭК и получатель хочет вернуть его полностью
// Если заказ доставлялся другой службой, либо нужно вернуть не все товары, то необходимо использовать метод СоздатьЗаказ с is_client_return = true
// Метод в документации API: [Клиентские возвраты](@api-docs.cdek.ru/122762174.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа - uuid
// Тариф - Число - Код тарифа (из доступных по договору) - tariff
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ОформитьКлиентскийВозврат(Знач Токен, Знач UUID, Знач Тариф, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/orders/" + UUID + "/clientReturn", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("tariff_code", Тариф, "Число", Параметры);
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Создать отказ
// Создает отказ по заказу для возврата в интернет магазин
//
// Примечание:
// Метод в документации API: [Регистрация отказа](@api-docs.cdek.ru/55327658.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция СоздатьОтказ(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/orders/" + UUID + "/refusal", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Сформировать квитанцию
// Формирует квитанции в формате pdf к заказам
//
// Примечание:
// Доступные типы (языки) квитанций: tpl_china, tpl_armenia, tpl_russia, tpl_english, tpl_italian, tpl_korean, tpl_latvian, tpl_lithuanian, tpl_german, tpl_turkish, tpl_czech, tpl_thailand, tpl_invoice
// Рекомендуется указывать не менее 2 копий на листе (параметр КопийНаЛисте): одна приклеивается на груз, вторая остается у отправителя
// Метод в документации API: [Формирование квитанции к заказу](@api-docs.cdek.ru/36967276.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// МассивUUID - Строка, Массив Из Строка - Один или массив UUID заказов - uuids
// Тип - Строка - Тип (язык) квитанции - type
// КопийНаЛисте - Число - Число копий одной квитанции на листе - count
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция СформироватьКвитанцию(Знач Токен
, Знач МассивUUID
, Знач Тип = "tpl_russia"
, Знач КопийНаЛисте = 2
, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьМассив(МассивUUID);
URL = СформироватьURL("/print/orders", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
МассивЗаказов = Новый Массив;
Для Каждого UUID Из МассивUUID Цикл
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
МассивЗаказов.Добавить(Новый Структура("order_uuid", UUID));
КонецЦикла;
OPI_Инструменты.ДобавитьПоле("orders" , МассивЗаказов, "Массив", Параметры);
OPI_Инструменты.ДобавитьПоле("copy_count", КопийНаЛисте , "Число" , Параметры);
OPI_Инструменты.ДобавитьПоле("type" , Тип , "Строка", Параметры);
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить квитанцию
// Получает квитанцию к заказу
//
// Примечание:
// Квитанция должна быть предварительно создана. См. СформироватьКвитанцию
// Ссылка на файл с квитанцией к заказам доступна в течение 1 часа
// Метод в документации API: [Получение квитанции к заказу](@api-docs.cdek.ru/36967287.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID квитанции, полученный при ее формировании - uuid
// ПолучитьФайл - Булево - Истина > будут получены сразу данные PDF файла, Ложь > ответ сервера CDEK - getfile
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение, ДвоичныеДанные - сериализованный JSON ответа от CDEK или PDF файл
Функция ПолучитьКвитанцию(Знач Токен, Знач UUID, Знач ПолучитьФайл = Ложь, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
OPI_ПреобразованиеТипов.ПолучитьБулево(ПолучитьФайл);
URL = СформироватьURL("/print/orders/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
Если ПолучитьФайл Тогда
Содержимое = Ответ["entity"];
Если Не ЗначениеЗаполнено(Содержимое) Тогда
Возврат Ответ;
КонецЕсли;
URL = Содержимое["url"];
Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ;
КонецЕсли;
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
КонецЕсли;
Возврат Ответ;
КонецФункции
// Сформировать штрихкод
// Формирует штрихкод места в формате PDF для заказов
//
// Примечание:
// Метод в документации API: [Формирование ШК места к заказу](@api-docs.cdek.ru/36967295.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// МассивUUID - Строка, Массив Из Строка - Один или массив UUID заказов - uuids
// Копий - Число - Число копий - count
// Формат - Строка - Формат печати: A4, A5, A6, A7 - format
// Язык - Строка - Язык штрихкода: RUS, ENG - lang
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция СформироватьШтрихкод(Знач Токен
, Знач МассивUUID
, Знач Копий = 1
, Знач Формат = "A4"
, Знач Язык = "RUS"
, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьМассив(МассивUUID);
URL = СформироватьURL("/print/barcodes", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
МассивЗаказов = Новый Массив;
Для Каждого UUID Из МассивUUID Цикл
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
МассивЗаказов.Добавить(Новый Структура("order_uuid", UUID));
КонецЦикла;
OPI_Инструменты.ДобавитьПоле("orders" , МассивЗаказов, "Массив", Параметры);
OPI_Инструменты.ДобавитьПоле("copy_count", Копий , "Число" , Параметры);
OPI_Инструменты.ДобавитьПоле("format" , Формат , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("lang" , Язык , "Строка", Параметры);
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить штрихкод
// Получает штрихкод места к заказу
//
// Примечание:
// Штрихкод должен быть предварительно создан. См. СформироватьШтрихкод
// Ссылка на файл с ШК местом к заказам доступна в течение 1 часа
// Метод в документации API: [Получение ШК места к заказу](@api-docs.cdek.ru/36967298.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID штрихкода, полученный при его формировании - uuid
// ПолучитьФайл - Булево - Истина > будут получены сразу данные PDF файла, Ложь > ответ сервера CDEK - getfile
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение, ДвоичныеДанные - сериализованный JSON ответа от CDEK или PDF файл
Функция ПолучитьШтрихкод(Знач Токен, Знач UUID, Знач ПолучитьФайл = Ложь, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
OPI_ПреобразованиеТипов.ПолучитьБулево(ПолучитьФайл);
URL = СформироватьURL("/print/barcodes/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
Если ПолучитьФайл Тогда
Содержимое = Ответ["entity"];
Если Не ЗначениеЗаполнено(Содержимое) Тогда
Возврат Ответ;
КонецЕсли;
URL = Содержимое["url"];
Если Не ЗначениеЗаполнено(URL) Тогда
Возврат Ответ;
КонецЕсли;
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
КонецЕсли;
Возврат Ответ;
КонецФункции
// Создать преалерт
// Создает преалерт для списка заказов
//
// Примечание:
// Метод в документации API: [Регистрация преалерта](@api-docs.cdek.ru/78934763.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// МассивUUID - Строка, Массив Из Строка - Один или массив UUID заказов - uuids
// ДатаПередачи - Дата - Планируемая дата передачи заказов в СДЭК - date
// ПВЗ - Строка - Код ПВЗ, в который планируется передать заказы - point
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция СоздатьПреалерт(Знач Токен, Знач МассивUUID, Знач ДатаПередачи, Знач ПВЗ, Знач ТестовыйAPI = Ложь) Экспорт
Planned_date_ = "planned_date";
OPI_ПреобразованиеТипов.ПолучитьМассив(МассивUUID);
URL = СформироватьURL("/prealert", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
МассивЗаказов = Новый Массив;
Для Каждого UUID Из МассивUUID Цикл
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
МассивЗаказов.Добавить(Новый Структура("order_uuid", UUID));
КонецЦикла;
OPI_Инструменты.ДобавитьПоле("orders" , МассивЗаказов, "Массив" , Параметры);
OPI_Инструменты.ДобавитьПоле(Planned_date_ , ДатаПередачи , "ДатаISO" , Параметры);
OPI_Инструменты.ДобавитьПоле("shipment_point", ПВЗ , "Строка" , Параметры);
Параметры[Planned_date_] = Параметры[Planned_date_] + "+0000";
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить преалерт
// Получает ранее созданны преалерт
//
// Примечание:
// Преалерт должен быть предварительно создан. См. СоздатьПреалерт
// Метод в документации API: [Информация о преалерте](@api-docs.cdek.ru/78934799.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID преалерта - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьПреалерт(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/prealert/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Получить статус паспортных данных
// Получает информацию о статусе обработки паспортных данных для международных заказов
//
// Примечание:
// Метод в документации API: [Информация о паспортных данных](@api-docs.cdek.ru/55343091.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьСтатусПаспортныхДанных(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/passport", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("order_uuid", UUID, "Строка", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить чек заказа
// Получает информацию о чеке по заказу
//
// Примечание:
// Метод в документации API: [Информация о чеке](@api-docs.cdek.ru/68257388.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьЧекЗаказа(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/check", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("order_uuid", UUID, "Строка", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Получить описание заказа
// Получает макет для создания заказа в функции СоздатьЗаказ
//
// Примечание:
// Обязательность реквизитов может зависить от типа зказа или вложенности. Обязательно ознакомьтесь с документацией CDEK
// Описания полей в документации: [Регистрация заказа](@api-docs.cdek.ru/29923926.html)
//
// Параметры:
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
// ТолькоОбязательные - Булево - Истина > в макете будут только обязательные поля - required
// ИнтернетМагазин - Булево - Признак включения в макет полей исключительно для заказо Интернет магазина - ostore
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура полей
Функция ПолучитьОписаниеЗаказа(Знач Пустая = Ложь, Знач ТолькоОбязательные = Ложь, Знач ИнтернетМагазин = Ложь) Экспорт
// BSLLS:DuplicateStringLiteral-off
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоОбязательные);
OPI_ПреобразованиеТипов.ПолучитьБулево(ИнтернетМагазин);
СтруктураЗаказа = Новый Структура;
СтруктураЗаказа.Вставить("tariff_code" , "<Код тарифа (подробнее см. приложение 1)>");
СтруктураПолучателя = Новый Структура;
СтруктураПолучателя.Вставить("company" , "<Название компании>");
СтруктураПолучателя.Вставить("name" , "<ФИО контактного лица>");
СтруктураПолучателя.Вставить("passport_series" , "<Серия паспорта>");
СтруктураПолучателя.Вставить("passport_number" , "<Номер паспорта>");
СтруктураПолучателя.Вставить("passport_date_of_issue", "<Дата выдачи паспорта>");
СтруктураПолучателя.Вставить("passport_organization" , "<Орган выдачи паспорта>");
СтруктураПолучателя.Вставить("tin" , "<ИНН>");
СтруктураПолучателя.Вставить("passport_date_of_birth", "<Дата рождения>");
СтруктураПолучателя.Вставить("email" , "<Email как RFC 2822>");
СтруктураПолучателя.Вставить("contragent_type" , "<Тип отправителя: LEGAL_ENTITY, INDIVIDUAL >");
МассивТелефонов = Новый Массив;
СтруктураТелефона = Новый Структура;
СтруктураТелефона.Вставить("number" , "<Номер телефона>");
СтруктураТелефона.Вставить("additional", "<Дополнительная информация (добавочный номер)>");
МассивТелефонов.Добавить(СтруктураТелефона);
СтруктураПолучателя.Вставить("phones", МассивТелефонов);
СтруктураЗаказа.Вставить("recipient", СтруктураПолучателя);
МассивУпаковок = Новый Массив;
СтруктураУпаковки = Новый Структура;
СтруктураУпаковки.Вставить("number" , "<Номер упаковки>");
СтруктураУпаковки.Вставить("weight" , "<Общий вес (в граммах)>");
СтруктураУпаковки.Вставить("length" , "<Габариты упаковки. Длина (в сантиметрах)>");
СтруктураУпаковки.Вставить("width" , "<Габариты упаковки. Ширина (в сантиметрах)>");
СтруктураУпаковки.Вставить("height" , "<Габариты упаковки. Высота (в сантиметрах)>");
СтруктураУпаковки.Вставить("comment", "<Комментарий к упаковке>");
МассивПозиций = Новый Массив;
СтруктураПозиции = Новый Структура;
СтруктураПозиции.Вставить("name" , "<Наименование товара>");
СтруктураПозиции.Вставить("ware_key", "<Идентификатор/артикул товара>");
СтруктураПозиции.Вставить("marking" , "<Маркировка товара>");
СтруктураОплаты = Новый Структура;
СтруктураОплаты.Вставить("value" , "<Сумма наложенного платежа, в том числе и НДС>");
СтруктураОплаты.Вставить("vat_sum" , "<Сумма НДС>");
СтруктураОплаты.Вставить("vat_rate", "<Ставка НДС (значение - 0, 10, 12, 20, null - нет НДС)>");
СтруктураПозиции.Вставить("payment" , СтруктураОплаты);
СтруктураПозиции.Вставить("cost" , "<Объявленная стоимость товара>");
СтруктураПозиции.Вставить("weight" , "<Вес (за единицу товара, в граммах)>");
СтруктураПозиции.Вставить("weight_gross", "<Вес брутто>");
СтруктураПозиции.Вставить("amount" , "<Количество единиц товара (в штуках)>");
СтруктураПозиции.Вставить("name_i18n" , "<Наименование на иностранном языке>");
СтруктураПозиции.Вставить("brand" , "<Бренд на иностранном языке>");
СтруктураПозиции.Вставить("country_code", "<Код страны производителя товара ISO_3166-1_alpha-2>");
СтруктураПозиции.Вставить("material" , "<Код материала>");
СтруктураПозиции.Вставить("wifi_gsm" , "<Содержит wifi или gsm>");
СтруктураПозиции.Вставить("url" , "<Ссылка на сайт интернет-магазина с описанием товара>");
МассивПозиций.Добавить(СтруктураПозиции);
СтруктураУпаковки.Вставить("items", МассивПозиций);
МассивУпаковок.Добавить(СтруктураУпаковки);
СтруктураЗаказа.Вставить("packages", МассивУпаковок);
Если Не ТолькоОбязательные Тогда
СтруктураЗаказа.Вставить("additional_order_types" , "<Дополнительный тип заказа>");
СтруктураЗаказа.Вставить("comment" , "<Комментарий к заказу>");
СтруктураЗаказа.Вставить("developer_key" , "<Ключ разработчика (для разработчиков модулей)>");
СтруктураЗаказа.Вставить("shipment_point" , "<Код ПВЗ СДЭК для самостоятельного привоза клиентом>");
СтруктураЗаказа.Вставить("delivery_point" , "<Код офиса СДЭК, на который будет доставлена посылка>");
СтруктураЗаказа.Вставить("date_invoice" , "<Дата инвойса>");
СтруктураЗаказа.Вставить("shipper_name" , "<Грузоотправитель>");
СтруктураЗаказа.Вставить("shipper_address" , "<Адрес грузоотправителя>");
СтруктураОтправителя = Новый Структура;
СтруктураОтправителя.Вставить("company" , "<Название компании>");
СтруктураОтправителя.Вставить("name" , "<ФИО контактного лица>");
СтруктураОтправителя.Вставить("email" , "<Email для оповещений RFC 2822>");
СтруктураОтправителя.Вставить("passport_series" , "<Серия паспорта>");
СтруктураОтправителя.Вставить("passport_number" , "<Номер паспорта>");
СтруктураОтправителя.Вставить("passport_date_of_issue" , "<Дата выдачи паспорта>");
СтруктураОтправителя.Вставить("passport_organization" , "<Орган выдачи паспорта>");
СтруктураОтправителя.Вставить("tin" , "<ИНН>");
СтруктураОтправителя.Вставить("passport_date_of_birth" , "<Дата рождения>");
СтруктураОтправителя.Вставить("contragent_type" , "<Тип отправителя: LEGAL_ENTITY, INDIVIDUAL>");
МассивТелефонов = Новый Массив;
СтруктураТелефона = Новый Структура;
СтруктураТелефона.Вставить("number" , "<Номер телефона>");
СтруктураТелефона.Вставить("additional", "<Дополнительная информация (добавочный номер)>");
МассивТелефонов.Добавить(СтруктураТелефона);
СтруктураОтправителя.Вставить("phones", МассивТелефонов);
СтруктураЗаказа.Вставить("sender", СтруктураОтправителя);
СтруктураАдреса = Новый Структура;
СтруктураАдреса.Вставить("code" , "<Код населенного пункта СДЭК>");
СтруктураАдреса.Вставить("fias_guid" , "<Уникальный идентификатор ФИАС>");
СтруктураАдреса.Вставить("postal_code" , "<Почтовый индекс>");
СтруктураАдреса.Вставить("longitude" , "<Долгота>");
СтруктураАдреса.Вставить("latitude" , "<Широта>");
СтруктураАдреса.Вставить("country_code", "<Код страны в формате ISO_3166-1_alpha-2>");
СтруктураАдреса.Вставить("region" , "<Название региона, уточняющий параметр для поля city>");
СтруктураАдреса.Вставить("region_code" , "<Код региона СДЭК, уточняющий параметр для поля city>");
СтруктураАдреса.Вставить("sub_region" , "<Название района региона, уточняющий параметр для поля region>");
СтруктураАдреса.Вставить("city" , "<Название города, уточняющий параметр для postal_code>");
СтруктураАдреса.Вставить("kladr_code" , "<Код КЛАДР>");
СтруктураАдреса.Вставить("address" , "<Строка адреса >");
СтруктураЗаказа.Вставить("from_location", СтруктураАдреса);
СтруктураЗаказа.Вставить("to_location" , СтруктураАдреса);
СтруктураУслуги = Новый Структура;
СтруктураУслуги.Вставить("code" , "<Тип дополнительной услуги>");
СтруктураУслуги.Вставить("parameter", "<Параметр дополнительной услуги>");
СтруктураЗаказа.Вставить("services" , СтруктураУслуги);
СтруктураЗаказа.Вставить("print" , "<Необходимость сформировать печатную форму>");
СтруктураЗаказа.Вставить("is_client_return" , "<Клиентский возврат>");
СтруктураЗаказа.Вставить("accompanying_number", "<Номер сопроводительной накладной>");
СтруктураЗаказа.Вставить("widget_token" , "<Токен, полученный от widget.cdek.ru>");
Если ИнтернетМагазин Тогда
СтруктураЗаказа.Вставить("number", "<Номер заказа в ИС Клиента (uuid, если не заполнено)>");
СтруктураСбора = Новый Структура;
СтруктураСбора.Вставить("value" , "<Сумма дополнительного сбора (в том числе и НДС)>");
СтруктураСбора.Вставить("vat_sum" , "<Сумма НДС>");
СтруктураСбора.Вставить("vat_rate", "<Ставка НДС (значение - 0, 10, 12, 20, null - нет НДС)>");
СтруктураЗаказа.Вставить("delivery_recipient_cost", СтруктураСбора);
МассивПорогов = Новый Массив;
СтруктураПорога = Новый Структура;
СтруктураПорога.Вставить("threshold", "<Порог стоимости товара в целых единицах валюты>");
СтруктураПорога.Вставить("sum" , "<Доп. сбор за доставку товаров, общая стоимость которых в интервале>");
СтруктураПорога.Вставить("vat_sum" , "<Сумма НДС, включённая в доп. сбор за доставку>");
СтруктураПорога.Вставить("vat_rate" , "<Ставка НДС (значение - 0, 10, 12, 20, null - нет НДС)>");
МассивПорогов.Добавить(СтруктураПорога);
СтруктураЗаказа.Вставить("delivery_recipient_cost_adv", МассивПорогов);
СтруктураПродавца = Новый Структура;
СтруктураПродавца.Вставить("name" , "<Наименование истинного продавца>");
СтруктураПродавца.Вставить("inn" , "<ИНН истинного продавца>");
СтруктураПродавца.Вставить("phone" , "<Телефон истинного продавца>");
СтруктураПродавца.Вставить("ownership_form", "<Код формы собственности>");
СтруктураПродавца.Вставить("address" , "<Адрес истинного продавца>");
СтруктураЗаказа.Вставить("seller", СтруктураПродавца);
КонецЕсли;
КонецЕсли;
Если Пустая Тогда
СтруктураЗаказа = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураЗаказа);
КонецЕсли;
//@skip-check constructor-function-return-section
Возврат СтруктураЗаказа;
// BSLLS:DuplicateStringLiteral-on
КонецФункции
#КонецОбласти
#Область УправлениеДоставкой
// Получить доступные интервалы доставки
// Получает доступные интервалы доставки для заказа
//
// Примечание:
// Метод в документации API: [Получение интервалов доставки](@api-docs.cdek.ru/154160502.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заказа - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьДоступныеИнтервалыДоставки(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
URL = СформироватьURL("/delivery/intervals", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("order_uuid", UUID, "Строка", Параметры);
Ответ = OPI_ЗапросыHTTP.Get(URL, Параметры, Заголовки);
Возврат Ответ;
КонецФункции
// Создать заявку на вызов курьера
// Создает новую заявку на вызов курьера для забора груза
//
// Примечание:
// Метод в документации API: [Регистрация отказа](@api-docs.cdek.ru/55327658.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// ОписаниеЗаявки - Структура Из КлючИЗначение - Описание заявки. См. ПолучитьОписаниеЗаявкиКурьера - intake
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция СоздатьЗаявкуНаВызовКурьера(Знач Токен, Знач ОписаниеЗаявки, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(ОписаниеЗаявки);
URL = СформироватьURL("/intakes", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, ОписаниеЗаявки, Заголовки);
Возврат Ответ;
КонецФункции
// Получить заявку на вызов курьера
// Получает заявку на вызов курьера по UUID
//
// Примечание:
// Заявка должна быть предварительно создана. См. СоздатьЗаявкуНаВызовКурьера
// Метод в документации API: [Информация о заявке](@api-docs.cdek.ru/29948360.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заявки - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьЗаявкуНаВызовКурьера(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/intakes/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Удалить заявку на вызов курьера
//
// Примечание:
// Метод в документации API: [Удаление заявки](@api-docs.cdek.ru/29948379.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID заявки для удаления - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция УдалитьЗаявкуНаВызовКурьера(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/intakes/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Delete(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Зафиксировать договоренность о доставке
// Фиксирует оговоренные с клиентом дату, время и адрес доставки
//
// Примечание:
// Метод в документации API: [Регистрация договоренности о доставке](@api-docs.cdek.ru/36981338.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// Договоренность - Структура Из КлючИЗначение - Описание договоренности. См. ПолучитьОписаниеДоговоренности - appt
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ЗафиксироватьДоговоренностьОДоставке(Знач Токен, Знач Договоренность, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Договоренность);
URL = СформироватьURL("/delivery", ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.PostСТелом(URL, Договоренность, Заголовки);
Возврат Ответ;
КонецФункции
// Получить договоренность о доставке
// Получает информацию об оговоренных с клиентом дате, времени и адресе доставки
//
// Примечание:
// Договоренность должна быть предварительно создана. См. ЗафиксироватьДоговоренностьОДоставке
// Метод в документации API: [Информация о договоренности о доставке](@api-docs.cdek.ru/36981626.html)
//
// Параметры:
// Токен - Строка - Токен авторизации - token
// UUID - Строка - UUID договоренности - uuid
// ТестовыйAPI - Булево - Флаг использования API для тестовых запросов - testapi
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от CDEK
Функция ПолучитьДоговоренностьОДоставке(Знач Токен, Знач UUID, Знач ТестовыйAPI = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(UUID);
URL = СформироватьURL("/delivery/" + UUID, ТестовыйAPI);
Заголовки = СоздатьЗаголовкиЗапроса(Токен);
Ответ = OPI_ЗапросыHTTP.Get(URL, , Заголовки);
Возврат Ответ;
КонецФункции
// Получить описание заявки курьера
// Получает макет для создания заявки на вызов курьера в функции СоздатьЗаявкуНаВызовКурьера
//
// Примечание:
// Обязательность реквизитов может зависить от типа зказа или вложенности. Обязательно ознакомьтесь с документацией CDEK
// Описания полей в документации: [Регистрация заявки на вызов курьера](@api-docs.cdek.ru/29925274.html)
//
// Параметры:
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
// ТолькоОбязательные - Булево - Истина > в макете будут только обязательные поля - required
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура полей
Функция ПолучитьОписаниеЗаявкиКурьера(Знач Пустая = Ложь, Знач ТолькоОбязательные = Ложь) Экспорт
// BSLLS:DuplicateStringLiteral-off
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоОбязательные);
СтруктураЗаявки = Новый Структура;
СтруктураЗаявки.Вставить("intake_date" , "<Дата ожидания курьера>");
СтруктураЗаявки.Вставить("intake_time_from" , "<Время начала ожидания курьера>");
СтруктураЗаявки.Вставить("intake_time_to" , "<Время окончания ожидания курьера>");
Если Не ТолькоОбязательные Тогда
СтруктураЗаявки.Вставить("cdek_number" , "<Номер заказа СДЭК>");
СтруктураЗаявки.Вставить("order_uuid" , "<Идентификатор заказа в ИС СДЭК>");
СтруктураЗаявки.Вставить("lunch_time_from" , "<Время начала обеда>");
СтруктураЗаявки.Вставить("lunch_time_to" , "<Время окончания обеда>");
СтруктураЗаявки.Вставить("name" , "<Описание груза>");
СтруктураЗаявки.Вставить("weight" , "<Общий вес (в граммах)>");
СтруктураЗаявки.Вставить("length" , "<Габариты упаковки. Длина (в сантиметрах)>");
СтруктураЗаявки.Вставить("width" , "<Габариты упаковки. Ширина (в сантиметрах)>");
СтруктураЗаявки.Вставить("height" , "<Габариты упаковки. Высота (в сантиметрах)>");
СтруктураЗаявки.Вставить("comment" , "<Комментарий к заявке для курьера>");
СтруктураЗаявки.Вставить("need_call" , "<Необходим прозвон отправителя>");
СтруктураЗаявки.Вставить("courier_power_of_attorney", "<Курьеру необходима доверенность>");
СтруктураЗаявки.Вставить("courier_identity_card" , "<Курьеру необходим документ удостоверяющий личность>");
СтруктураОтправителя = Новый Структура;
СтруктураОтправителя.Вставить("company" , "<Название компании отправителя>");
СтруктураОтправителя.Вставить("name" , "<ФИО контактного лица>");
СтруктураОтправителя.Вставить("contragent_type", "<Тип отправителя: LEGAL_ENTITY, INDIVIDUAL>");
МассивТелефонов = Новый Массив;
СтруктураТелефона = Новый Структура;
СтруктураТелефона.Вставить("number" , "<Номер телефона>");
СтруктураТелефона.Вставить("additional", "<Дополнительная информация (добавочный номер)>");
МассивТелефонов.Добавить(СтруктураТелефона);
СтруктураОтправителя.Вставить("phones", МассивТелефонов);
СтруктураЗаявки.Вставить("sender" , СтруктураОтправителя);
СтруктураАдресаОтправления = Новый Структура;
СтруктураАдресаОтправления.Вставить("code" , "<Код населенного пункта СДЭК>");
СтруктураАдресаОтправления.Вставить("fias_guid" , "<Уникальный идентификатор ФИАС>");
СтруктураАдресаОтправления.Вставить("postal_code" , "<Почтовый индекс>");
СтруктураАдресаОтправления.Вставить("longitude" , "<Долгота>");
СтруктураАдресаОтправления.Вставить("latitude" , "<Широта>");
СтруктураАдресаОтправления.Вставить("country_code", "<Код страны>");
СтруктураАдресаОтправления.Вставить("region" , "<Название региона, уточняющий параметр для поля city>");
СтруктураАдресаОтправления.Вставить("region_code" , "<Код региона СДЭК, уточняющий параметр для поля city>");
СтруктураАдресаОтправления.Вставить("sub_region" , "<Название района региона, уточняющий параметр для поля region>");
СтруктураАдресаОтправления.Вставить("city" , "<Название города, уточняющий параметр для postal_code>");
СтруктураАдресаОтправления.Вставить("kladr_code" , "<Код КЛАДР. Устаревшее поле>");
СтруктураАдресаОтправления.Вставить("address" , "<Строка адреса>");
СтруктураЗаявки.Вставить("from_location" , СтруктураАдресаОтправления);
КонецЕсли;
Если Пустая Тогда
СтруктураЗаявки = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураЗаявки);
КонецЕсли;
//@skip-check constructor-function-return-section
Возврат СтруктураЗаявки;
// BSLLS:DuplicateStringLiteral-on
КонецФункции
// Получить описание договоренности
// Получает макет для создания о доставке в функции ЗафиксироватьДоговоренностьОДоставке
//
// Примечание:
// Обязательность реквизитов может зависить от типа зказа или вложенности. Обязательно ознакомьтесь с документацией CDEK
// Описания полей в документации: [Регистрация договоренности о доставке](@api-docs.cdek.ru/36981338.html)
//
// Параметры:
// Пустая - Булево - Истина > структура с пустыми значениями, Ложь > в значениях будут описания полей - empty
// ТолькоОбязательные - Булево - Истина > в макете будут только обязательные поля - required
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура полей
Функция ПолучитьОписаниеДоговоренности(Знач Пустая = Ложь, Знач ТолькоОбязательные = Ложь) Экспорт
OPI_ПреобразованиеТипов.ПолучитьБулево(Пустая);
OPI_ПреобразованиеТипов.ПолучитьБулево(ТолькоОбязательные);
СтруктураДоговоренности = Новый Структура;
СтруктураДоговоренности.Вставить("date", "<Дата доставки, согласованная с получателем>");
Если Не ТолькоОбязательные Тогда
СтруктураДоговоренности.Вставить("cdek_number" , "<Номер заказа СДЭК>");
СтруктураДоговоренности.Вставить("order_uuid" , "<Идентификатор заказа в ИС СДЭК>");
СтруктураДоговоренности.Вставить("time_from" , "<Время доставки С, согласованное с получателем>");
СтруктураДоговоренности.Вставить("time_to" , "<Время доставки ПО, согласованное с получателем>");
СтруктураДоговоренности.Вставить("comment" , "<Комментарий>");
СтруктураДоговоренности.Вставить("delivery_point", "<Буквенно-цифровой код ПВЗ СДЭК>");
СтруктураАдресаДоставки = Новый Структура;
СтруктураАдресаДоставки.Вставить("code" , "<Код населенного пункта СДЭК>");
СтруктураАдресаДоставки.Вставить("fias_guid" , "<Уникальный идентификатор ФИАС>");
СтруктураАдресаДоставки.Вставить("postal_code" , "<Почтовый индекс>");
СтруктураАдресаДоставки.Вставить("longitude" , "<Долгота>");
СтруктураАдресаДоставки.Вставить("latitude" , "<Широта>");
СтруктураАдресаДоставки.Вставить("country_code", "<Код страны в формате ISO_3166-1_alpha-2>");
СтруктураАдресаДоставки.Вставить("region" , "<Название региона>");
СтруктураАдресаДоставки.Вставить("region_code" , "<Код региона>");
СтруктураАдресаДоставки.Вставить("sub_region" , "<Название района региона>");
СтруктураАдресаДоставки.Вставить("city" , "<Название города>");
СтруктураАдресаДоставки.Вставить("kladr_code" , "<Код КЛАДР>");
СтруктураАдресаДоставки.Вставить("address" , "<Строка адреса>");
СтруктураДоговоренности.Вставить("to_location", СтруктураАдресаДоставки);
КонецЕсли;
Если Пустая Тогда
СтруктураДоговоренности = OPI_Инструменты.ОчиститьКоллекциюРекурсивно(СтруктураДоговоренности);
КонецЕсли;
//@skip-check constructor-function-return-section
Возврат СтруктураДоговоренности;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция СформироватьURL(Знач Метод, Знач ТестовыйAPI)
OPI_ПреобразованиеТипов.ПолучитьБулево(ТестовыйAPI);
Если ТестовыйAPI Тогда
URL = "https://api.edu.cdek.ru/v2";
Иначе
URL = "https://api.cdek.ru/v2";
КонецЕсли;
URL = URL + Метод;
Возврат URL;
КонецФункции
Функция СоздатьЗаголовкиЗапроса(Знач Токен)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + Токен);
Возврат Заголовки;
КонецФункции
#КонецОбласти