├── .github └── workflows │ └── ci.yaml ├── .gitignore ├── LICENSE.md ├── README.md ├── composer.json ├── phpunit.xml.dist ├── src ├── CdekClientV2.php ├── Constants.php ├── Entity │ ├── Requests │ │ ├── Agreement.php │ │ ├── Barcode.php │ │ ├── Check.php │ │ ├── Contact.php │ │ ├── DeliveryPoints.php │ │ ├── Intakes.php │ │ ├── Invoice.php │ │ ├── Item.php │ │ ├── Location.php │ │ ├── Money.php │ │ ├── Order.php │ │ ├── Package.php │ │ ├── Phone.php │ │ ├── Seller.php │ │ ├── Services.php │ │ ├── Source.php │ │ ├── Tariff.php │ │ ├── Threshold.php │ │ └── Webhooks.php │ └── Responses │ │ ├── AgreementResponse.php │ │ ├── CallsResponse.php │ │ ├── CheckResponse.php │ │ ├── CitiesResponse.php │ │ ├── ContactResponse.php │ │ ├── DeliveryDetailResponse.php │ │ ├── DeliveryPointsResponse.php │ │ ├── EntityResponse.php │ │ ├── IntakesResponse.php │ │ ├── ItemsResponse.php │ │ ├── LocationResponse.php │ │ ├── MoneyResponse.php │ │ ├── OfficeImageResponse.php │ │ ├── OrderResponse.php │ │ ├── PackagesResponse.php │ │ ├── PaymentResponse.php │ │ ├── PhoneResponse.php │ │ ├── PrintResponse.php │ │ ├── RegionsResponse.php │ │ ├── RegistryResponse.php │ │ ├── RequestsResponse.php │ │ ├── SellerResponse.php │ │ ├── ServicesResponse.php │ │ ├── Source.php │ │ ├── StatusesResponse.php │ │ ├── TariffListResponse.php │ │ ├── TariffResponse.php │ │ ├── ThresholdResponse.php │ │ ├── WebhookListResponse.php │ │ └── WorkTimeListResponse.php ├── Exceptions │ ├── CdekV2AuthException.php │ ├── CdekV2Exception.php │ └── CdekV2RequestException.php └── Traits │ ├── AgreementTrait.php │ ├── CommonTrait.php │ ├── ContactTrait.php │ ├── DeliveryPointsTrait.php │ ├── ExpressTrait.php │ ├── IntakesTrait.php │ ├── ItemTrait.php │ ├── LocationTrait.php │ ├── MoneyTrait.php │ ├── OrderTrait.php │ ├── PackageTrait.php │ ├── PhoneTrait.php │ ├── SellerTrait.php │ ├── ServicesTrait.php │ ├── TariffTrait.php │ └── ThresholdTrait.php └── tests ├── AntistressStoreTestCase.php └── Unit ├── CalculateTariffTest.php ├── CreateOrderTest.php ├── DeliveryPointsTest.php └── WebhookListResponseTest.php /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | # yamllint disable rule:line-length 2 | # yamllint disable rule:braces 3 | name: Tests 4 | 5 | on: 6 | pull_request: 7 | push: 8 | branches: 9 | - main 10 | - master 11 | 12 | jobs: 13 | tests: 14 | name: Testing with PHP ${{ matrix.php-version }} ${{ matrix.description }} 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | matrix: 19 | php-version: 20 | - '7.2' 21 | - '7.3' 22 | - '7.4' 23 | - '8.0' 24 | - '8.1' 25 | - '8.2' 26 | coverage: ['none'] 27 | 28 | steps: 29 | - name: Checkout code 30 | uses: actions/checkout@v2 31 | 32 | - name: Setup PHP 33 | uses: shivammathur/setup-php@v2 34 | with: 35 | php-version: ${{ matrix.php-version }} 36 | coverage: ${{ matrix.coverage }} 37 | tools: composer:v2 38 | 39 | - name: Get composer cache directory 40 | id: composer-cache 41 | run: echo "::set-output name=dir::$(composer config cache-files-dir)" 42 | 43 | - name: Cache dependencies 44 | uses: actions/cache@v2 45 | with: 46 | path: ${{ steps.composer-cache.outputs.dir }} 47 | key: composer-${{ matrix.php-version }}-${{ hashFiles('composer.*') }} 48 | restore-keys: | 49 | composer-${{ matrix.php-version }}- 50 | composer- 51 | 52 | - name: Install dependencies 53 | run: | 54 | composer install --prefer-dist --no-interaction --no-progress 55 | 56 | - name: Parallel PHP Lint 57 | run: | 58 | vendor/bin/parallel-lint --exclude vendor . 59 | 60 | - name: PHP Unit tests 61 | run: | 62 | vendor/bin/phpunit --no-coverage 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .git/ 2 | .vscode/ 3 | .phan/ 4 | README.html 5 | composer.json 6 | .gitconfig 7 | vendor 8 | .php-cs-fixer.cache 9 | composer.lock 10 | build 11 | .phpunit.cache 12 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Antistress.Store® 2024 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "antistress-store/cdek-sdk-v2", 3 | "description": "PHP SDK для API v2.0 от сервиса интеграции компании СДЭК", 4 | "keywords": [ 5 | "CDEK", 6 | "cdek sdk", 7 | "delivery", 8 | "СДЭК", 9 | "служба доставки", 10 | "v2.0", 11 | "cdek api v2", 12 | "cdek интеграция" 13 | ], 14 | "homepage": "https://antistress.store", 15 | "license": "MIT", 16 | "authors": [ 17 | { 18 | "name": "Sergey Gusev", 19 | "email": "head@antistress.store", 20 | "homepage": "https://antistress.store", 21 | "role": "Creator" 22 | } 23 | ], 24 | "require": { 25 | "php": ">=7.2.5", 26 | "ext-json": "*", 27 | "guzzlehttp/guzzle": ">=7.3" 28 | }, 29 | "config": { 30 | "sort-packages": true 31 | }, 32 | "autoload": { 33 | "psr-4": { 34 | "AntistressStore\\CdekSDK2\\": "src/" 35 | } 36 | }, 37 | "autoload-dev": { 38 | "psr-4": { 39 | "AntistressStore\\Test\\": "tests/" 40 | } 41 | }, 42 | "support": { 43 | "issues": "https://github.com/AntistressStore/cdek-sdk-v2/issues", 44 | "docs": "https://github.com/AntistressStore/cdek-sdk-v2/blob/master/README.md" 45 | }, 46 | "require-dev": { 47 | "php-parallel-lint/php-parallel-lint": "^1.4", 48 | "phpunit/phpunit": "^6||^7||^8|^9.5.10|^10.5" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | tests 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | src/ 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/Constants.php: -------------------------------------------------------------------------------- 1 | '', 184 | 'city_code' => '', 185 | 'type' => '', 186 | 'country_code' => '', 187 | 'region_code' => '', 188 | 'have_cashless' => '', 189 | 'have_cash' => '', 190 | 'allowed_cod' => '', 191 | 'is_dressing_room' => '', 192 | 'weight_max' => '', 193 | 'lang' => '', 194 | 'take_only' => '', 195 | 'is_handout' => '', 196 | 'is_reception' => '', 197 | 'size' => '', 198 | 'page' => '', 199 | ]; 200 | 201 | /** 202 | * Список корректных параметров, которые разрешено передавать для поиска населенных пунктов. 203 | * 204 | * @var array 205 | */ 206 | public const CITIES_FILTER = [ 207 | 'country_codes' => '', 208 | 'region_code' => '', 209 | 'kladr_region_code' => '', 210 | 'fias_region_guid' => '', 211 | 'kladr_code' => '', 212 | 'fias_guid' => '', 213 | 'postal_code' => '', 214 | 'code' => '', 215 | 'city' => '', 216 | 'size' => '', 217 | 'page' => '', 218 | 'lang' => '', 219 | ]; 220 | 221 | /** 222 | * Список корректных параметров, которые разрешено передавать для поиска регионов. 223 | * 224 | * @var array 225 | */ 226 | public const REGIONS_FILTER = [ 227 | 'country_codes' => '', 228 | 'region_code' => '', 229 | 'kladr_region_code' => '', 230 | 'fias_region_guid' => '', 231 | 'size' => '', 232 | 'page' => '', 233 | 'lang' => '', 234 | ]; 235 | 236 | /** 237 | * Сопоставление полей ответа и классов. 238 | * 239 | * @var array 240 | */ 241 | public const SDK_CLASSES = [ 242 | 'to_location' => 'Location', 243 | 'from_location' => 'Location', 244 | 'location' => 'Location', 245 | 'delivery_recipient_cost' => 'Money', 246 | 'delivery_detail' => 'DeliveryDetail', 247 | 'sender' => 'Contact', 248 | 'seller' => 'Seller', 249 | 'recipient' => 'Contact', 250 | 'payment' => 'Money', 251 | ]; 252 | 253 | /** 254 | * Сопоставление полей ответа содержаших массивы классов. 255 | * 256 | * @var array 257 | */ 258 | public const SDK_ARRAY_RESPONSE_CLASSES = [ 259 | 'delivery_recipient_cost_adv' => 'Threshold', 260 | 'statuses' => 'Statuses', 261 | 'services' => 'Services', 262 | 'packages' => 'Packages', 263 | 'items' => 'Items', 264 | 'office_image_list' => 'OfficeImage', 265 | 'work_time_list' => 'WorkTimeList', 266 | 'requests' => 'Requests', 267 | 'phones' => 'Phone', 268 | 'check_info' => 'Check', 269 | ]; 270 | 271 | public const SERVICE_CODES = [ 272 | 'INSURANCE' => 'Страхование', 273 | 'TAKE_SENDER' => 'Забор в городе отправителе', 274 | 'DELIV_RECEIVER' => 'Доставка в городе получателе', 275 | 'TRYING_ON' => 'Примерка на дому', 276 | 'PART_DELIV' => 'Частичная доставка', 277 | 'INSPECTION_CARGO' => 'Осмотр вложения', 278 | 'REVERSE' => 'Реверс', 279 | 'DANGER_CARGO' => 'Опасный груз', 280 | 'PACKAGE_1' => 'Упаковка 1', 281 | 'PACKAGE_2' => 'Упаковка 2', 282 | 'WAIT_FOR_RECEIVER' => 'Ожидание более 15 мин. у получателя', 283 | 'WAIT_FOR_SENDER' => 'Ожидание более 15 мин. у отправителя', 284 | 'REPEATED_DELIVERY' => 'Повторная поездка', 285 | 'SMS' => 'Смс уведомление', 286 | 'GET_UP_FLOOR_BY_HAND' => 'Подъем на этаж ручной', 287 | 'GET_UP_FLOOR_BY_ELEVATOR' => 'Подъем на этаж лифтом', 288 | 'CALL' => 'Прозвон', 289 | 'THERMAL_MODE' => 'Тепловой режим', 290 | 'COURIER_PACKAGE_A2' => 'Пакет курьерский А2', 291 | 'SECURE_PACKAGE_A2' => 'Сейф пакет А2', 292 | 'SECURE_PACKAGE_A3' => 'Сейф пакет А3', 293 | 'SECURE_PACKAGE_A4' => 'Сейф пакет А4', 294 | 'SECURE_PACKAGE_A5' => 'Сейф пакет А5', 295 | 'NOTIFY_ORDER_CREATED' => 'Уведомление о создании заказа в СДЭК', 296 | 'NOTIFY_ORDER_DELIVERY' => 'Уведомление о приеме заказа на доставку', 297 | 'CARTON_BOX_XS' => 'Коробка XS (0,5 кг 17х12х9 см)', 298 | 'CARTON_BOX_S' => 'Коробка S (2 кг 21х20х11 см)', 299 | 'CARTON_BOX_M' => 'Коробка M (5 кг 33х25х15 см)', 300 | 'CARTON_BOX_L' => 'Коробка L (12 кг 34х33х26 см)', 301 | 'CARTON_BOX_500GR' => 'Коробка (0,5 кг 17х12х10 см)', 302 | 'CARTON_BOX_1KG' => 'Коробка (1 кг 24х17х10 см)', 303 | 'CARTON_BOX_2KG' => 'Коробка (2 кг 34х24х10 см)', 304 | 'CARTON_BOX_3KG' => 'Коробка (3 кг 24х24х21 см)', 305 | 'CARTON_BOX_5KG' => 'Коробка (5 кг 40х24х21 см)', 306 | 'CARTON_BOX_10KG' => 'Коробка (10 кг 40х35х28 см)', 307 | 'CARTON_BOX_15KG' => 'Коробка (15 кг 60х35х29 см)', 308 | 'CARTON_BOX_20KG' => 'Коробка (20 кг 47х40х43 см)', 309 | 'CARTON_BOX_30KG' => 'Коробка (30 кг 69х39х42 см)', 310 | 'BUBBLE_WRAP' => 'Воздушно-пузырчатая пленка', 311 | 'WASTE_PAPER' => 'Макулатурная бумага', 312 | 'CARTON_FILLER' => 'Прессованный картон "филлер" (55х14х2,3 см)', 313 | 'BAN_ATTACHMENT_INSPECTION' => 'Запрет осмотра вложения', 314 | ]; 315 | 316 | /** 317 | * Список ошибок. 318 | * 319 | * @var array 320 | */ 321 | public const ERRORS = [ 322 | 'v2_internal_error' => 'Запрос выполнился с системной ошибкой', 323 | 'v2_similar_request_still_processed' => 'Предыдущий запрос такого же типа над этой же сущностью еще не выполнился', 324 | 'v2_bad_request' => 'Передан некорректный запрос', 325 | 'v2_invalid_format' => 'Передано некорректное значение', 326 | 'v2_field_is_empty' => 'Не передано обязательное поле', 327 | 'v2_parameters_empty' => 'Все параметры запроса пустые или не переданы', 328 | 'v2_invalid_value_type' => 'Передан некорректный тип данных', 329 | 'v2_entity_not_found' => 'Сущность (заказ, заявка и т.д.) с указанным идентификатором не существует либо удалена', 330 | 'v2_entity_forbidden' => 'Сущность (заказ, заявка и т.д.) с указанным идентификатором существует, но принадлежит другому клиенту', 331 | 'v2_entity_invalid' => 'Сущность (заказ, заявка и т.д.) с указанным идентификатором существует, но некорректна', 332 | 'v2_order_not_found' => 'Заказ с указанным номером не существует либо удален', 333 | 'v2_order_forbidden' => 'Заказ с указанным номером существует, но принадлежит другому клиенту', 334 | 'v2_order_number_empty' => 'Не переданы номер и идентификатор заказа', 335 | 'v2_shipment_address_multivalued' => 'Одновременно переданы ПВЗ отправителя и адрес отправителя. Необходимо указать 1 параметр', 336 | 'v2_delivery_address_multivalued' => 'Одновременно переданы ПВЗ получателя и адрес получателя. Необходимо указать 1 параметр.', 337 | 'v2_sender_location_not_recognized' => 'Не удалось определить город отправителя', 338 | 'v2_recipient_location_not_recognized' => 'Не удалось определить город получателя', 339 | 'v2_number_items_is_more_126' => 'Количество позиций товаров в заказе свыше 126', 340 | 'orders_number_is_empty' => 'Все заказы с указанными номерами и идентификаторами некорректны', 341 | 'shipment_location_is_not_recognized' => 'Передан некорректный код ПВЗ отправителя', 342 | 'delivery_location_is_not_recognized' => 'Передан некорректный код ПВЗ получателя', 343 | 'v2_entity_not_found_im_number' => 'Сущность с указанным идентификатором не существует либо удалена', 344 | 'v2_order_location_from_and_shipment_point_empty' => 'Адрес отправителя и ПВЗ отправителя пустые', 345 | 'v2_order_location_to_and_delivery_point_empty' => 'Адрес получателя и ПВЗ получателя пустые', 346 | 'v2_number_items_is_more_126' => 'Позиций в товаре более 126', 347 | 'v2_package_id_is_empty' => 'Не передан идентификатор уже существующей упаковки заказа', 348 | 'v2_required_param_empty' => 'Не заполнено обязательное поле', 349 | 'v2_city_can_not_be_changed' => 'Передан новый город в адресе доставки (для регистрации договоренности)', 350 | 'v2_impossible_register_date' => 'Истинный режим переданного заказа - "До постамата"', 351 | 'v2_intake_exists_by_order' => 'К переданному заказу уже привязана заявка', 352 | 'v2_intake_exists_by_date_address' => 'На переданную дату и в переданный адрес уже есть заявка', 353 | 'v2_webhook_type_incorrect' => 'Передан некорректный тип события', 354 | 'v2_entity_empty' => 'Все заказы с указанными номерами и идентификаторами некорректны', 355 | 'v2_wrong_interval' => 'Передан некорректный промежуток времени', 356 | 'v2_entity_expired' => 'Истек срок хранения квитанции с указанным идентификатором', 357 | 'v2_entity_empty' => 'Квитанция с указанным идентификатором не сформировалась, так как все заказы некорректны', 358 | 'v2_entity_expired' => 'Истек срок хранения печатной формы с указанным идентификатором', 359 | 'v2_entity_empty' => 'Печатная форма с указанным идентификатором не сформировалась, так как все заказы некорректны', 360 | 'v2_unable_add_service' => 'Не удалось добавить услугу к заказу.', 361 | ]; 362 | } 363 | -------------------------------------------------------------------------------- /src/Entity/Requests/Agreement.php: -------------------------------------------------------------------------------- 1 | format = $format; 43 | 44 | return $this; 45 | } 46 | 47 | /** 48 | * Устанавливает параметр язык печатной формы. Возможные языки в кодировке ISO - 639-3:. 49 | * 50 | * @param string $lang Язык печатной формы. Возможные языки в кодировке ISO - 639-3: 51 | * 52 | * @return self 53 | */ 54 | public function setLang(string $lang) 55 | { 56 | $this->lang = $lang; 57 | 58 | return $this; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/Entity/Requests/Check.php: -------------------------------------------------------------------------------- 1 | date = $date; 38 | 39 | return $this; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/Entity/Requests/Contact.php: -------------------------------------------------------------------------------- 1 | pattern = Constants::DELIVERY_POINTS_FILTER; 49 | } 50 | 51 | /** 52 | * @param string $type 53 | */ 54 | public function setType($type) 55 | { 56 | $this->type = $type; 57 | 58 | return $this; 59 | } 60 | 61 | /** 62 | * @param int|null $city_code 63 | */ 64 | public function setCityCode($city_code) 65 | { 66 | $this->city_code = $city_code; 67 | 68 | return $this; 69 | } 70 | 71 | /** 72 | * @param bool $have_cashless 73 | */ 74 | public function setCashless($have_cashless) 75 | { 76 | $this->have_cashless = $have_cashless; 77 | 78 | return $this; 79 | } 80 | 81 | public function setCash($have_cash) 82 | { 83 | $this->have_cash = $have_cash; 84 | 85 | return $this; 86 | } 87 | 88 | /** 89 | * @param bool $is_dressing_room 90 | */ 91 | public function setDressingRoom($is_dressing_room) 92 | { 93 | $this->is_dressing_room = $is_dressing_room; 94 | 95 | return $this; 96 | } 97 | 98 | /** 99 | * @param bool $is_handout 100 | */ 101 | public function setHandout($is_handout) 102 | { 103 | $this->is_handout = $is_handout; 104 | 105 | return $this; 106 | } 107 | 108 | /** 109 | * @param bool $is_reception 110 | */ 111 | public function setReception($is_reception) 112 | { 113 | $this->is_reception = $is_reception; 114 | 115 | return $this; 116 | } 117 | 118 | /** 119 | * @param bool $allowed_cod 120 | */ 121 | public function setCodAllowed($allowed_cod) 122 | { 123 | $this->allowed_cod = $allowed_cod; 124 | 125 | return $this; 126 | } 127 | 128 | /** 129 | * @param int $weight_max 130 | */ 131 | public function setMaxWeight($weight_max) 132 | { 133 | $this->weight_max = $weight_max; 134 | 135 | return $this; 136 | } 137 | 138 | /** 139 | * @param string $lang 140 | */ 141 | public function setLanguage($lang = self::LANGUAGE_RUSSIAN) 142 | { 143 | $this->lang = $lang; 144 | 145 | return $this; 146 | } 147 | 148 | public function setPickupOnly($take_only) 149 | { 150 | $this->take_only = $take_only; 151 | 152 | return $this; 153 | } 154 | 155 | /** 156 | * @return int 157 | */ 158 | public function getCount() 159 | { 160 | return count($this->items); 161 | } 162 | 163 | /** 164 | * Get код ПВЗ. 165 | * 166 | * @return string|null 167 | */ 168 | public function getCode() 169 | { 170 | return $this->code; 171 | } 172 | } 173 | -------------------------------------------------------------------------------- /src/Entity/Requests/Intakes.php: -------------------------------------------------------------------------------- 1 | orders = $orders; 47 | 48 | return $this; 49 | } 50 | 51 | /** 52 | * Установить параметр - число копий. По умолчанию 1. 53 | * 54 | * @param int $copy_count Число копий. По умолчанию 1 55 | * 56 | * @return self 57 | */ 58 | public function setCopyCount(int $copy_count = 1) 59 | { 60 | $this->copy_count = $copy_count; 61 | 62 | return $this; 63 | } 64 | 65 | /** 66 | * Установить параметр - Форма квитанции. 67 | * 68 | * @param string $type форма квитанции 69 | * 70 | * @return self 71 | */ 72 | public function setType(string $type) 73 | { 74 | $this->type = $type; 75 | 76 | return $this; 77 | } 78 | 79 | /** 80 | * Экспресс-метод установки адреса. 81 | * 82 | * @param array|string $orders_uuid - массив с orders_uuid или один uuid строкой 83 | * 84 | * @return self 85 | */ 86 | public static function withOrdersUuid($orders_uuid) 87 | { 88 | $instance = new static(); 89 | if (is_array($orders_uuid)) { 90 | foreach ($orders_uuid as $order_uuid) { 91 | $instance->orders[] = Order::withOrderUuid($order_uuid); 92 | } 93 | } else { 94 | $instance->orders[] = Order::withOrderUuid($orders_uuid); 95 | } 96 | 97 | return $instance; 98 | } 99 | 100 | /** 101 | * Экспресс-метод установки адреса. 102 | * 103 | * @param array|string $cdek_numbers - массив с orders_uuid или один uuid строкой 104 | * 105 | * @return self 106 | */ 107 | public static function withCdekNumbers($cdek_numbers) 108 | { 109 | $instance = new static(); 110 | if (is_array($cdek_numbers)) { 111 | foreach ($cdek_numbers as $cdek_number) { 112 | $instance->orders[] = Order::withCdekNumber($cdek_number); 113 | } 114 | } else { 115 | $instance->orders[] = Order::withCdekNumber($cdek_numbers); 116 | } 117 | 118 | return $instance; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /src/Entity/Requests/Item.php: -------------------------------------------------------------------------------- 1 | code = $code; 103 | 104 | return $instance; 105 | } 106 | 107 | /** 108 | * Экспресс-метод установки кода локации. 109 | * 110 | * @param int $code - код города\региона 111 | * @param mixed $postal_code 112 | */ 113 | public static function withPostalCode($postal_code) 114 | { 115 | $instance = new self(); 116 | 117 | $instance->postal_code = $postal_code; 118 | 119 | return $instance; 120 | } 121 | 122 | /** 123 | * Экспресс-метод установки адреса. 124 | * 125 | * @param mixed $address 126 | */ 127 | public static function withAddress($address) 128 | { 129 | $instance = new self(); 130 | 131 | $instance->address = $address; 132 | 133 | return $instance; 134 | } 135 | 136 | /** 137 | * Экспресс-метод установки города. 138 | * 139 | * @param mixed $city 140 | */ 141 | public static function withCities($city) 142 | { 143 | $instance = new self(); 144 | 145 | $instance->city = $city; 146 | 147 | return $instance; 148 | } 149 | 150 | /** 151 | * @param int $code 152 | * 153 | * @return self 154 | */ 155 | public function setCode($code) 156 | { 157 | $this->code = $code; 158 | 159 | return $this; 160 | } 161 | 162 | /** 163 | * @param string $country_code 164 | * 165 | * @return self 166 | */ 167 | public function setCountryCode($country_code = 'RU') 168 | { 169 | $this->country_code = $country_code; 170 | 171 | return $this; 172 | } 173 | 174 | /** 175 | * @param mixed $country 176 | * 177 | * @return self 178 | */ 179 | public function setCountry($country) 180 | { 181 | $this->country = $country; 182 | 183 | return $this; 184 | } 185 | 186 | /** 187 | * @param string[] $country_codes 188 | * 189 | * @return self 190 | */ 191 | public function setCountryCodes($country_codes) 192 | { 193 | $this->country_codes = $country_codes; 194 | 195 | return $this; 196 | } 197 | 198 | /** 199 | * @param string $address 200 | * 201 | * @return self 202 | */ 203 | public function setAddress($address) 204 | { 205 | $this->address = $address; 206 | 207 | return $this; 208 | } 209 | 210 | /** 211 | * @param int $postal_code 212 | * 213 | * @return self 214 | */ 215 | public function setPostalCode($postal_code) 216 | { 217 | $this->postal_code = $postal_code; 218 | 219 | return $this; 220 | } 221 | 222 | /** 223 | * @param string $city 224 | * 225 | * @return self 226 | */ 227 | public function setCity($city) 228 | { 229 | $this->city = $city; 230 | 231 | return $this; 232 | } 233 | 234 | /** 235 | * @param string $region 236 | * 237 | * @return self 238 | */ 239 | public function setRegion($region) 240 | { 241 | $this->region = $region; 242 | 243 | return $this; 244 | } 245 | 246 | /** 247 | * @param string $sub_region 248 | * 249 | * @return self 250 | */ 251 | public function setSubRegion($sub_region) 252 | { 253 | $this->sub_region = $sub_region; 254 | 255 | return $this; 256 | } 257 | 258 | /** 259 | * @param int $region_code 260 | * 261 | * @return self 262 | */ 263 | public function setRegionCode($region_code) 264 | { 265 | $this->region_code = $region_code; 266 | 267 | return $this; 268 | } 269 | 270 | /** 271 | * @param string $kladr_code 272 | * 273 | * @return self 274 | */ 275 | public function setKladrCode($kladr_code) 276 | { 277 | $this->kladr_code = $kladr_code; 278 | 279 | return $this; 280 | } 281 | 282 | /** 283 | * @param string $kladr_region_code 284 | * 285 | * @return self 286 | */ 287 | public function setKladrRegionCode($kladr_region_code) 288 | { 289 | $this->kladr_region_code = $kladr_region_code; 290 | 291 | return $this; 292 | } 293 | 294 | /** 295 | * @param string $fias_guid 296 | * 297 | * @return self 298 | */ 299 | public function setFiasGuid($fias_guid) 300 | { 301 | $this->fias_guid = $fias_guid; 302 | 303 | return $this; 304 | } 305 | 306 | /** 307 | * @param string $size 308 | * 309 | * @return self 310 | */ 311 | public function setSize($size) 312 | { 313 | $this->size = $size; 314 | 315 | return $this; 316 | } 317 | 318 | /** 319 | * @param string $lang 320 | * 321 | * @return self 322 | */ 323 | public function setLang($lang = 'rus') 324 | { 325 | $this->lang = $lang; 326 | 327 | return $this; 328 | } 329 | 330 | /** 331 | * @param string $time_zone 332 | */ 333 | public function setTimeZone($time_zone) 334 | { 335 | $this->time_zone = $time_zone; 336 | 337 | return $this; 338 | } 339 | 340 | /** 341 | * Устанавливает ограничение на сумму наложенного платежа в населенном пункте. 342 | * 343 | * @param float|null $payment_limit Ограничение на сумму наложенного платежа в населенном пункте 344 | * 345 | * @return self 346 | */ 347 | public function setPaymentLimit($payment_limit) 348 | { 349 | $this->payment_limit = $payment_limit; 350 | 351 | return $this; 352 | } 353 | 354 | /** 355 | * Устанавливает уникальный идентификатор ФИАС региона населенного пункта. 356 | * 357 | * @param string $fias_region_guid Уникальный идентификатор ФИАС региона населенного пункта 358 | */ 359 | public function setFiasRegionGuid(string $fias_region_guid) 360 | { 361 | $this->fias_region_guid = $fias_region_guid; 362 | 363 | return $this; 364 | } 365 | 366 | /** 367 | * Устанавливает полный адрес с указанием страны, региона, города, и т.д. 368 | * 369 | * @param string $address_full Полный адрес с указанием страны, региона, города, и т.д. 370 | */ 371 | public function setAddressFull(string $address_full) 372 | { 373 | $this->address_full = $address_full; 374 | 375 | return $this; 376 | } 377 | 378 | /** 379 | * Устанавливает настройки локации на Населенные пункты. 380 | * 381 | * @return self 382 | */ 383 | public function cities() 384 | { 385 | $this->pattern = Constants::CITIES_FILTER; 386 | 387 | return $this; 388 | } 389 | 390 | /** 391 | * Устанавливает настройки локации на Регионы. 392 | * 393 | * @return self 394 | */ 395 | public function regions() 396 | { 397 | $this->pattern = Constants::REGIONS_FILTER; 398 | 399 | return $this; 400 | } 401 | 402 | /** 403 | * Устанавливает номер страницы выборки результата. По умолчанию 0. 404 | * 405 | * @param int|null $page Номер страницы выборки результата. По умолчанию 0. 406 | * 407 | * @return self 408 | */ 409 | public function setPage($page) 410 | { 411 | $this->page = $page; 412 | 413 | return $this; 414 | } 415 | } 416 | -------------------------------------------------------------------------------- /src/Entity/Requests/Money.php: -------------------------------------------------------------------------------- 1 | developer_key = 'UZ$NAOr6waZIvjbXtKR2=&FKG1XsVnhK'; 40 | } 41 | 42 | /** 43 | * Устанавливает номер заказа в ИС Клиента. 44 | * Если не установлен, в этот параметр сдэк запишет uuid. 45 | * 46 | * @param string $number Номер заказа в ИС Клиента 47 | * 48 | * @return self 49 | */ 50 | public function setNumber(string $number) 51 | { 52 | $this->number = $number; 53 | 54 | return $this; 55 | } 56 | 57 | /** 58 | * Устанавливает код ПВЗ для забора 59 | * Не может использоваться одновременно с from_location. 60 | * 61 | * @param string $shipment_point Код ПВЗ для забора 62 | * 63 | * @return self 64 | */ 65 | public function setShipmentPoint(string $shipment_point) 66 | { 67 | $this->shipment_point = $shipment_point; 68 | 69 | return $this; 70 | } 71 | 72 | /** 73 | * Устанавливает код ПВЗ СДЭК для доставки 74 | * Не может использоваться одновременно с to_location. 75 | * 76 | * @param string $delivery_point Код ПВЗ СДЭК для доставки 77 | * 78 | * @return self 79 | */ 80 | public function setDeliveryPoint(string $delivery_point) 81 | { 82 | $this->delivery_point = $delivery_point; 83 | 84 | return $this; 85 | } 86 | 87 | /** 88 | * Устанавливает код валюты объявленной стоимости заказа. 89 | * 90 | * @param string $items_cost_currency Код валюты объявленной стоимости заказа 91 | * 92 | * @return self 93 | */ 94 | public function setItemsСostСurrency(string $items_cost_currency) 95 | { 96 | $this->items_cost_currency = $items_cost_currency; 97 | 98 | return $this; 99 | } 100 | 101 | /** 102 | * Устанавливает код валюты наложенного платежа. 103 | * 104 | * @param string $recipient_currency Код валюты наложенного платежа 105 | * 106 | * @return self 107 | */ 108 | public function setRecipientCurrency(string $recipient_currency) 109 | { 110 | $this->recipient_currency = $recipient_currency; 111 | 112 | return $this; 113 | } 114 | 115 | /** 116 | * Экспресс метод. Устанавливает адрес отправления. 117 | * Обязательно для тарифов "от двери". 118 | * 119 | * @return self 120 | */ 121 | public function setShipmentAddress(string $address) 122 | { 123 | $this->from_location = (is_null($this->from_location)) ? Location::withAddress($address) 124 | : $this->from_location->setAddress($address); 125 | 126 | return $this; 127 | } 128 | 129 | /** 130 | * Экспресс метод. Устанавливает код города отправления. 131 | * Обязательно для тарифов "от двери". 132 | * 133 | * @return self 134 | */ 135 | public function setShipmentCityCode(int $code) 136 | { 137 | $this->from_location = (is_null($this->from_location)) ? Location::withCode($code) 138 | : $this->from_location->setCode($code); 139 | 140 | return $this; 141 | } 142 | 143 | /** 144 | * Экспресс метод. Устанавливает адрес получателя. 145 | * 146 | * @param string $address адрес получателя 147 | * 148 | * @return self 149 | */ 150 | public function setRecipientAddress(string $address) 151 | { 152 | $this->to_location = (is_null($this->to_location)) ? Location::withAddress($address) 153 | : $this->to_location->setAddress($address); 154 | 155 | return $this; 156 | } 157 | 158 | /** 159 | * Экспресс метод. Устанавливает адрес получателя. 160 | * 161 | * @param int $address адрес получателя 162 | * 163 | * @return self 164 | */ 165 | public function setRecipientCityCode(int $code) 166 | { 167 | $this->to_location = (is_null($this->to_location)) ? Location::withCode($code) 168 | : $this->to_location->setCode($code); 169 | 170 | return $this; 171 | } 172 | 173 | /** 174 | * Экспресс метод. Устанавливает код города отправителя. 175 | * 176 | * @param int $address адрес получателя 177 | * 178 | * @return self 179 | */ 180 | public function setSenderCityCode(int $code) 181 | { 182 | $this->from_location = (is_null($this->from_location)) ? Location::withCode($code) 183 | : $this->from_location->setCode($code); 184 | 185 | return $this; 186 | } 187 | 188 | /** 189 | * Устанавливает дата инвойса 190 | * обязетельно если заказ - международный. 191 | * 192 | * @param string|null $date_invoice Дата инвойса 193 | * 194 | * @return self 195 | */ 196 | public function setDateInvoice(string $date_invoice) 197 | { 198 | $this->date_invoice = $date_invoice; 199 | 200 | return $this; 201 | } 202 | 203 | /** 204 | * Устанавливает грузоотправитель 205 | * обязетельно если заказ - международный. 206 | * 207 | * @param string $shipper_name Грузоотправитель 208 | * 209 | * @return self 210 | */ 211 | public function setShipperName(string $shipper_name) 212 | { 213 | $this->shipper_name = $shipper_name; 214 | 215 | return $this; 216 | } 217 | 218 | /** 219 | * Устанавливает адрес грузоотправителя 220 | * обязательно если заказ - международный. 221 | * 222 | * @param string $shipper_address Адрес грузоотправителя 223 | * 224 | * @return self 225 | */ 226 | public function setShipperAddress(string $shipper_address) 227 | { 228 | $this->shipper_address = $shipper_address; 229 | 230 | return $this; 231 | } 232 | 233 | /** 234 | * Устанавливает стоимость доставки, которую ИМ берет с получателя. 235 | * 236 | * @param float $value Сумма дополнительного сбора 237 | * @param float|null $vat_sum Сумма НДС 238 | * @param int|null $vat_rate Ставка НДС (значение - 0, 10, 18, 20 и т.п. , null - нет НДС) 239 | * 240 | * @return self 241 | */ 242 | public function setDeliveryRecipientCost(float $value = 0.0, $vat_sum = null, $vat_rate = null) 243 | { 244 | if (is_float($value)) { 245 | $args = \get_defined_vars(); 246 | $this->delivery_recipient_cost = Money::express($args); 247 | } 248 | 249 | return $this; 250 | } 251 | 252 | /** 253 | * Устанавливает доп. сбор за доставку (которую ИМ берет с получателя) в зависимости от суммы заказа. 254 | * 255 | * @param int $threshold Порог стоимости товара 256 | * @param float $sum Сумма дополнительного сбора 257 | * @param float|null $vat_sum Сумма НДС 258 | * @param int|null $vat_rate Ставка НДС (значение - 0, 10, 18, 20 и т.п. , null - нет НДС) 259 | */ 260 | public function setDeliveryRecipientCostAdv($threshold, $sum, $vat_sum = null, $vat_rate = null) 261 | { 262 | if (!empty($threshold)) { 263 | $args = \get_defined_vars(); 264 | $this->delivery_recipient_cost_adv = Threshold::express($args); 265 | } 266 | 267 | return $this; 268 | } 269 | 270 | /** 271 | * Устанавливает отправителя. 272 | * 273 | * @param Contact $sender Отправитель 274 | * 275 | * @return self 276 | */ 277 | public function setSender(Contact $sender) 278 | { 279 | $this->sender = $sender; 280 | 281 | return $this; 282 | } 283 | 284 | /** 285 | * Устанавливает реквизиты реального продавца. 286 | * 287 | * @param Seller $seller Реквизиты реального продавца 288 | * 289 | * @return self 290 | */ 291 | public function setSeller(Seller $seller) 292 | { 293 | $this->seller = $seller; 294 | 295 | return $this; 296 | } 297 | 298 | /** 299 | * Устанавливает получатель. 300 | * 301 | * @param Contact $recipient Получатель 302 | * 303 | * @return self 304 | */ 305 | public function setRecipient(Contact $recipient) 306 | { 307 | $this->recipient = $recipient; 308 | 309 | return $this; 310 | } 311 | 312 | /** 313 | * Устанавливает необходимость печатной формы. 314 | * 315 | * Может принимать значения: 316 | * barcode - ШК мест (число копий - 1) 317 | * waybill - квитанция (число копий - 2) 318 | * 319 | * @return self 320 | */ 321 | public function setPrint(string $print) 322 | { 323 | $this->print = $print; 324 | 325 | return $this; 326 | } 327 | } 328 | -------------------------------------------------------------------------------- /src/Entity/Requests/Package.php: -------------------------------------------------------------------------------- 1 | pattern ?? \get_object_vars($this); 25 | 26 | $dynamic = []; 27 | 28 | foreach ($entity_vars as $key => $val) { 29 | if (\is_null($this->{$key})) { 30 | continue; 31 | } 32 | 33 | if (!\is_object($this->{$key}) && !is_array($this->{$key})) { 34 | $dynamic[$key] = $this->{$key}; 35 | } elseif (is_array($this->{$key})) { 36 | foreach ($this->{$key} as $k => $v) { 37 | $array_from_object = \get_object_vars($v); 38 | 39 | $array_from_object_null_filtered = \array_filter($array_from_object); 40 | if (!empty($array_from_object_null_filtered)) { 41 | $dynamic[$key][] = $array_from_object_null_filtered; 42 | } else { 43 | continue; 44 | } 45 | } 46 | } else { 47 | $a = \get_object_vars($this->{$key}); 48 | $dynamic[$key] = \array_filter($a, function ($value) { 49 | return $value !== null; 50 | }); 51 | } 52 | } 53 | 54 | return $dynamic; 55 | } 56 | 57 | #[\ReturnTypeWillChange] 58 | public function jsonSerialize() 59 | { 60 | return \get_object_vars($this); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/Entity/Requests/Tariff.php: -------------------------------------------------------------------------------- 1 | date = $date; 42 | 43 | return $this; 44 | } 45 | 46 | /** 47 | * Установка тип заказа (1 - "интернет-магазин", 2 - "доставка"). 48 | * 49 | * @param int $type Тип заказа (1 - "интернет-магазин", 2 - "доставка") 50 | * 51 | * @return self 52 | */ 53 | public function setType(int $type) 54 | { 55 | $this->type = $type; 56 | 57 | return $this; 58 | } 59 | 60 | /** 61 | * Установка валюты, в которой необходимо произвести расчет 62 | * 63 | * @param int $currency Валюта, в которой необходимо произвести расчет 64 | * 65 | * @return self 66 | */ 67 | public function setCurrency(int $currency) 68 | { 69 | $this->currency = $currency; 70 | 71 | return $this; 72 | } 73 | 74 | /** 75 | * Установка код тарифа. 76 | * 77 | * @param int $tariff_code Код тарифа 78 | * 79 | * @return self 80 | */ 81 | public function setTariffCode(int $tariff_code) 82 | { 83 | $this->tariff_code = $tariff_code; 84 | 85 | return $this; 86 | } 87 | 88 | /** 89 | * Установка адреса отправления. 90 | * 91 | * @param Location $from_location Адрес отправления 92 | * 93 | * @return self 94 | */ 95 | public function setFromLocation(Location $from_location) 96 | { 97 | $this->from_location = $from_location; 98 | 99 | return $this; 100 | } 101 | 102 | /** 103 | * Установка адреса получения. 104 | * 105 | * @param Location $to_location Адрес получения 106 | * 107 | * @return self 108 | */ 109 | public function setToLocation(Location $to_location) 110 | { 111 | $this->to_location = $to_location; 112 | 113 | return $this; 114 | } 115 | 116 | /** 117 | * Установка дополнительных услуг. 118 | * 119 | * @param Services[] $services Дополнительные услуги 120 | * 121 | * @return self 122 | */ 123 | public function setServices(Services $services) 124 | { 125 | $this->services = $services; 126 | 127 | return $this; 128 | } 129 | 130 | /** 131 | * Экспресс-метод. Устанавливает города отправителя и получателя. 132 | * 133 | * @param int $from код города отправителя 134 | * @param int $to код города получателя 135 | * 136 | * @return self 137 | */ 138 | public function setCityCodes(int $from, int $to) 139 | { 140 | $this->from_location = (is_null($this->from_location)) ? Location::withCode($from) 141 | : $this->from_location->setCode($from); 142 | $this->to_location = (is_null($this->to_location)) ? Location::withCode($to) 143 | : $this->to_location->setCode($to); 144 | 145 | return $this; 146 | } 147 | 148 | /** 149 | * Экспресс-метод. Добавляет дополнительные услуги одним методом через массив. 150 | * 151 | * @param array $services Дополнительные услуги 152 | * 153 | * @return self 154 | */ 155 | public function addServices(array $services) 156 | { 157 | $services_array = []; 158 | $services_pattern = Constants::SERVICE_CODES; 159 | foreach ($services as $key => $value) { 160 | $service_name = ( ! empty($key)) ? $key : $value; 161 | if ( ! empty($key) && array_key_exists($key, $services_pattern)) { 162 | $services_array[] = (new Services())->setCode($key)->setParameter($value); 163 | } elseif (empty($key) && array_key_exists($value, $services_pattern)) { 164 | $services_array[] = (new Services())->setCode($value); 165 | } else { 166 | throw new \InvalidArgumentException('Передан не допустимый код тарифа:'.$service_name, 1); 167 | } 168 | } 169 | $this->services = $services_array; 170 | 171 | return $this; 172 | } 173 | 174 | /** 175 | * Установка список информации по местам (упаковкам). 176 | * 177 | * @param Package[] $packages Список информации по местам (упаковкам) 178 | * 179 | * @return self 180 | */ 181 | public function setPackages(Package $packages) 182 | { 183 | $this->packages[] = $packages; 184 | 185 | return $this; 186 | } 187 | } 188 | -------------------------------------------------------------------------------- /src/Entity/Requests/Threshold.php: -------------------------------------------------------------------------------- 1 | url = $url; 37 | 38 | return $this; 39 | } 40 | 41 | /** 42 | * Установить параметр - тип события. 43 | * 44 | * @param string $type 45 | * Тип события: 46 | * 'ORDER_STATUS' - событие по статусам 47 | * 'PRINT_FORM' - готовность печатной формы 48 | * 49 | * @return self 50 | */ 51 | public function setType(string $type) 52 | { 53 | $this->type = $type; 54 | 55 | return $this; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/Entity/Responses/AgreementResponse.php: -------------------------------------------------------------------------------- 1 | statuses; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/Entity/Responses/CallsResponse.php: -------------------------------------------------------------------------------- 1 | failed_calls; 46 | } 47 | 48 | /** 49 | * Получить параметр - причина недозвона. 50 | * 51 | * @return string 52 | */ 53 | public function getReasonCode() 54 | { 55 | return $this->reason_code; 56 | } 57 | 58 | /** 59 | * Получить параметр - дата и время создания недозвона. 60 | * 61 | * @return string 62 | */ 63 | public function getDateTime() 64 | { 65 | return $this->date_time; 66 | } 67 | 68 | /** 69 | * Получить параметр - наименование города(места), где произошло изменение статуса. 70 | * 71 | * @return array 72 | */ 73 | public function getRescheduledCalls() 74 | { 75 | return $this->rescheduled_calls; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/Entity/Responses/CheckResponse.php: -------------------------------------------------------------------------------- 1 | date; 71 | } 72 | 73 | /** 74 | * Получить параметр - номер фискального накопителя. 75 | * 76 | * @return string 77 | */ 78 | public function getFiscalStorageNumber() 79 | { 80 | return $this->fiscal_storage_number; 81 | } 82 | 83 | /** 84 | * Получить параметр - порядковый номер фискального документа. 85 | * 86 | * @return string 87 | */ 88 | public function getDocumentNumber() 89 | { 90 | return $this->document_number; 91 | } 92 | 93 | /** 94 | * Получить параметр - порядковый номер фискального документа. 95 | * 96 | * @return string 97 | */ 98 | public function getFiscalSign() 99 | { 100 | return $this->fiscal_sign; 101 | } 102 | 103 | /** 104 | * Получить параметр - тип чека. 105 | * 106 | * @return string 107 | */ 108 | public function getType() 109 | { 110 | return $this->type; 111 | } 112 | 113 | /** 114 | * Получить параметр - тип чека. 115 | * 116 | * @return array 117 | */ 118 | public function getPaymentInfo() 119 | { 120 | return $this->payment_info; 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /src/Entity/Responses/CitiesResponse.php: -------------------------------------------------------------------------------- 1 | time_zone; 40 | } 41 | 42 | /** 43 | * Получить ограничение на сумму наложенного платежа в населенном пункте. 44 | * 45 | * @return string|null 46 | */ 47 | public function getPaymentLimit() 48 | { 49 | return $this->payment_limit; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/Entity/Responses/ContactResponse.php: -------------------------------------------------------------------------------- 1 | date; 33 | } 34 | 35 | /** 36 | * Получает параметр - recipient_name. 37 | */ 38 | public function getRecipientName() 39 | { 40 | return $this->recipient_name; 41 | } 42 | 43 | /** 44 | * Получает параметр - payment_sum. 45 | */ 46 | public function getPaymentSum() 47 | { 48 | return $this->payment_sum; 49 | } 50 | 51 | /** 52 | * Получает параметр - payment_info. 53 | */ 54 | public function getPaymentInfo() 55 | { 56 | return $this->payment_info; 57 | } 58 | 59 | /** 60 | * Get стоимость доставки. 61 | * 62 | * @return float 63 | */ 64 | public function getDeliverySum() 65 | { 66 | return $this->delivery_sum; 67 | } 68 | 69 | /** 70 | * Get стоимость доставки с учетом дополнительных услуг. 71 | * 72 | * @return float 73 | */ 74 | public function getTotalSum() 75 | { 76 | return $this->total_sum; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/Entity/Responses/DeliveryPointsResponse.php: -------------------------------------------------------------------------------- 1 | name; 135 | } 136 | 137 | /** 138 | * Получить параметр - адрес ПВЗ. 139 | * 140 | * @return LocationResponse 141 | */ 142 | public function getLocation() 143 | { 144 | return $this->location; 145 | } 146 | 147 | /** 148 | * Получить параметр - режим работы, строка вида «пн-пт 9-18, сб 9-16». 149 | * 150 | * @return string|null 151 | */ 152 | public function getWorkTime() 153 | { 154 | return $this->work_time; 155 | } 156 | 157 | /** 158 | * Получить параметр - график работы на неделю. 159 | * 160 | * @return WorkTimeListResponse[] 161 | */ 162 | public function getWorkTimeList() 163 | { 164 | return $this->work_time_list; 165 | } 166 | 167 | /** 168 | * Получить параметр - исключения в графике работы офиса. 169 | */ 170 | public function getWorkTimeExceptions() 171 | { 172 | return $this->work_time_exceptions; 173 | } 174 | 175 | /** 176 | * Получить параметр - примечание по ПВЗ. 177 | * 178 | * @return string|null 179 | */ 180 | public function getNote() 181 | { 182 | return $this->note; 183 | } 184 | 185 | /** 186 | * Получить параметр - принадлежность ПВЗ компании. 187 | * 188 | * @return string|null 189 | */ 190 | public function getOwnerCode() 191 | { 192 | return $this->owner_code; 193 | } 194 | 195 | /** 196 | * Получить параметр - ближайшая станция/остановка транспорта. 197 | * 198 | * @return string|null 199 | */ 200 | public function getNearestStation() 201 | { 202 | return $this->nearest_station; 203 | } 204 | 205 | /** 206 | * Получить параметр - ближайшая станция метро. 207 | * 208 | * @return string|null 209 | */ 210 | public function getNearestMetroStation() 211 | { 212 | return $this->nearest_metro_station; 213 | } 214 | 215 | /** 216 | * Получить параметр - ссылка на данный ПВЗ на сайте СДЭК. 217 | * 218 | * @return string|null 219 | */ 220 | public function getSite() 221 | { 222 | return $this->site; 223 | } 224 | 225 | /** 226 | * Получить параметр - адрес электронной почты. 227 | * 228 | * @return string|null 229 | */ 230 | public function getEmail() 231 | { 232 | return $this->email; 233 | } 234 | 235 | /** 236 | * Получить параметр - описание местоположения. 237 | * 238 | * @return string|null 239 | */ 240 | public function getAddressComment() 241 | { 242 | return $this->address_comment; 243 | } 244 | 245 | /** 246 | * Получить параметр - все фото офиса. 247 | */ 248 | public function getOfficeImageList() 249 | { 250 | return $this->office_image_list; 251 | } 252 | 253 | /** 254 | * Получить параметр - перечень максимальных размеров ячеек (только для type = POSTAMAT). 255 | */ 256 | public function getDimensions() 257 | { 258 | return $this->dimensions; 259 | } 260 | 261 | /** 262 | * Получить параметр - код ПВЗ. 263 | * 264 | * @return string|null 265 | */ 266 | public function getCode() 267 | { 268 | return $this->code; 269 | } 270 | 271 | /** 272 | * Получить номера телефона 273 | * 274 | * @return PhoneResponse[] 275 | */ 276 | public function getPhones() 277 | { 278 | return $this->phones; 279 | } 280 | 281 | /** 282 | * Получить тип пункта выдачи 283 | * 284 | * @return string|null 285 | */ 286 | public function getType() 287 | { 288 | return $this->type; 289 | } 290 | } 291 | -------------------------------------------------------------------------------- /src/Entity/Responses/EntityResponse.php: -------------------------------------------------------------------------------- 1 | requests; 39 | } 40 | 41 | /** 42 | * Получить сущность и ее идентификатор. 43 | * 44 | * @return string 45 | */ 46 | public function getEntityUuid() 47 | { 48 | return $this->entity['uuid']; 49 | } 50 | 51 | /** 52 | * Получить массив сущности. 53 | * 54 | * @return array 55 | */ 56 | public function getEntity() 57 | { 58 | return $this->entity; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/Entity/Responses/IntakesResponse.php: -------------------------------------------------------------------------------- 1 | intake_number; 47 | } 48 | 49 | /** 50 | * Получить статусы по заявке на вызов курьера. 51 | * 52 | * @return StatusesResponse[] 53 | */ 54 | public function getStatuses() 55 | { 56 | return $this->statuses; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/Entity/Responses/ItemsResponse.php: -------------------------------------------------------------------------------- 1 | delivery_amount; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/Entity/Responses/LocationResponse.php: -------------------------------------------------------------------------------- 1 | city_code; 40 | } 41 | 42 | /** 43 | * Получить aдрес с указанием страны, региона, города, и т.д. 44 | * 45 | * @return string|null 46 | */ 47 | public function getAddressFull() 48 | { 49 | return $this->address_full; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/Entity/Responses/MoneyResponse.php: -------------------------------------------------------------------------------- 1 | number; 27 | } 28 | 29 | /** 30 | * Получает ссылку на фото и преобразует ее в адрес фото. 31 | */ 32 | public function getUrl() 33 | { 34 | return str_replace('edu.api-pvz.imageRepository.service.cdek.tech:8008', 'pvzimage.cdek.ru', $this->url); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/Entity/Responses/OrderResponse.php: -------------------------------------------------------------------------------- 1 | related_entities = $properties['related_entities']; 90 | } 91 | parent::__construct($properties); 92 | } 93 | 94 | /** 95 | * Получить значение - признак возвратного заказа. 96 | * 97 | * @return bool 98 | */ 99 | public function getIsReturn() 100 | { 101 | return $this->is_return; 102 | } 103 | 104 | /** 105 | * Получить значение - признак возвратного заказа. 106 | * 107 | * @return bool 108 | */ 109 | public function getIsReverse() 110 | { 111 | return $this->is_reverse; 112 | } 113 | 114 | /** 115 | * Получить значение - тип заказа. 116 | * 117 | * @return string 118 | */ 119 | public function getType() 120 | { 121 | return $this->type; 122 | } 123 | 124 | /** 125 | * Получить значение - истинный режим заказа. 126 | * 127 | * @return string 128 | */ 129 | public function getDeliveryMode() 130 | { 131 | return $this->delivery_mode; 132 | } 133 | 134 | /** 135 | * Получить значение - код тарифа. 136 | * 137 | * @return int 138 | */ 139 | public function getTariffCode() 140 | { 141 | return $this->tariff_code; 142 | } 143 | 144 | /** 145 | * Получить значение - проблемы доставки. 146 | * 147 | * @return array 148 | */ 149 | public function getDeliveryProblem() 150 | { 151 | return $this->delivery_problem; 152 | } 153 | 154 | /** 155 | * Получить значение - детали доставки. 156 | * 157 | * @return array 158 | */ 159 | public function getDeliveryDetail() 160 | { 161 | return $this->delivery_detail; 162 | } 163 | 164 | /** 165 | * Получить значение - детали доставки. 166 | * 167 | * @return bool 168 | */ 169 | public function getTransactedPayment() 170 | { 171 | return $this->transacted_payment; 172 | } 173 | 174 | /** 175 | * Получить значение - статусы. 176 | * 177 | * @return StatusResponse[] 178 | */ 179 | public function getStatuses() 180 | { 181 | return $this->statuses; 182 | } 183 | 184 | /** 185 | * Получить значение - список информации по местам (упаковкам). 186 | * 187 | * @return PackageResponse[] 188 | */ 189 | public function getPackages() 190 | { 191 | return $this->packages; 192 | } 193 | 194 | /** 195 | * Получить значение - связанные с заказом сущности. 196 | * 197 | * @return array 198 | */ 199 | public function getRelatedEntities() 200 | { 201 | return $this->related_entities; 202 | } 203 | 204 | /** 205 | * Получить последнюю (самую новую) связанную сущность. 206 | * 207 | * @param string $type 208 | * 209 | * @return string 210 | */ 211 | public function getLastRelated($type) 212 | { 213 | $newest = []; 214 | if (is_array($this->related_entities)) { 215 | foreach ($this->related_entities as $key => $value) { 216 | if (isset($value['type']) && $value['type'] == $type) { 217 | $newest[] = $value; 218 | } else { 219 | continue; 220 | } 221 | } 222 | } 223 | 224 | return (!empty($newest)) ? end($newest)['uuid'] : null; 225 | } 226 | 227 | /** 228 | * Получить значение - информация о запросе/запросах над заказом. 229 | * 230 | * @return RequestsResponse[] 231 | */ 232 | public function getRequests() 233 | { 234 | return $this->requests; 235 | } 236 | 237 | /** 238 | * Get дополнительные услуги. 239 | * 240 | * @return ServicesResponse[] 241 | */ 242 | public function getServices() 243 | { 244 | return $this->services; 245 | } 246 | } 247 | -------------------------------------------------------------------------------- /src/Entity/Responses/PackagesResponse.php: -------------------------------------------------------------------------------- 1 | weight_volume; 46 | } 47 | 48 | /** 49 | * Получить значение - расчетный вес (в граммах). 50 | * 51 | * @return int 52 | */ 53 | public function getWeightCalc() 54 | { 55 | return $this->weight_calc; 56 | } 57 | 58 | /** 59 | * Получить значение - Уникальный номер упаковки в ИС СДЭК. 60 | * 61 | * @return string 62 | */ 63 | public function getPackageId() 64 | { 65 | return $this->package_id; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/Entity/Responses/PaymentResponse.php: -------------------------------------------------------------------------------- 1 | orders; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/Entity/Responses/PhoneResponse.php: -------------------------------------------------------------------------------- 1 | entity['orders'])) { 23 | foreach ($this->entity['orders'] as $order) { 24 | if (isset($order['order_uuid'])) { 25 | $orders[] = OrderResponse::withOrderUuid($order['order_uuid']); 26 | } 27 | if (isset($order['cdek_number'])) { 28 | $orders[] = OrderResponse::withCdekNumber($order['cdek_number']); 29 | } 30 | } 31 | } 32 | 33 | return $orders; 34 | } 35 | 36 | /** 37 | * Ссылка на скачивание файла. Содержится в ответе только в статусе "Сформирован". 38 | * 39 | * @return string 40 | */ 41 | public function getUrl() 42 | { 43 | if (isset($this->entity['url'])) { 44 | return $this->entity['url']; 45 | } 46 | } 47 | 48 | /** 49 | * Получить параметр - Число копий на листе. 50 | * 51 | * @return int 52 | */ 53 | public function getCopyCount() 54 | { 55 | if (isset($this->entity['copy_count'])) { 56 | return $this->entity['copy_count']; 57 | } 58 | } 59 | 60 | /** 61 | * Получить параметр - Язык печатной формы в кодировке ISO - 639-3. По умолчанию - RUS. 62 | * 63 | * @return string 64 | */ 65 | public function getLang() 66 | { 67 | if (isset($this->entity['lang'])) { 68 | return $this->entity['lang']; 69 | } 70 | } 71 | 72 | /** 73 | * Получить параметр - Формат печати. 74 | * 75 | * @return string 76 | */ 77 | public function getFormat() 78 | { 79 | if (isset($this->entity['format'])) { 80 | return $this->entity['format']; 81 | } 82 | } 83 | 84 | /** 85 | * Получить параметр - Статус файла . 86 | * 87 | * @return StatusesResponse[] 88 | */ 89 | public function getStatuses() 90 | { 91 | if (isset($this->entity['statuses'])) { 92 | foreach ($this->entity['statuses'] as $status) { 93 | $statuses[] = new StatusesResponse($status); 94 | } 95 | 96 | return $statuses; 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/Entity/Responses/RegionsResponse.php: -------------------------------------------------------------------------------- 1 | country; 54 | } 55 | 56 | /** 57 | * Get код страны в формате ISO_3166-1_alpha-2. 58 | * 59 | * @return string 60 | */ 61 | public function getCountryCode() 62 | { 63 | return $this->country_code; 64 | } 65 | 66 | /** 67 | * Get название региона. 68 | * 69 | * @return string|null 70 | */ 71 | public function getRegion() 72 | { 73 | return $this->region; 74 | } 75 | 76 | /** 77 | * Get код региона (справочник СДЭК). 78 | * 79 | * @return int|null 80 | */ 81 | public function getRegionCode() 82 | { 83 | return $this->region_code; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/Entity/Responses/RegistryResponse.php: -------------------------------------------------------------------------------- 1 | registries; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/Entity/Responses/RequestsResponse.php: -------------------------------------------------------------------------------- 1 | request_uuid; 67 | } 68 | 69 | /** 70 | * Получить причина недозвона. 71 | * 72 | * @return string 73 | */ 74 | public function getType() 75 | { 76 | return $this->type; 77 | } 78 | 79 | /** 80 | * Получить дата и время установки текущего состояния запроса (формат yyyy-MM-dd'T'HH:mm:ssZ). 81 | * 82 | * @return string 83 | */ 84 | public function getDateTime() 85 | { 86 | return $this->date_time; 87 | } 88 | 89 | /** 90 | * Получить текущее состояние запроса. 91 | * 92 | * @return string 93 | */ 94 | public function getState() 95 | { 96 | return $this->state; 97 | } 98 | 99 | /** 100 | * Получить ошибки, возникшие в ходе выполнения запроса. 101 | * 102 | * @return array 103 | */ 104 | public function getErrors() 105 | { 106 | return $this->errors; 107 | } 108 | 109 | /** 110 | * Получить предупреждения, возникшие в ходе выполнения запроса. 111 | * 112 | * @return array 113 | */ 114 | public function getWarnings() 115 | { 116 | return $this->warnings; 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/Entity/Responses/SellerResponse.php: -------------------------------------------------------------------------------- 1 | sum; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/Entity/Responses/Source.php: -------------------------------------------------------------------------------- 1 | 1) { 26 | if (isset($properties['requests'])) { 27 | $properties['entity']['requests'] = $properties['requests']; 28 | } 29 | $properties = $properties['entity']; 30 | } 31 | } 32 | foreach ($properties as $key => $value) { 33 | if ( ! property_exists($this, $key)) { 34 | continue; 35 | } 36 | if (isset(Constants::SDK_CLASSES[$key])) { 37 | $class_name = '\\AntistressStore\\CdekSDK2\\Entity\\Responses\\' 38 | .Constants::SDK_CLASSES[$key].'Response'; 39 | $this->{$key} = $class_name::create($value); 40 | } elseif (isset(Constants::SDK_ARRAY_RESPONSE_CLASSES[$key])) { 41 | foreach ($value as $v) { 42 | $class_name = '\\AntistressStore\\CdekSDK2\\Entity\\Responses\\'. 43 | Constants::SDK_ARRAY_RESPONSE_CLASSES[$key].'Response'; 44 | $this->{$key}[] = $class_name::create($v); 45 | } 46 | } else { 47 | $this->{$key} = $value; 48 | } 49 | } 50 | } 51 | } 52 | 53 | public static function create(array $properties) 54 | { 55 | return new static($properties); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/Entity/Responses/StatusesResponse.php: -------------------------------------------------------------------------------- 1 | code; 60 | } 61 | 62 | /** 63 | * Получить параметр - название статуса. 64 | * 65 | * @return string 66 | */ 67 | public function getName() 68 | { 69 | return $this->name; 70 | } 71 | 72 | /** 73 | * Получить параметр - дополнительный код статуса. 74 | * 75 | * @return string 76 | */ 77 | public function getReasonCode() 78 | { 79 | return $this->reason_code; 80 | } 81 | 82 | /** 83 | * Получить параметр - дата и время установки статуса. 84 | * 85 | * @return string 86 | */ 87 | public function getDateTime() 88 | { 89 | return $this->date_time; 90 | } 91 | 92 | /** 93 | * Получить параметр - наименование города(места), где произошло изменение статуса. 94 | * 95 | * @return string 96 | */ 97 | public function getCity() 98 | { 99 | return $this->city; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/Entity/Responses/TariffListResponse.php: -------------------------------------------------------------------------------- 1 | period_max; 71 | } 72 | 73 | /** 74 | * Получить параметр - минимальное время доставки (в рабочих днях). 75 | * 76 | * @return int 77 | */ 78 | public function getPeriodMin() 79 | { 80 | return $this->period_min; 81 | } 82 | 83 | /** 84 | * Получить параметр - стоимость доставки. 85 | * 86 | * @return float 87 | */ 88 | public function getDeliverySum() 89 | { 90 | return $this->delivery_sum; 91 | } 92 | 93 | /** 94 | * Получить параметр - код тарифа. 95 | * 96 | * @return int 97 | */ 98 | public function getTariffCode() 99 | { 100 | return $this->tariff_code; 101 | } 102 | 103 | /** 104 | * Получить параметр - описание тарифа на языке вывода. 105 | * 106 | * @return string 107 | */ 108 | public function getTariffDescription() 109 | { 110 | return $this->tariff_description; 111 | } 112 | 113 | /** 114 | * Получить параметр - название тарифа на языке вывода. 115 | * 116 | * @return string 117 | */ 118 | public function getTariffName() 119 | { 120 | return $this->tariff_name; 121 | } 122 | 123 | /** 124 | * Получить параметр - режим тарифа. 125 | * 126 | * @return int 127 | */ 128 | public function getDeliveryMode() 129 | { 130 | return $this->delivery_mode; 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /src/Entity/Responses/TariffResponse.php: -------------------------------------------------------------------------------- 1 | delivery_sum; 71 | } 72 | 73 | /** 74 | * Get минимальное время доставки (в рабочих днях). 75 | * 76 | * @return int 77 | */ 78 | public function getPeriodMin() 79 | { 80 | return $this->period_min; 81 | } 82 | 83 | /** 84 | * Get максимальное время доставки (в рабочих днях). 85 | * 86 | * @return int 87 | */ 88 | public function getPeriodMax() 89 | { 90 | return $this->period_max; 91 | } 92 | 93 | /** 94 | * Get расчетный вес (в граммах). 95 | * 96 | * @return int 97 | */ 98 | public function getWeightCalc() 99 | { 100 | return $this->weight_calc; 101 | } 102 | 103 | /** 104 | * Get стоимость доставки с учетом дополнительных услуг. 105 | * 106 | * @return float 107 | */ 108 | public function getTotalSum() 109 | { 110 | return $this->total_sum; 111 | } 112 | 113 | /** 114 | * Get валюта, в которой рассчитана стоимость доставки (код СДЭК). 115 | * 116 | * @return string 117 | */ 118 | public function getCurrency() 119 | { 120 | return $this->currency; 121 | } 122 | 123 | /** 124 | * Get дополнительные услуги. 125 | * 126 | * @return ServicesResponse[] 127 | */ 128 | public function getServices() 129 | { 130 | return $this->services; 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /src/Entity/Responses/ThresholdResponse.php: -------------------------------------------------------------------------------- 1 | type; 40 | } 41 | 42 | /** 43 | * Получить параметр - идентификатор подписки. 44 | * 45 | * @return string 46 | */ 47 | public function getUuid() 48 | { 49 | return $this->uuid; 50 | } 51 | 52 | /** 53 | * Получить параметр - URL, на который клиенту приходят вебхуки. 54 | * 55 | * @return string 56 | */ 57 | public function getUrl() 58 | { 59 | return $this->url; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/Entity/Responses/WorkTimeListResponse.php: -------------------------------------------------------------------------------- 1 | day; 38 | } 39 | 40 | /** 41 | * Получить параметр - Период работы в эти дни. Если в этот день не работают, то не отображается. 42 | * 43 | * @return string 44 | */ 45 | public function getTime() 46 | { 47 | return $this->time; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/Exceptions/CdekV2AuthException.php: -------------------------------------------------------------------------------- 1 | date = $date; 64 | 65 | return $this; 66 | } 67 | 68 | /** 69 | * Устанавливает время доставки С, согласованное с получателем (формат H:i). 70 | * 71 | * @param string $time_from Время доставки С, согласованное с получателем (формат H:i) 72 | * время в формате ISO 8601: hh:mm, пример: 18:15 73 | * 74 | * @return self 75 | */ 76 | public function setTimeFrom(string $time_from) 77 | { 78 | $this->time_from = $time_from; 79 | 80 | return $this; 81 | } 82 | 83 | /** 84 | * Устанавливает время доставки ПО, согласованное с получателем (формат H:i). 85 | * 86 | * @param string $time_to Время доставки ПО, согласованное с получателем (формат H:i) 87 | * 88 | * @return self 89 | */ 90 | public function setTimeTo(string $time_to) 91 | { 92 | $this->time_to = $time_to; 93 | 94 | return $this; 95 | } 96 | 97 | /** 98 | * Устанавливает значение delivery_point. 99 | * 100 | * @param string $delivery_point 101 | * 102 | * @return self 103 | */ 104 | public function setDeliveryPoint($delivery_point) 105 | { 106 | if (!isset($this->to_location)) { 107 | $this->delivery_point = $delivery_point; 108 | 109 | return $this; 110 | } 111 | throw new \InvalidArgumentException('Код ПВЗ delivery_point 112 | нельзя передавать одновременно с параметром Адрес доставки'); 113 | } 114 | 115 | /** 116 | * Устанавливает to_location - не может быть заполнено одновременно с delivery_point. 117 | * 118 | * @param Location $to_location не может быть заполнено одновременно с delivery_point 119 | * 120 | * @return self 121 | */ 122 | public function setToLocation(Location $to_location) 123 | { 124 | if (!isset($this->delivery_point)) { 125 | $this->to_location = $to_location; 126 | 127 | return $this; 128 | } 129 | throw new \InvalidArgumentException('Адрес доставки 130 | Нельзя передавать одновременно с параметром кода ПВЗ delivery_point'); 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /src/Traits/CommonTrait.php: -------------------------------------------------------------------------------- 1 | uuid = $uuid; 66 | 67 | return $this; 68 | } 69 | 70 | /** 71 | * Устанавливает идентификатор заказа. 72 | * 73 | * @param string $order_uuid Идентификатор заказа 74 | * 75 | * @return self 76 | */ 77 | public function setOrderUuid(string $order_uuid) 78 | { 79 | $this->order_uuid = $order_uuid; 80 | 81 | return $this; 82 | } 83 | 84 | /** 85 | * Устанавливает номер заказа СДЭК. 86 | * 87 | * @param int $cdek_number Номер заказа СДЭК 88 | * 89 | * @return self 90 | */ 91 | public function setCdekNumber(int $cdek_number) 92 | { 93 | $this->cdek_number = $cdek_number; 94 | 95 | return $this; 96 | } 97 | 98 | /** 99 | * Экспресс-метод установки order_uuid. 100 | * 101 | * @return self 102 | */ 103 | public static function withOrderUuid(string $order_uuid) 104 | { 105 | $instance = new self(); 106 | 107 | $instance->order_uuid = $order_uuid; 108 | 109 | return $instance; 110 | } 111 | 112 | /** 113 | * Экспресс-метод установки cdek_number. 114 | * 115 | * @return self 116 | */ 117 | public static function withCdekNumber(string $cdek_number) 118 | { 119 | $instance = new self(); 120 | 121 | $instance->cdek_number = $cdek_number; 122 | 123 | return $instance; 124 | } 125 | 126 | /** 127 | * Получить значение - идентификатор заявки. 128 | * 129 | * @return string 130 | */ 131 | public function getUuid() 132 | { 133 | return $this->uuid; 134 | } 135 | 136 | /** 137 | * Получить значение - идентификатор заказа. 138 | * 139 | * @return string 140 | */ 141 | public function getOrderUuid() 142 | { 143 | return $this->order_uuid; 144 | } 145 | 146 | /** 147 | * Получить значение - номер заказа СДЭК. 148 | * 149 | * @return int 150 | */ 151 | public function getCdekNumber() 152 | { 153 | return $this->cdek_number; 154 | } 155 | 156 | /** 157 | * Получить значение - отправитель. 158 | * 159 | * @return Contact 160 | */ 161 | public function getSender() 162 | { 163 | return $this->sender; 164 | } 165 | 166 | /** 167 | * Получить параметр - номер заказа в ИС Клиента. 168 | * 169 | * @return string 170 | */ 171 | public function getNumber() 172 | { 173 | return $this->number; 174 | } 175 | 176 | /** 177 | * Получить параметр - комментарий к заказу. 178 | * 179 | * @return string 180 | */ 181 | public function getComment() 182 | { 183 | return $this->comment; 184 | } 185 | 186 | /** 187 | * Установить параметр - комментарий к заказу. 188 | * 189 | * @param string $comment комментарий к заказу 190 | * 191 | * @return self 192 | */ 193 | public function setComment(string $comment) 194 | { 195 | $this->comment = $comment; 196 | 197 | return $this; 198 | } 199 | } 200 | -------------------------------------------------------------------------------- /src/Traits/ContactTrait.php: -------------------------------------------------------------------------------- 1 | company = $company; 98 | 99 | return $this; 100 | } 101 | 102 | /** 103 | * Устанавливает ФИО контактного лица. 104 | * 105 | * @param string $name ФИО контактного лица 106 | * 107 | * @return self 108 | */ 109 | public function setName(string $name) 110 | { 111 | $this->name = $name; 112 | 113 | return $this; 114 | } 115 | 116 | /** 117 | * Устанавливает электронный адрес 118 | * 119 | * @param string $email Электронный адрес 120 | * 121 | * @return self 122 | */ 123 | public function setEmail(string $email) 124 | { 125 | $this->email = $email; 126 | 127 | return $this; 128 | } 129 | 130 | /** 131 | * Устанавливает список телефонов. 132 | * 133 | * @param string $number - Основной телефон 134 | * @param string|null $additional - Дополнительный телефон 135 | * 136 | * @return self 137 | */ 138 | public function setPhones($number, $additional = null) 139 | { 140 | $args = \get_defined_vars(); 141 | $this->phones[] = Phone::express($args); 142 | 143 | return $this; 144 | } 145 | 146 | /** 147 | * Устанавливает серия паспорта получателя(только для международных заказов). 148 | * 149 | * @param string $passport_series Серия паспорта получателя(только для международных заказов) 150 | * 151 | * @return self 152 | */ 153 | public function setPassportSeries(string $passport_series) 154 | { 155 | $this->passport_series = $passport_series; 156 | 157 | return $this; 158 | } 159 | 160 | /** 161 | * Устанавливает номер паспорта получателя (только для международных заказов). 162 | * 163 | * @param string $passport_number Номер паспорта получателя (только для международных заказов) 164 | * 165 | * @return self 166 | */ 167 | public function setPassportNumber(string $passport_number) 168 | { 169 | $this->passport_number = $passport_number; 170 | 171 | return $this; 172 | } 173 | 174 | /** 175 | * Устанавливает дата выдачи паспорта получателя (только для международных заказов). 176 | * 177 | * @param string $passport_date_of_issue Дата выдачи паспорта получателя (только для международных заказов) 178 | * 179 | * @return self 180 | */ 181 | public function setPassportDateOfIssue(string $passport_date_of_issue) 182 | { 183 | $this->passport_date_of_issue = $passport_date_of_issue; 184 | 185 | return $this; 186 | } 187 | 188 | /** 189 | * Устанавливает орган выдачи паспорта получателя (только для международных заказов). 190 | * 191 | * @param string $passport_organization Орган выдачи паспорта получателя (только для международных заказов) 192 | * 193 | * @return self 194 | */ 195 | public function setPassportOrganization(string $passport_organization) 196 | { 197 | $this->passport_organization = $passport_organization; 198 | 199 | return $this; 200 | } 201 | 202 | /** 203 | * Устанавливает дата рождения получателя (только для международных заказов). 204 | * 205 | * @param string $passport_date_of_birth Дата рождения получателя (только для международных заказов) 206 | * 207 | * @return self 208 | */ 209 | public function setPassportDateOfBirth(string $passport_date_of_birth) 210 | { 211 | $this->passport_date_of_birth = $passport_date_of_birth; 212 | 213 | return $this; 214 | } 215 | 216 | /** 217 | * Устанавливает иНН получателя (только для международных заказов). 218 | * 219 | * @param string $tin ИНН получателя (только для международных заказов) 220 | * 221 | * @return self 222 | */ 223 | public function setTin(string $tin) 224 | { 225 | $this->tin = $tin; 226 | 227 | return $this; 228 | } 229 | } 230 | -------------------------------------------------------------------------------- /src/Traits/DeliveryPointsTrait.php: -------------------------------------------------------------------------------- 1 | WeightMin). 65 | * 66 | * @var int|null 67 | */ 68 | protected $weight_min; 69 | 70 | /** 71 | * Является ли ПВЗ только пунктом выдачи или также осуществляет приём грузов. 72 | * 73 | * @var bool|null 74 | */ 75 | protected $take_only; 76 | 77 | /** 78 | * Получение параметра - есть терминал оплаты. 79 | * 80 | * @return bool|null 81 | */ 82 | public function getHaveCashless() 83 | { 84 | return $this->have_cashless; 85 | } 86 | 87 | /** 88 | * Установка параметра - есть терминал оплаты. 89 | * 90 | * @param bool|null $have_cashless есть терминал оплаты 91 | * 92 | * @return self 93 | */ 94 | public function setHaveCashless($have_cashless) 95 | { 96 | $this->have_cashless = $have_cashless; 97 | 98 | return $this; 99 | } 100 | 101 | /** 102 | * Получение параметра - есть приём наличных. 103 | * 104 | * @return bool|null 105 | */ 106 | public function getHaveCash() 107 | { 108 | return $this->have_cash; 109 | } 110 | 111 | /** 112 | * Установка параметра - есть приём наличных. 113 | * 114 | * @param bool|null $have_cash есть приём наличных 115 | * 116 | * @return self 117 | */ 118 | public function setHaveCash($have_cash) 119 | { 120 | $this->have_cash = $have_cash; 121 | 122 | return $this; 123 | } 124 | 125 | /** 126 | * Получение параметра - разрешен наложенный платеж в ПВЗ. 127 | * 128 | * @return bool|null 129 | */ 130 | public function getAllowedCod() 131 | { 132 | return $this->allowed_cod; 133 | } 134 | 135 | /** 136 | * Установка параметра - разрешен наложенный платеж в ПВЗ. 137 | * 138 | * @param bool|null $allowed_cod разрешен наложенный платеж в ПВЗ 139 | * 140 | * @return self 141 | */ 142 | public function setAllowedCod($allowed_cod) 143 | { 144 | $this->allowed_cod = $allowed_cod; 145 | 146 | return $this; 147 | } 148 | 149 | /** 150 | * Получение параметра - есть ли примерочная. 151 | * 152 | * @return bool|null 153 | */ 154 | public function getIsDressingRoom() 155 | { 156 | return $this->is_dressing_room; 157 | } 158 | 159 | /** 160 | * Установка параметра - есть ли примерочная. 161 | * 162 | * @param bool|null $is_dressing_room есть ли примерочная 163 | * 164 | * @return self 165 | */ 166 | public function setIsDressingRoom($is_dressing_room) 167 | { 168 | $this->is_dressing_room = $is_dressing_room; 169 | 170 | return $this; 171 | } 172 | 173 | /** 174 | * Получение параметра - является пунктом выдачи. 175 | * 176 | * @return bool|null 177 | */ 178 | public function getIsHandout() 179 | { 180 | return $this->is_handout; 181 | } 182 | 183 | /** 184 | * Установка параметра - является пунктом выдачи. 185 | * 186 | * @param bool|null $is_handout является пунктом выдачи 187 | * 188 | * @return self 189 | */ 190 | public function setIsHandout($is_handout) 191 | { 192 | $this->is_handout = $is_handout; 193 | 194 | return $this; 195 | } 196 | 197 | /** 198 | * Получение параметра - есть ли в офисе приём заказов. 199 | * 200 | * @return bool|null 201 | */ 202 | public function getIsReception() 203 | { 204 | return $this->is_reception; 205 | } 206 | 207 | /** 208 | * Установка параметра - есть ли в офисе приём заказов. 209 | * 210 | * @param bool|null $is_reception есть ли в офисе приём заказов 211 | * 212 | * @return self 213 | */ 214 | public function setIsReception($is_reception) 215 | { 216 | $this->is_reception = $is_reception; 217 | 218 | return $this; 219 | } 220 | 221 | /** 222 | * Получение параметра - максимальный вес (в кг.), принимаемый в ПВЗ (<=WeightMax). 223 | * 224 | * @return int|null 225 | */ 226 | public function getWeightMax() 227 | { 228 | return $this->weight_max; 229 | } 230 | 231 | /** 232 | * Установка параметра - максимальный вес (в кг.), принимаемый в ПВЗ (<=WeightMax). 233 | * 234 | * @param int|null $weight_max Максимальный вес (в кг.), принимаемый в ПВЗ (<=WeightMax). 235 | * 236 | * @return self 237 | */ 238 | public function setWeightMax($weight_max) 239 | { 240 | $this->weight_max = $weight_max; 241 | 242 | return $this; 243 | } 244 | 245 | /** 246 | * Получение параметра - минимальный вес (в кг.), принимаемый в ПВЗ (> WeightMin). 247 | * 248 | * @return int|null 249 | */ 250 | public function getWeightMin() 251 | { 252 | return $this->weight_min; 253 | } 254 | 255 | /** 256 | * Установка параметра - минимальный вес (в кг.), принимаемый в ПВЗ (> WeightMin). 257 | * 258 | * @param int|null $weight_min Минимальный вес (в кг.), принимаемый в ПВЗ (> WeightMin). 259 | * 260 | * @return self 261 | */ 262 | public function setWeightMin($weight_min) 263 | { 264 | $this->weight_min = $weight_min; 265 | 266 | return $this; 267 | } 268 | 269 | /** 270 | * Получение параметра - является ли ПВЗ только пунктом выдачи или также осуществляет приём грузов. 271 | * 272 | * @return bool|null 273 | */ 274 | public function getTakeOnly() 275 | { 276 | return $this->take_only; 277 | } 278 | 279 | /** 280 | * Установка параметра - является ли ПВЗ только пунктом выдачи или также осуществляет приём грузов. 281 | * 282 | * @param bool|null $take_only является ли ПВЗ только пунктом выдачи или также осуществляет приём грузов 283 | * 284 | * @return self 285 | */ 286 | public function setTakeOnly($take_only) 287 | { 288 | $this->take_only = $take_only; 289 | 290 | return $this; 291 | } 292 | } 293 | -------------------------------------------------------------------------------- /src/Traits/ExpressTrait.php: -------------------------------------------------------------------------------- 1 | $value) { 22 | if (!\is_null($value)) { 23 | $instance->{$key} = $value; 24 | } 25 | } 26 | 27 | return $instance; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/Traits/IntakesTrait.php: -------------------------------------------------------------------------------- 1 | intake_date; 81 | } 82 | 83 | /** 84 | * Установить параметр - дата ожидания курьера (дата в формате ISO 8601: YYYY-MM-DD). 85 | * 86 | * @param string $intake_date дата ожидания курьера (дата в формате ISO 8601: YYYY-MM-DD) 87 | * 88 | * @return self 89 | */ 90 | public function setIntakeDate(string $intake_date) 91 | { 92 | $this->intake_date = $intake_date; 93 | 94 | return $this; 95 | } 96 | 97 | /** 98 | * Получить параметр - время начала ожидания курьера (время в формате ISO 8601: hh:mm). 99 | * 100 | * @return string 101 | */ 102 | public function getIntakeTimeFrom() 103 | { 104 | return $this->intake_time_from; 105 | } 106 | 107 | /** 108 | * Установить параметр - время начала ожидания курьера (время в формате ISO 8601: hh:mm). 109 | * 110 | * @param string $intake_time_from время начала ожидания курьера (время в формате ISO 8601: hh:mm) 111 | * 112 | * @return self 113 | */ 114 | public function setIntakeTimeFrom(string $intake_time_from) 115 | { 116 | $this->intake_time_from = $intake_time_from; 117 | 118 | return $this; 119 | } 120 | 121 | /** 122 | * Получить параметр - время окончания ожидания курьера (время в формате ISO 8601: hh:mm). 123 | * 124 | * @return string 125 | */ 126 | public function getIntakeTimeTo() 127 | { 128 | return $this->intake_time_to; 129 | } 130 | 131 | /** 132 | * Установить параметр - время окончания ожидания курьера (время в формате ISO 8601: hh:mm). 133 | * 134 | * @param string $intake_time_to время окончания ожидания курьера (время в формате ISO 8601: hh:mm) 135 | * 136 | * @return self 137 | */ 138 | public function setIntakeTimeTo(string $intake_time_to) 139 | { 140 | $this->intake_time_to = $intake_time_to; 141 | 142 | return $this; 143 | } 144 | 145 | /** 146 | * Получить параметр - время начала обеда, должно входить в диапазон [intake_time_to;intake_time_to]. 147 | * 148 | * @return string 149 | */ 150 | public function getLunchTimeFrom() 151 | { 152 | return $this->lunch_time_from; 153 | } 154 | 155 | /** 156 | * Установить параметр - время начала обеда, должно входить в диапазон [intake_time_to;intake_time_to]. 157 | * 158 | * @param string $lunch_time_from время начала обеда, должно входить в диапазон [intake_time_to;intake_time_to] 159 | * 160 | * @return self 161 | */ 162 | public function setLunchTimeFrom(string $lunch_time_from) 163 | { 164 | $this->lunch_time_from = $lunch_time_from; 165 | 166 | return $this; 167 | } 168 | 169 | /** 170 | * Получить параметр - время окончания обеда, должно входить в диапазон [intake_time_to;intake_time_to]. 171 | * 172 | * @return string 173 | */ 174 | public function getLunchTimeTo() 175 | { 176 | return $this->lunch_time_to; 177 | } 178 | 179 | /** 180 | * Установить параметр - время окончания обеда, должно входить в диапазон [intake_time_to;intake_time_to]. 181 | * 182 | * @param string $lunch_time_to время окончания обеда, должно входить в диапазон [intake_time_to;intake_time_to] 183 | * 184 | * @return self 185 | */ 186 | public function setLunchTimeTo(string $lunch_time_to) 187 | { 188 | $this->lunch_time_to = $lunch_time_to; 189 | 190 | return $this; 191 | } 192 | 193 | /** 194 | * Получить параметр - описание груза. 195 | * 196 | * @return string 197 | */ 198 | public function getName() 199 | { 200 | return $this->name; 201 | } 202 | 203 | /** 204 | * Установить параметр - описание груза. 205 | * 206 | * @param string $name описание груза 207 | * 208 | * @return self 209 | */ 210 | public function setName(string $name) 211 | { 212 | $this->name = $name; 213 | 214 | return $this; 215 | } 216 | 217 | /** 218 | * Получить параметр - необходим прозвон отправителя. 219 | * 220 | * @return bool 221 | */ 222 | public function getNeedCall() 223 | { 224 | return $this->need_call; 225 | } 226 | 227 | /** 228 | * Установить параметр - необходим прозвон отправителя. 229 | * 230 | * @param bool $need_call необходим прозвон отправителя 231 | * 232 | * @return self 233 | */ 234 | public function setNeedCall(bool $need_call) 235 | { 236 | $this->need_call = $need_call; 237 | 238 | return $this; 239 | } 240 | 241 | /** 242 | * Получить параметр - адрес отправителя (забора). 243 | * 244 | * @return LocationResponse 245 | */ 246 | public function getFromLocation() 247 | { 248 | return $this->from_location; 249 | } 250 | 251 | /** 252 | * Установить параметр - адрес отправителя (забора). 253 | * 254 | * @param Location $from_location адрес отправителя (забора) 255 | * 256 | * @return self 257 | */ 258 | public function setFromLocation(Location $from_location) 259 | { 260 | $this->from_location = $from_location; 261 | 262 | return $this; 263 | } 264 | } 265 | -------------------------------------------------------------------------------- /src/Traits/ItemTrait.php: -------------------------------------------------------------------------------- 1 | name = $name; 124 | 125 | return $this; 126 | } 127 | 128 | /** 129 | * Устанавливает идентификатор/артикул товара. 130 | * 131 | * @param string $ware_key Идентификатор/артикул товара 132 | * 133 | * @return self 134 | */ 135 | public function setWareKey(string $ware_key) 136 | { 137 | $this->ware_key = $ware_key; 138 | 139 | return $this; 140 | } 141 | 142 | /** 143 | * Устанавливает маркировка товара/вложения. 144 | * 145 | * @param string $marking Маркировка товара/вложения 146 | * 147 | * @return self 148 | */ 149 | public function setMarking(string $marking) 150 | { 151 | $this->marking = $marking; 152 | 153 | return $this; 154 | } 155 | 156 | /** 157 | * Устанавливает параметр оплата за товар при получении. 158 | * 159 | * @param float $value Оплата за товар при получении 160 | * @param float|null $vat_sum Сумма НДС 161 | * @param int|null $vat_rate Ставка НДС (значение - 0, 10, 18, 20 и т.п. , null - нет НДС) 162 | * 163 | * @return self 164 | */ 165 | public function setPayment($value, $vat_sum = null, $vat_rate = null) 166 | { 167 | if (!\is_null($value)) { 168 | $args = \get_defined_vars(); 169 | $this->payment = Money::express($args); 170 | } 171 | 172 | return $this; 173 | } 174 | 175 | /** 176 | * Устанавливает объявленную стоимость товара. 177 | * 178 | * @param float $cost Объявленная стоимость товара 179 | * 180 | * @return self 181 | */ 182 | public function setCost(float $cost) 183 | { 184 | $this->cost = $cost; 185 | 186 | return $this; 187 | } 188 | 189 | /** 190 | * Устанавливает вес (за единицу товара, в граммах). 191 | * 192 | * @param int $weight Вес (за единицу товара, в граммах) 193 | * 194 | * @return self 195 | */ 196 | public function setWeight(int $weight) 197 | { 198 | $this->weight = $weight; 199 | 200 | return $this; 201 | } 202 | 203 | /** 204 | * Устанавливает вес брутто (только для международных заказов). 205 | * 206 | * @param int $weight_gross Вес брутто (только для международных заказов) 207 | * 208 | * @return self 209 | */ 210 | public function setWeightGross(int $weight_gross) 211 | { 212 | $this->weight_gross = $weight_gross; 213 | 214 | return $this; 215 | } 216 | 217 | /** 218 | * Устанавливает количество единиц товара. 219 | * 220 | * @param int $amount Количество единиц товара 221 | * 222 | * @return self 223 | */ 224 | public function setAmount(int $amount) 225 | { 226 | $this->amount = $amount; 227 | 228 | return $this; 229 | } 230 | 231 | /** 232 | * Устанавливает наименование на иностранном языке. 233 | * 234 | * @param string $name_i18n Наименование на иностранном языке 235 | * 236 | * @return self 237 | */ 238 | public function setName_i18n(string $name_i18n) 239 | { 240 | $this->name_i18n = $name_i18n; 241 | 242 | return $this; 243 | } 244 | 245 | /** 246 | * Устанавливает бренд на иностранном языке. 247 | * 248 | * @param string $brand Бренд на иностранном языке 249 | * 250 | * @return self 251 | */ 252 | public function setBrand(string $brand) 253 | { 254 | $this->brand = $brand; 255 | 256 | return $this; 257 | } 258 | 259 | /** 260 | * Устанавливает код страны в формате ISO_3166-1_alpha-2. 261 | * 262 | * @param string $country_code Код страны в формате ISO_3166-1_alpha-2 263 | * 264 | * @return self 265 | */ 266 | public function setCountryCode(string $country_code) 267 | { 268 | $this->country_code = $country_code; 269 | 270 | return $this; 271 | } 272 | 273 | /** 274 | * Устанавливает код материала. 275 | * 276 | * @param int $material Код материала 277 | * 278 | * @return self 279 | */ 280 | public function setMaterial(int $material) 281 | { 282 | $this->material = $material; 283 | 284 | return $this; 285 | } 286 | 287 | /** 288 | * Устанавливает содержит ли радиочастотные модули (wifi/gsm). 289 | * 290 | * @param bool $wifi_gsm Содержит ли радиочастотные модули (wifi/gsm) 291 | * 292 | * @return self 293 | */ 294 | public function setWifiGsm(bool $wifi_gsm = false) 295 | { 296 | $this->wifi_gsm = $wifi_gsm; 297 | 298 | return $this; 299 | } 300 | 301 | /** 302 | * Устанавливает ссылка на сайт интернет-магазина с описанием товара. 303 | * 304 | * @param string $url Ссылка на сайт интернет-магазина с описанием товара 305 | * 306 | * @return self 307 | */ 308 | public function setUrl(string $url) 309 | { 310 | $this->url = $url; 311 | 312 | return $this; 313 | } 314 | 315 | /** 316 | * Get наименование товара. 317 | * 318 | * @return string 319 | */ 320 | public function getName() 321 | { 322 | return $this->name; 323 | } 324 | 325 | /** 326 | * Get идентификатор/артикул товара. 327 | * 328 | * @return string 329 | */ 330 | public function getWareKey() 331 | { 332 | return $this->ware_key; 333 | } 334 | 335 | /** 336 | * Get маркировка товара/вложения. 337 | * 338 | * @return string 339 | */ 340 | public function getMarking() 341 | { 342 | return $this->marking; 343 | } 344 | 345 | /** 346 | * Get оплата за товар при получении. 347 | * 348 | * @return Money 349 | */ 350 | public function getPayment() 351 | { 352 | return $this->payment; 353 | } 354 | 355 | /** 356 | * Get объявленная стоимость товара. 357 | * 358 | * @return float 359 | */ 360 | public function getCost() 361 | { 362 | return $this->cost; 363 | } 364 | 365 | /** 366 | * Get вес (за единицу товара, в граммах). 367 | * 368 | * @return int 369 | */ 370 | public function getWeight() 371 | { 372 | return $this->weight; 373 | } 374 | 375 | /** 376 | * Get вес брутто (только для международных заказов). 377 | * 378 | * @return int 379 | */ 380 | public function getWeightGross() 381 | { 382 | return $this->weight_gross; 383 | } 384 | 385 | /** 386 | * Get количество единиц товара. 387 | * 388 | * @return int 389 | */ 390 | public function getAmount() 391 | { 392 | return $this->amount; 393 | } 394 | 395 | /** 396 | * Get количество врученных единиц товара (в штуках). 397 | * 398 | * @return int 399 | */ 400 | public function getDeliveryAmount() 401 | { 402 | return $this->delivery_amount; 403 | } 404 | 405 | /** 406 | * Get наименование на иностранном языке. 407 | * 408 | * @return string 409 | */ 410 | public function getNameI18n() 411 | { 412 | return $this->name_i18n; 413 | } 414 | 415 | /** 416 | * Get бренд на иностранном языке. 417 | * 418 | * @return string 419 | */ 420 | public function getBrand() 421 | { 422 | return $this->brand; 423 | } 424 | 425 | /** 426 | * Get код страны в формате ISO_3166-1_alpha-2. 427 | * 428 | * @return string 429 | */ 430 | public function getCountryCode() 431 | { 432 | return $this->country_code; 433 | } 434 | 435 | /** 436 | * Get код материала. 437 | * 438 | * @return int 439 | */ 440 | public function getMaterial() 441 | { 442 | return $this->material; 443 | } 444 | 445 | /** 446 | * Get содержит ли радиочастотные модули (wifi/gsm). 447 | * 448 | * @return bool 449 | */ 450 | public function getWifiGsm() 451 | { 452 | return $this->wifi_gsm; 453 | } 454 | 455 | /** 456 | * Get ссылка на сайт интернет-магазина с описанием товара. 457 | * 458 | * @return string 459 | */ 460 | public function getUrl() 461 | { 462 | return $this->url; 463 | } 464 | } 465 | -------------------------------------------------------------------------------- /src/Traits/LocationTrait.php: -------------------------------------------------------------------------------- 1 | code; 126 | } 127 | 128 | /** 129 | * @return string 130 | */ 131 | public function getCountryCode() 132 | { 133 | return $this->country_code; 134 | } 135 | 136 | /** 137 | * @return string 138 | */ 139 | public function getCountry() 140 | { 141 | return $this->country; 142 | } 143 | 144 | /** 145 | * @return string 146 | */ 147 | public function getCountryCodes() 148 | { 149 | return $this->country_codes; 150 | } 151 | 152 | /** 153 | * @return string 154 | */ 155 | public function getAddress() 156 | { 157 | return $this->address; 158 | } 159 | 160 | /** 161 | * @return int 162 | */ 163 | public function getPostalCode() 164 | { 165 | return $this->postal_code; 166 | } 167 | 168 | /** 169 | * @return string 170 | */ 171 | public function getCity() 172 | { 173 | return $this->city; 174 | } 175 | 176 | /** 177 | * @return string 178 | */ 179 | public function getRegion() 180 | { 181 | return $this->region; 182 | } 183 | 184 | /** 185 | * @return int 186 | */ 187 | public function getRegionCode() 188 | { 189 | return $this->region_code; 190 | } 191 | 192 | /** 193 | * @return string 194 | */ 195 | public function getKladrCode() 196 | { 197 | return $this->kladr_code; 198 | } 199 | 200 | /** 201 | * @return string 202 | */ 203 | public function getKladrRegionCode() 204 | { 205 | return $this->kladr_region_code; 206 | } 207 | 208 | /** 209 | * @return string 210 | */ 211 | public function getFiasGuid() 212 | { 213 | return $this->fias_guid; 214 | } 215 | 216 | /** 217 | * @return float 218 | */ 219 | public function getLongitude() 220 | { 221 | return $this->longitude; 222 | } 223 | 224 | /** 225 | * @return float 226 | */ 227 | public function getLatitude() 228 | { 229 | return $this->latitude; 230 | } 231 | 232 | /** 233 | * @return string|null 234 | */ 235 | public function getSubRegion() 236 | { 237 | return $this->sub_region; 238 | } 239 | } 240 | -------------------------------------------------------------------------------- /src/Traits/MoneyTrait.php: -------------------------------------------------------------------------------- 1 | value = $value; 46 | 47 | return $this; 48 | } 49 | 50 | /** 51 | * Устанавливает сумма НДС 52 | * 53 | * @param float|null $vat_sum Сумма НДС 54 | * 55 | * @return self 56 | */ 57 | public function setVatSum($vat_sum) 58 | { 59 | $this->vat_sum = $vat_sum; 60 | 61 | return $this; 62 | } 63 | 64 | /** 65 | * Устанавливает ставка НДС 66 | * 67 | * @param int|null $vat_rate Ставка НДС 68 | * 69 | * @return self 70 | */ 71 | public function setVatRate($vat_rate) 72 | { 73 | $this->vat_rate = $vat_rate; 74 | 75 | return $this; 76 | } 77 | 78 | /** 79 | * Получить значение - сумма в валюте. 80 | * 81 | * @return float 82 | */ 83 | public function getValue() 84 | { 85 | return $this->value; 86 | } 87 | 88 | /** 89 | * Получить значение - сумма НДС 90 | * 91 | * @return float|null 92 | */ 93 | public function getVatSum() 94 | { 95 | return $this->vat_sum; 96 | } 97 | 98 | /** 99 | * Получить значение - ставка НДС 100 | * 101 | * @return int|null 102 | */ 103 | public function getVatRate() 104 | { 105 | return $this->vat_rate; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/Traits/OrderTrait.php: -------------------------------------------------------------------------------- 1 | developer_key; 108 | } 109 | 110 | /** 111 | * Получить параметр - код ПВЗ для забора. 112 | * 113 | * @return string 114 | */ 115 | public function getShipmentPoint() 116 | { 117 | return $this->shipment_point; 118 | } 119 | 120 | /** 121 | * Получить параметр - код ПВЗ СДЭК для доставки. 122 | * 123 | * @return string 124 | */ 125 | public function getDeliveryPoint() 126 | { 127 | return $this->delivery_point; 128 | } 129 | 130 | /** 131 | * Получить параметр - код валюты объявленной стоимости заказа. 132 | * 133 | * @return string 134 | */ 135 | public function getItemsCostCurrency() 136 | { 137 | return $this->items_cost_currency; 138 | } 139 | 140 | /** 141 | * Получить параметр - код валюты наложенного платежа. 142 | * 143 | * @return string 144 | */ 145 | public function getRecipientCurrency() 146 | { 147 | return $this->recipient_currency; 148 | } 149 | 150 | /** 151 | * Получить параметр - грузоотправитель. 152 | * 153 | * @return string 154 | */ 155 | public function getShipperName() 156 | { 157 | return $this->shipper_name; 158 | } 159 | 160 | /** 161 | * Получить параметр - адрес грузоотправителя. 162 | * 163 | * @return string 164 | */ 165 | public function getShipperAddress() 166 | { 167 | return $this->shipper_address; 168 | } 169 | 170 | /** 171 | * Получить параметр - стоимость доставки, которую ИМ берет с получателя. 172 | * 173 | * @return Money 174 | */ 175 | public function getDeliveryRecipientCost() 176 | { 177 | return $this->delivery_recipient_cost; 178 | } 179 | 180 | /** 181 | * Получить параметр - доп. сбор за доставку (которую ИМ берет с получателя) в зависимости от суммы заказа. 182 | * 183 | * @return Threshold[] 184 | */ 185 | public function getDeliveryRecipientCostAdv() 186 | { 187 | return $this->delivery_recipient_cost_adv; 188 | } 189 | 190 | /** 191 | * Получить параметр - реквизиты реального продавца. 192 | * 193 | * @return Seller 194 | */ 195 | public function getSeller() 196 | { 197 | return $this->seller; 198 | } 199 | 200 | /** 201 | * Получить параметр - получатель. 202 | * 203 | * @return Contact 204 | */ 205 | public function getRecipient() 206 | { 207 | return $this->recipient; 208 | } 209 | } 210 | -------------------------------------------------------------------------------- /src/Traits/PackageTrait.php: -------------------------------------------------------------------------------- 1 | number = $number; 82 | 83 | return $this; 84 | } 85 | 86 | /** 87 | * Устанавливает позиции товаров в упаковке. 88 | * 89 | * @param Item[] $items Массив Item Позиции товаров в упаковке 90 | * 91 | * @return self 92 | */ 93 | public function setItems($items) 94 | { 95 | $this->items = $items; 96 | 97 | return $this; 98 | } 99 | 100 | /** 101 | * Возвращает позиции товаров в упаковке. 102 | * 103 | * @return array 104 | */ 105 | public function getItems() 106 | { 107 | return $this->items; 108 | } 109 | 110 | /** 111 | * Получить значение - общий вес (в граммах). 112 | * 113 | * @return int 114 | */ 115 | public function getWeight() 116 | { 117 | return $this->weight; 118 | } 119 | 120 | /** 121 | * Экспресс-метод установки адреса. 122 | * 123 | * @param int $weight общий вес (в граммах) 124 | * 125 | * @return self 126 | */ 127 | public static function withWeight($weight) 128 | { 129 | $instance = new self(); 130 | 131 | $instance->weight = $weight; 132 | 133 | return $instance; 134 | } 135 | 136 | /** 137 | * Установить значение - общий вес (в граммах). 138 | * 139 | * @param int $weight общий вес (в граммах) 140 | * 141 | * @return self 142 | */ 143 | public function setWeight(int $weight) 144 | { 145 | $this->weight = $weight; 146 | 147 | return $this; 148 | } 149 | 150 | /** 151 | * Получить значение - габариты упаковки. Длина (в сантиметрах). 152 | * 153 | * @return int 154 | */ 155 | public function getLength() 156 | { 157 | return $this->length; 158 | } 159 | 160 | /** 161 | * Установить значение - габариты упаковки. Длина (в сантиметрах). 162 | * 163 | * @param int $length Габариты упаковки. Длина (в сантиметрах). 164 | * 165 | * @return self 166 | */ 167 | public function setLength(int $length) 168 | { 169 | $this->length = $length; 170 | 171 | return $this; 172 | } 173 | 174 | /** 175 | * Получить значение - габариты упаковки. Ширина (в сантиметрах). 176 | * 177 | * @return int 178 | */ 179 | public function getWidth() 180 | { 181 | return $this->width; 182 | } 183 | 184 | /** 185 | * Установить значение - габариты упаковки. Ширина (в сантиметрах). 186 | * 187 | * @param int $width Габариты упаковки. Ширина (в сантиметрах). 188 | * 189 | * @return self 190 | */ 191 | public function setWidth(int $width) 192 | { 193 | $this->width = $width; 194 | 195 | return $this; 196 | } 197 | 198 | /** 199 | * Получить значение - габариты упаковки. Высота (в сантиметрах). 200 | * 201 | * @return int 202 | */ 203 | public function getHeight() 204 | { 205 | return $this->height; 206 | } 207 | 208 | /** 209 | * Установить значение - габариты упаковки. Высота (в сантиметрах). 210 | * 211 | * @param int $height Габариты упаковки. Высота (в сантиметрах). 212 | * 213 | * @return self 214 | */ 215 | public function setHeight(int $height) 216 | { 217 | $this->height = $height; 218 | 219 | return $this; 220 | } 221 | 222 | /** 223 | * Получить значение - комментарий к упаковке. 224 | * 225 | * @return string 226 | */ 227 | public function getComment() 228 | { 229 | return $this->comment; 230 | } 231 | 232 | /** 233 | * Установить значение - комментарий к упаковке. 234 | * 235 | * @param string $comment комментарий к упаковке 236 | * 237 | * @return self 238 | */ 239 | public function setComment(string $comment) 240 | { 241 | $this->comment = $comment; 242 | 243 | return $this; 244 | } 245 | 246 | /** 247 | * Получить значение - id упаковке. 248 | * 249 | * @return string 250 | */ 251 | public function getPackageId() 252 | { 253 | return $this->package_id; 254 | } 255 | 256 | /** 257 | * Установить значение - id упаковки. 258 | * 259 | * @param string $package_id id упаковке 260 | * 261 | * @return self 262 | */ 263 | public function setPackageId(string $package_id) 264 | { 265 | $this->package_id = $package_id; 266 | 267 | return $this; 268 | } 269 | 270 | /** 271 | * Получить параметр - номер 272 | * 273 | * @return string 274 | */ 275 | public function getNumber() 276 | { 277 | return $this->number; 278 | } 279 | } 280 | -------------------------------------------------------------------------------- /src/Traits/PhoneTrait.php: -------------------------------------------------------------------------------- 1 | number = $number; 43 | 44 | return $this; 45 | } 46 | 47 | /** 48 | * Устанавливает добавочный номер 49 | * 50 | * @param string $additional Добавочный номер 51 | * 52 | * @return self 53 | */ 54 | public function setAdditional(string $additional) 55 | { 56 | $this->additional = $additional; 57 | 58 | return $this; 59 | } 60 | 61 | /** 62 | * Получить параметр - номер телефона. 63 | * 64 | * @return string 65 | */ 66 | public function getNumber() 67 | { 68 | return $this->number; 69 | } 70 | 71 | /** 72 | * Получить параметр - добавочный номер 73 | * 74 | * @return string 75 | */ 76 | public function getAdditional() 77 | { 78 | return $this->additional; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/Traits/SellerTrait.php: -------------------------------------------------------------------------------- 1 | name = $name; 61 | 62 | return $this; 63 | } 64 | 65 | /** 66 | * Устанавливает ИНН истинного продавца. 67 | * 68 | * @param int|string $inn ИНН истинного продавца 69 | * 70 | * @return self 71 | */ 72 | public function setInn(int|string $inn) 73 | { 74 | $this->inn = $inn; 75 | 76 | return $this; 77 | } 78 | 79 | /** 80 | * Устанавливает телефон истинного продавца. 81 | * 82 | * @param string $phone Телефон истинного продавца 83 | * 84 | * @return self 85 | */ 86 | public function setPhone(string $phone) 87 | { 88 | $this->phone = $phone; 89 | 90 | return $this; 91 | } 92 | 93 | /** 94 | * Устанавливает код формы собственности. 95 | * 96 | * @param int $ownership_form Код формы собственности 97 | * 98 | * @return self 99 | */ 100 | public function setOwnershipForm(int $ownership_form) 101 | { 102 | $this->ownership_form = $ownership_form; 103 | 104 | return $this; 105 | } 106 | 107 | /** 108 | * Устанавливает только для международных заказов. 109 | * 110 | * @param string $address Только для международных заказов 111 | * 112 | * @return self 113 | */ 114 | public function setAddress(string $address) 115 | { 116 | $this->address = $address; 117 | 118 | return $this; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /src/Traits/ServicesTrait.php: -------------------------------------------------------------------------------- 1 | code = $code; 38 | 39 | return $this; 40 | } 41 | 42 | /** 43 | * Устанавливает параметр дополнительной услуги. 44 | * 45 | * @param float $parameter Параметр дополнительной услуги 46 | * 47 | * @return self 48 | */ 49 | public function setParameter(float $parameter) 50 | { 51 | $this->parameter = $parameter; 52 | 53 | return $this; 54 | } 55 | 56 | /** 57 | * Установить параметр дополнительной услуги. 58 | * 59 | * @return float 60 | */ 61 | public function getParameter() 62 | { 63 | return $this->parameter; 64 | } 65 | 66 | /** 67 | * Установить код дополнительной услуги. 68 | * 69 | * @return string 70 | */ 71 | public function getCode() 72 | { 73 | return $this->code; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/Traits/TariffTrait.php: -------------------------------------------------------------------------------- 1 | date = $date; 69 | 70 | return $this; 71 | } 72 | 73 | /** 74 | * Установка тип заказа (1 - "интернет-магазин", 2 - "доставка"). 75 | * 76 | * @param int $type Тип заказа (1 - "интернет-магазин", 2 - "доставка") 77 | * 78 | * @return self 79 | */ 80 | public function setType(int $type) 81 | { 82 | $this->type = $type; 83 | 84 | return $this; 85 | } 86 | 87 | /** 88 | * Установка валюты, в которой необходимо произвести расчет 89 | * 90 | * @param int $currency Валюта, в которой необходимо произвести расчет 91 | * 92 | * @return self 93 | */ 94 | public function setCurrency(int $currency) 95 | { 96 | $this->currency = $currency; 97 | 98 | return $this; 99 | } 100 | 101 | /** 102 | * Установка код тарифа. 103 | * 104 | * @param int $tariff_code Код тарифа 105 | * 106 | * @return self 107 | */ 108 | public function setTariffCode(int $tariff_code) 109 | { 110 | $this->tariff_code = $tariff_code; 111 | 112 | return $this; 113 | } 114 | 115 | /** 116 | * Установка адреса отправления. 117 | * 118 | * @param Location $from_location Адрес отправления 119 | * 120 | * @return self 121 | */ 122 | public function setFromLocation(Location $from_location) 123 | { 124 | $this->from_location = $from_location; 125 | 126 | return $this; 127 | } 128 | 129 | /** 130 | * Установка адреса получения. 131 | * 132 | * @param Location $to_location Адрес получения 133 | * 134 | * @return self 135 | */ 136 | public function setToLocation(Location $to_location) 137 | { 138 | $this->to_location = $to_location; 139 | 140 | return $this; 141 | } 142 | 143 | /** 144 | * Установка дополнительных услуг. 145 | * 146 | * @param Services|array $services Дополнительные услуги 147 | * 148 | * @return self 149 | */ 150 | public function setServices($services) 151 | { 152 | if (is_array($services)) { 153 | foreach ($services as $service) { 154 | $this->services[] = $service; 155 | } 156 | } else { 157 | $this->services[] = $services; 158 | } 159 | 160 | return $this; 161 | } 162 | 163 | /** 164 | * Экспресс-метод. Устанавливает города отправителя и получателя. 165 | * 166 | * @param int $from код города отправителя 167 | * @param int $to код города получателя 168 | * 169 | * @return self 170 | */ 171 | public function setCityCodes(int $from, int $to) 172 | { 173 | $this->from_location = (is_null($this->from_location)) ? Location::withCode($from) 174 | : $this->from_location->setCode($from); 175 | $this->to_location = (is_null($this->to_location)) ? Location::withCode($to) 176 | : $this->to_location->setCode($to); 177 | 178 | return $this; 179 | } 180 | 181 | /** 182 | * Экспресс-метод. Устанавливает индексы городов отправителя и получателя. 183 | * 184 | * @param int $from индекс города отправителя 185 | * @param int $to индекс города получателя 186 | * 187 | * @return self 188 | */ 189 | public function setPostalCodes(int $from, int $to) 190 | { 191 | $this->from_location = (is_null($this->from_location)) ? Location::withPostalCode($from) 192 | : $this->from_location->setPostalCode($from); 193 | $this->to_location = (is_null($this->to_location)) ? Location::withPostalCode($to) 194 | : $this->to_location->setPostalCode($to); 195 | 196 | return $this; 197 | } 198 | 199 | /** 200 | * Экспресс-метод. Устанавливает адреса городов отправителя и получателя. 201 | * 202 | * @param string $from адрес города отправителя 203 | * @param string $to адрес города получателя 204 | * 205 | * @return self 206 | */ 207 | public function setAddresses(string $from, string $to) 208 | { 209 | $this->from_location = (is_null($this->from_location)) ? Location::withAddress($from) 210 | : $this->from_location->setAddress($from); 211 | $this->to_location = (is_null($this->to_location)) ? Location::withAddress($to) 212 | : $this->to_location->setAddress($to); 213 | 214 | return $this; 215 | } 216 | 217 | /** 218 | * Экспресс-метод. Устанавливает адреса городов отправителя и получателя. 219 | * 220 | * @param string $from адрес города отправителя 221 | * @param string $to адрес города получателя 222 | * 223 | * @return self 224 | */ 225 | public function setCities(string $from, string $to) 226 | { 227 | $this->from_location = (is_null($this->from_location)) ? Location::withCities($from) 228 | : $this->from_location->setCity($from); 229 | $this->to_location = (is_null($this->to_location)) ? Location::withCities($to) 230 | : $this->to_location->setCity($to); 231 | 232 | return $this; 233 | } 234 | 235 | /** 236 | * Экспресс-метод. Создает место с одним обязательным параметром - общий вес (в граммах). 237 | * 238 | * @param int $weight Общий вес (в граммах) 239 | * 240 | * @return self 241 | */ 242 | public function setPackageWeight(int $weight) 243 | { 244 | $this->packages[] = Package::withWeight($weight); 245 | 246 | return $this; 247 | } 248 | 249 | /** 250 | * Экспресс-метод. Добавляет дополнительные услуги одним методом через массив. 251 | * 252 | * @param array $services Дополнительные услуги 253 | * 254 | * @return self 255 | */ 256 | public function addServices(array $services) 257 | { 258 | $services_array = []; 259 | $services_pattern = Constants::SERVICE_CODES; 260 | foreach ($services as $key => $value) { 261 | $service_name = ( ! empty($key)) ? $key : $value; 262 | if ( ! empty($key) && array_key_exists($key, $services_pattern)) { 263 | $services_array[] = (new Services())->setCode($key)->setParameter($value); 264 | } elseif (empty($key) && array_key_exists($value, $services_pattern)) { 265 | $services_array[] = (new Services())->setCode($value); 266 | } else { 267 | throw new \InvalidArgumentException('Передан не допустимый код тарифа:'.$service_name, 1); 268 | } 269 | } 270 | $this->services = $services_array; 271 | 272 | return $this; 273 | } 274 | 275 | /** 276 | * Установка список информации по местам (упаковкам). 277 | * 278 | * @param Package|array $packages Список информации по местам (упаковкам) 279 | * 280 | * @return self 281 | */ 282 | public function setPackages($packages) 283 | { 284 | if (is_array($packages)) { 285 | foreach ($packages as $package) { 286 | $this->packages[] = $package; 287 | } 288 | } else { 289 | $this->packages[] = $packages; 290 | } 291 | 292 | return $this; 293 | } 294 | 295 | /** 296 | * Get список информации по местам (упаковкам). 297 | * 298 | * @return Package[] 299 | */ 300 | public function getPackages() 301 | { 302 | return $this->packages; 303 | } 304 | 305 | /** 306 | * Get дополнительные услуги. 307 | * 308 | * @return Services[] 309 | */ 310 | public function getServices() 311 | { 312 | return $this->services; 313 | } 314 | 315 | /** 316 | * Get адрес получения. 317 | * 318 | * @return Location 319 | */ 320 | public function getToLocation() 321 | { 322 | return $this->to_location; 323 | } 324 | 325 | /** 326 | * Get адрес отправления. 327 | * 328 | * @return Location 329 | */ 330 | public function getFromLocation() 331 | { 332 | return $this->from_location; 333 | } 334 | 335 | /** 336 | * Get код тарифа. 337 | * 338 | * @return int 339 | */ 340 | public function getTariffCode() 341 | { 342 | return $this->tariff_code; 343 | } 344 | 345 | /** 346 | * Get тип заказа (1 - "интернет-магазин", 2 - "доставка"). 347 | * 348 | * @return int 349 | */ 350 | public function getType() 351 | { 352 | return $this->type; 353 | } 354 | } 355 | -------------------------------------------------------------------------------- /src/Traits/ThresholdTrait.php: -------------------------------------------------------------------------------- 1 | threshold = $threshold; 43 | 44 | return $this; 45 | } 46 | 47 | /** 48 | * Устанавливает доп. сбор за доставку товаров, общая стоимость которых попадает в интервал. 49 | * 50 | * @param float $sum Доп. сбор за доставку товаров, общая стоимость которых попадает в интервал 51 | * 52 | * @return self 53 | */ 54 | public function setSum(float $sum) 55 | { 56 | $this->sum = $sum; 57 | 58 | return $this; 59 | } 60 | 61 | /** 62 | * Get порог стоимости товара (действует по условию меньше или равно) в целых единицах валюты. 63 | * 64 | * @return int 65 | */ 66 | public function getThreshold() 67 | { 68 | return $this->threshold; 69 | } 70 | 71 | /** 72 | * Get доп. сбор за доставку товаров, общая стоимость которых попадает в интервал. 73 | * 74 | * @return float 75 | */ 76 | public function getSum() 77 | { 78 | return $this->sum; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /tests/AntistressStoreTestCase.php: -------------------------------------------------------------------------------- 1 | client = new CdekClientV2('TEST'); 23 | 24 | return $this->client; 25 | } 26 | 27 | public function setUp(): void 28 | { 29 | parent::setUp(); 30 | $this->setCdekClient(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tests/Unit/CalculateTariffTest.php: -------------------------------------------------------------------------------- 1 | setCityCodes(172, 172) 19 | ->setTariffCode(136) 20 | ->setPackageWeight(500) 21 | ; 22 | 23 | $tariffResponse = $this->setCdekClient()->calculateTariff($tariff); 24 | $this->assertTrue(is_float($tariffResponse->getTotalSum())); 25 | $this->assertTrue(is_string($tariffResponse->getCurrency())); 26 | $this->assertTrue(is_float($tariffResponse->getDeliverySum())); 27 | $this->assertTrue(is_integer($tariffResponse->getPeriodMin())); 28 | $this->assertTrue(is_integer($tariffResponse->getPeriodMax())); 29 | $this->assertTrue(is_integer($tariffResponse->getWeightCalc())); 30 | $this->assertTrue(is_array($tariffResponse->getServices())); 31 | } 32 | 33 | public function testCalculateTariffWithFilledInsurance(): void 34 | { 35 | $tariff = (new Tariff()) 36 | ->setCityCodes(172, 172) 37 | ->setTariffCode(136) 38 | ->setPackageWeight(500) 39 | ->addServices(['INSURANCE' => 1000]) 40 | ; 41 | 42 | $tariffResponse = $this->setCdekClient()->calculateTariff($tariff); 43 | 44 | $this->assertTrue($tariffResponse->getServices()[0]->getCode() == 'INSURANCE'); 45 | 46 | $this->assertTrue(is_float($tariffResponse->getServices()[0]->getSum())); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /tests/Unit/CreateOrderTest.php: -------------------------------------------------------------------------------- 1 | setNumber('НовыйЗаказ'.rand(2, 999)) // Номер заказа 23 | ->setType(1) // Тип заказа (ИМ) 24 | ->setComment('Оплата по карте') // Комментарий 25 | ->setTariffCode(136) // Код тарифа 26 | ->setDeliveryRecipientCost(150) // Стоимость доставки 27 | ->setShipmentPoint('ORX1') 28 | ->setDeliveryPoint('ORX1') 29 | ; 30 | 31 | // Добавление информации о продавце 32 | 33 | $seller = (new \AntistressStore\CdekSDK2\Entity\Requests\Seller()) 34 | ->setName('Antistress.Store') 35 | ->setInn(777777777777) 36 | ->setPhone('84950090405') 37 | ->setOwnershipForm(63) 38 | ; 39 | 40 | $order->setSeller($seller); 41 | 42 | // Добавление информации о получателе 43 | 44 | $recipient = (new \AntistressStore\CdekSDK2\Entity\Requests\Contact()) 45 | ->setName('Мастер Йода') 46 | ->setEmail('yoda@antistress.store') 47 | ->setPhones('+79134637228') 48 | ; 49 | 50 | $order->setRecipient($recipient); 51 | 52 | // // Адрес отправителя только для тарифов "от двери" 53 | // 54 | // $order->setShipmentAddress('ул.Люка Скайоукера, д.1') 55 | // ->setShipmentCityCode(1204) 56 | // ->setRecipientAddress('ул.Джедаев, д.3') 57 | // ->setRecipientCityCode(44) 58 | // ; 59 | 60 | // Создаем данные посылки. Место 61 | 62 | $packages = 63 | (new \AntistressStore\CdekSDK2\Entity\Requests\Package()) 64 | ->setNumber('1') 65 | ->setWeight(500) 66 | ->setHeight(10) 67 | ->setWidth(10) 68 | ->setLength(10) 69 | ; 70 | 71 | // Создаем товары 72 | 73 | $items = []; 74 | 75 | $items[] = (new Item()) 76 | ->setName('name') 77 | ->setWareKey('articul') // Идентификатор/артикул товара/вложения 78 | ->setPayment(1500.00) // Оплата за товар при получении, без НДС (за единицу товара) 79 | ->setCost(1500.00) // Объявленная стоимость товара (за единицу товара) 80 | ->setWeight(100) // Вес в граммах 81 | ->setAmount(1) // Количество 82 | ; 83 | 84 | $packages->setItems($items); 85 | $order->setPackages($packages); 86 | 87 | // Заказ подготовлен отправляем в ранее объявленный клиент 88 | 89 | $response = $this->client->createOrder($order); 90 | 91 | $uuid = $response->getEntityUuid(); 92 | 93 | $this->assertTrue($response instanceof EntityResponse); 94 | $this->assertTrue(is_string($uuid)); 95 | $this->assertTrue(is_array($response->getRequests())); 96 | 97 | sleep(1); 98 | 99 | $neworder = $this->client->getOrderInfoByUuid($uuid); 100 | 101 | $this->assertTrue($neworder instanceof OrderResponse); 102 | $this->assertTrue($neworder->getType() == 1); 103 | $this->assertTrue($neworder->getShipmentPoint() == 'ORX1'); 104 | $this->assertTrue($neworder->getDeliveryPoint() == 'ORX1'); 105 | $this->assertTrue($neworder->getTariffCode() == 136); 106 | $this->assertTrue($neworder->getPackages()[0] instanceof PackagesResponse); 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /tests/Unit/DeliveryPointsTest.php: -------------------------------------------------------------------------------- 1 | setType('PVZ') 20 | ->setCityCode(270) 21 | ->setCodAllowed(true) 22 | ; 23 | 24 | $responsePvz = $this->client->getDeliveryPoints($requestPvz); 25 | 26 | $spliced = array_splice($responsePvz, 3); 27 | 28 | foreach ($responsePvz as $item) { 29 | $this->assertTrue(is_string($item->getCode())); 30 | $this->assertTrue(is_string($item->getName())); 31 | $this->assertTrue(is_string($item->getLocation()->getAddress())); 32 | $this->assertTrue(is_string($item->getWorkTime())); 33 | $this->assertTrue($item->getLocation() instanceof LocationResponse); 34 | $this->assertTrue(is_array($item->getWorkTimeList())); 35 | $this->assertTrue(is_array($item->getPhones())); 36 | $this->assertTrue(is_string($item->getType())); 37 | $this->assertTrue(is_string($item->getOwnerCode())); 38 | $this->assertTrue(is_bool($item->getHaveCashless())); 39 | $this->assertTrue(is_bool($item->getHaveCash())); 40 | $this->assertTrue(is_bool($item->getAllowedCod())); 41 | $this->assertTrue(is_bool($item->getIsDressingRoom())); 42 | $this->assertTrue(is_bool($item->getIsHandout())); 43 | $this->assertTrue(is_bool($item->getIsReception())); 44 | $this->assertTrue(is_bool($item->getTakeOnly())); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /tests/Unit/WebhookListResponseTest.php: -------------------------------------------------------------------------------- 1 | $testWebhook) { 48 | $webhooks[$key] = new WebhookListResponse($testWebhook); 49 | 50 | $this->assertTrue($webhooks[$key]->getType() == $testWebhook['type']); 51 | $this->assertTrue($webhooks[$key]->getUrl() == $testWebhook['url']); 52 | $this->assertTrue($webhooks[$key]->getUuid() == $testWebhook['uuid']); 53 | } 54 | } 55 | } 56 | --------------------------------------------------------------------------------