- Documentation >
- Commerce >
- Shipping management >
- Shipping method API
            
            
              
            
            
          
          
          Shipping method API
To get shipping methods and manage them, use the Ibexa\Contracts\Shipping\ShippingMethodServiceInterface interface.
Shipping methods are referenced with identifiers defined manually at method creation stage in user interface.
Get shipping method
Get shipping method by identifier
To access a shipping method by using its identifier, use the ShippingMethodServiceInterface::getShippingMethod method.
The method takes a string as $identifier parameter and uses a prioritized language from SiteAccess settings unless you pass another language as forcedLanguage.
|  |         $shippingMethodIdentifier = 'cash';
        $shippingMethod = $this->shippingMethodService->getShippingMethod($shippingMethodIdentifier);
        $output->writeln(
            sprintf(
                'Got shipping method by identifier "%s" and type "%s".',
                $shippingMethodIdentifier,
                $shippingMethod->getType()->getIdentifier()
            )
        );
 | 
Get shipping method by ID
To access a shipping method by using its ID, use the ShippingMethodServiceInterface::getShippingMethod method.
The method takes a string as $id parameter and uses a prioritized language from SiteAccess settings unless you pass another language as forcedLanguage.
|  |         $shippingMethodId = 1;
        $shippingMethod = $this->shippingMethodService->getShippingMethodById($shippingMethodId);
        $output->writeln(
            sprintf(
                'Availability status of shipping method %d is "%s"',
                $shippingMethodId,
                $shippingMethod->isEnabled()
            )
        );
 | 
Get multiple shipping methods
To fetch multiple shipping methods, use the ShippingMethodServiceInterface::getShippingMethod method.
It follows the same search query pattern as other APIs:
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18 |         $shippingMethodQuery = new ShippingMethodQuery(new ShippingMethodRegion($this->regionService->getRegion('default')));
        $shippingMethodQuery->setLimit(10);
        $shippingMethods = $this->shippingMethodService->findShippingMethods($shippingMethodQuery);
        $shippingMethods->getShippingMethods();
        $shippingMethods->getTotalCount();
        foreach ($shippingMethods as $shippingMethod) {
            $output->writeln(
                sprintf(
                    '%s: %s- %s',
                    $shippingMethod->getIdentifier(),
                    $shippingMethod->getName(),
                    $shippingMethod->getDescription()
                )
            );
        }
 | 
Create shipping method
To create a shipping method, use the ShippingMethodServiceInterface::createShippingMethod method and provide it with the Ibexa\Contracts\Shipping\Value\ShippingMethodCreateStruct object that you created by using the  newShippingMethodCreateStruct method.
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |         // Create a new shipping method
        $shippingMethodCreateStruct = $this->shippingMethodService->newShippingMethodCreateStruct(
            'courier',
        );
        $shippingMethodCreateStruct->setType(
            new ShippingMethodType('flat_rate')
        );
        $shippingMethodCreateStruct->setRegions(([new Region('default')]));
        $shippingMethodCreateStruct->setOptions(
            ['currency' => 1, 'price' => 1200]
        );
        $shippingMethodCreateStruct->setVatCategoryIdentifier('standard');
        $shippingMethodCreateStruct->setEnabled(true);
        $shippingMethodCreateStruct->setName('eng-GB', 'Courier');
        $shippingMethod = $this->shippingMethodService->createShippingMethod($shippingMethodCreateStruct);
        $output->writeln(
            sprintf(
                'Created shipping method with name %s',
                $shippingMethod->getName()
            )
        );
 | 
Update shipping method
To update a shipping method, use the ShippingMethodServiceInterface::updateShippingMethod method and provide it with the Ibexa\Contracts\Shipping\Value\ShippingMethodUpdateStruct  object that you created by using the  newShippingMethodUpdateStruct method.
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14 |         $shippingMethodUpdateStruct = $this->shippingMethodService->newShippingMethodUpdateStruct();
        $shippingMethodUpdateStruct->setEnabled(false);
        $shippingMethodUpdateStruct->setOptions(
            ['currency' => 1, 'price' => 800]
        );
        $shippingMethodUpdateStruct->setVatCategoryIdentifier('standard');
        $shippingMethodUpdateStruct->setName('eng-GB', 'Courier');
        $this->shippingMethodService->updateShippingMethod($shippingMethod, $shippingMethodUpdateStruct);
        $output->writeln(sprintf(
            'Updated shipping method "%s"',
            $shippingMethod->getName(),
        ));
 | 
Delete shipping method
To update a shipping method, use the ShippingMethodServiceInterface::deleteShippingMethod method.
|  |         $this->shippingMethodService->deleteShippingMethod($shippingMethod);
        $output->writeln(sprintf(
            'Deleted shipping method with ID %d and identifier "%s".',
            $shippingMethod->getId(),
            $shippingMethod->getIdentifier()
        ));
 | 
Delete shipping method translation
To delete shipping method translation, use the ShippingMethodServiceInterface::deleteShippingMethodTranslation method.
|  |         $languageCode = 'eng-GB';
        $shippingMethodDeleteTranslationStruct = new ShippingMethodDeleteTranslationStruct($shippingMethod, $languageCode);
        $this->shippingMethodService->deleteShippingMethodTranslation($shippingMethodDeleteTranslationStruct);
        $output->writeln(sprintf(
            'Deleted translation for shipping method "%s" and language "%s".',
            $shippingMethod->getName(),
            $languageCode
        ));
 |