Semakin
Customer

SemaShipping Packeta

VirtueMart shipment plugin for Zasilkovna / Packeta. Allows customers to select a pickup point or Z-Box directly in the cart, and enables shop owners to export shipments to Packeta (individually or in bulk) and print labels from the admin panel.

RequirementVersion
Joomla4.x, 5.x
VirtueMart4.x
PHP8.0+
MySQL5.7+ / MariaDB 10.3+
Current version1.3.2

1. Requirements

  • Joomla 4.x or 5.x (VirtueMart does not support Joomla 6 yet)
  • VirtueMart 4.x
  • PHP 8.0 or newer
  • MySQL 5.7+ / MariaDB 10.3+
  • Active Zasilkovna / Packeta account with API access

Packeta Credentials You Will Need

CredentialWhere to Find ItPurpose
API Key (Widget)Packeta Client Section > Settings > APIDisplays the pickup point selection widget on the frontend
API PasswordPacketa Client Section > Settings > APIExporting shipments and printing labels (backend)
Sender LabelPacketa Client Section > User Information > SendersSender identification in the shipment (required)
Carrier ID (HD only)Carrier feed – see section 7Carrier ID for home delivery

2. Installation

  1. Download the installation ZIP file plg_vmshipment_semazasilkovna_X.Y.Z.zip.
  2. Log in to the Joomla administration panel.
  3. Navigate to System > Install > Extensions.
  4. Upload the ZIP file.
  5. A success message confirms the plugin has been installed.

Upgrade: Same procedure as installation. Joomla uses method="upgrade" and preserves all existing data.

The package also contains the system plugin plg_system_semazasilkovna, which is installed and enabled automatically. It provides the bulk export buttons in the VirtueMart orders list (see section 11).


3. Enabling the Plugin

After installation, the shipment plugin must be manually enabled:

  1. Navigate to Extensions > Plugins (or System > Manage > Plugins).
  2. Search for semazasilkovna or Zasilkovna.
  3. Click the plugin SemaShipping Packeta - Zasilkovna shipping for VirtueMart (group vmshipment) and set Status = Enabled.
  4. Save.

The system plugin plg_system_semazasilkovna enables itself during installation – no manual step required.

The plugin does not display anything on its own – you must create a shipping method in VirtueMart first (see section 5).


4. Global Configuration

In the plugin settings (Extensions > Plugins > click the plugin name), fill in the global parameters that apply to all shipping methods based on this plugin:

ParameterDescription
API Key (Widget)Public API key for Packeta Widget v6 (16 characters). Displayed on the frontend – not secret.
API PasswordSecret API password for REST API calls (shipment export, labels). NEVER exposed on the frontend.
Sender LabelThe sender name exactly as listed in the Packeta Client Section (User Information > Senders). Packeta requires it on export and rejects mismatches.
Default Weight (kg)Fallback package weight in kg if not specified on products. Default: 1 kg.
COD Payment IDsComma-separated VirtueMart payment method IDs that are Cash on Delivery. COD amount is automatically set during export (see section 13).
Label FormatPDF label format for printing: A6 on A4, A7 on A4, A6 on A6, A7 on A7.
Export Order StatusVirtueMart order status code used to build the list of orders for bulk export. Default: C (confirmed).

Important: Without the API Key and API Password, the plugin will not function. The API Key is required for the frontend widget, and the API Password for backend shipment export and label printing.


5. Creating a Shipping Method

The plugin serves as a foundation for VirtueMart shipping methods. A single plugin installation can power any number of methods – e.g., one for pickup points and one home delivery method per destination country.

Steps

  1. In VirtueMart admin, navigate to Shop > Shipment Methods.
  2. Click New.
  3. Fill in:
    • Shipment Name: Name displayed to the customer (e.g., "Zasilkovna – Pickup Point")
    • Published: Yes
    • Shipment Description: Optional description
    • Shipment Method: Select SemaShipping Packeta - Zasilkovna shipping for VirtueMart
  4. Switch to the Configuration tab (per-method settings).
  5. Configure the parameters described in the following sections.
  6. Save.

6. Delivery Type

Each shipping method has a Delivery Type parameter (radio):

Pickup Points + Z-Boxes (pickup)

  • A widget for selecting a pickup point is displayed on the frontend.
  • The customer must select a point before placing the order.
  • Supports both internal Zasilkovna points and external ones (Z-Boxes, Alzabox, etc.).
  • See section 8 for details.

Home Delivery (hd)

  • Only a radio button with the price is shown on the frontend – no widget.
  • The delivery address is taken from the order (shipping address, falling back to the billing address).
  • Requires the HD Carrier ID parameter – see section 7.

Delivery Type Parameters

ParameterDescription
Widget CountryISO country code for filtering points in the widget (e.g., cz, sk). Default: cz. Applies to pickup only.
Carrier Filter (widget)Comma-separated carrier IDs to filter the widget. Empty = all. Applies to pickup only.
HD Carrier IDPacketa carrier ID for home delivery. Applies to hd only.

7. Home Delivery (HD)

Home delivery works without the widget – the shipment goes to the delivery address from the order. However, each shipping method carries one HD Carrier ID, valid for one country and one carrier.

Rule: one country = one shipping method. To deliver to five countries, create five methods, each with its own Carrier ID and its own country restriction.

Steps for One Country

  1. Create a new shipping method as described in section 5.
  2. Delivery Type = Home Delivery (hd).
  3. HD Carrier ID = the carrier ID for that country (see the table below).
  4. Countries = only the single country this method delivers to.
  5. Set the price, tax, and optionally the weight range (see section 9).
  6. Save.
CountryCarrier IDCarrierCurrencySeparate house numberCOD
Czech Republic106CZ Zasilkovna domu HDCZKnoyes
Slovakia131SK Packeta Home HDEURnoyes
Hungary4159HU Doruceni na adresu HDHUFnoyes
Germany13613DE Home Delivery HDEURyesyes
Poland1406PL DPD HDPLNnoyes
Austria80AT Rakouska posta HDEURnoyes

Alternative carriers, if their terms suit you better:

CountryCarrier IDCarrierSeparate house numberCOD
Hungary763HU Madarska posta HDyesyes
Hungary3828HU Express One HDnoyes
Germany6373DE Hermes HDyesyes
Poland272PL Polska posta 48 HDnoyes
Poland3603PL InPost HDnoyes
Poland4162PL Doruceni na adresu HDyesyes
Austria6830AT DPD HDyesno

All carriers listed above have a 30 kg per-shipment limit.

Watch the "Separate house number" column: carriers marked "yes" (separateHouseNumber) require the house number in a dedicated field. See House Number below.

Verifying Carrier IDs and Finding Others

The carrier list changes over time – verify the IDs in your own account before going live. Download the home delivery carrier feed from:

https://www.zasilkovna.cz/api/v4/<API_PASSWORD>/branch.json?address-delivery

Replace <API_PASSWORD> with your secret API password (the same one configured in the plugin – not the 16-character widget API key).

The response is JSON containing a carriers object. The relevant fields for each carrier:

FieldMeaning
idThe value for the HD Carrier ID parameter
countryISO country code (cz, sk, hu, de, pl, at, ...)
pickupPointsfalse = home delivery (HD), true = pickup point / box
apiAllowedMust be true, otherwise the carrier cannot be used via the API
currencyThe currency the carrier accepts COD in
separateHouseNumbertrue = requires the house number in a dedicated field
disallowsCodtrue = carrier does not support COD
maxWeightMaximum shipment weight in kg

The same feed is available in the Packeta Client Section under Carrier Feed.

House Number

Some foreign carriers (separateHouseNumber: true) require the house number separated from the street. The plugin reads it from an order user field named house_number, which VirtueMart does not provide by default.

If you use a carrier with this requirement:

  1. Navigate to VirtueMart > Shop > User Fields.
  2. Create a new field with the Name set to exactly house_number.
  3. Mark it as required and show it in both shipping and billing addresses.
  4. Save.

Without this field, Packeta returns a PacketAttributesFault error on export.

Currency and COD

Each HD carrier accepts COD in one fixed currency (the Currency column in the tables above). If the order is issued in a different currency, Packeta rejects the COD amount.

  • Either configure the matching currency for that country in VirtueMart,
  • or do not offer COD on that shipping method.

See also section 14.


8. Pickup Point Widget

For shipping methods with the delivery type Pickup Points + Z-Boxes, a "Choose Pickup Point" button is displayed on the frontend, opening the interactive Packeta Widget v6 map.

How It Works

  1. The customer selects the Zasilkovna shipping method in the cart.
  2. Clicks the "Choose Pickup Point" button.
  3. A widget opens with a map and a list of points.
  4. After selecting a point, its name is displayed below the button.
  5. The selection is saved and survives payment method changes, cart updates, and navigation between checkout steps.

Session Persistence

The selected point is stored in the PHP session. This means:

  • The selection survives payment method changes and other cart updates.
  • After an AJAX page reload, the point is automatically restored.
  • The session is cleared only after the order is successfully placed.

Point Filtering

  • Country: The "Widget Country" parameter limits points to a specific country (e.g., cz for Czech Republic, sk for Slovakia).
  • Carriers: The "Carrier Filter" parameter allows showing only specific point types (e.g., only Z-Boxes, only Alzabox). Pickup point carrier IDs come from the same feed as HD, but with pickupPoints: true – see section 7.

Validation: If the customer does not select a pickup point and attempts to complete the order, the message "Please select a Zasilkovna pickup point." is displayed.


9. Shipping Price

Each shipping method has its own pricing settings:

ParameterDescription
Shipping CostBase shipping cost.
Package FeeAdditional handling / packaging fee (added to the shipping cost).
Tax RuleVirtueMart tax rule for the shipping cost (VAT).
Free Shipping AboveOrder amount above which shipping is free. Leave empty to disable.

Method Display Restrictions

ParameterDescription
CountriesAllowed countries for this shipping method. For HD methods, set exactly one country matching the Carrier ID.
Blocked CountriesCountries where this method is NOT available.
Minimum WeightMinimum order weight to show this method.
Maximum WeightMaximum order weight to show this method. We recommend matching the carrier limit (maxWeight from the feed, typically 30 kg).
Weight UnitWeight unit (KG or LB).

10. Exporting Shipments to Packeta

After receiving an order with Zasilkovna shipping, you can export the shipment to the Packeta system directly from the VirtueMart admin.

Steps

  1. Navigate to VirtueMart > Orders.
  2. Open the order detail.
  3. In the shipping section, you will see information about the selected point (or address for HD).
  4. Click the "Create Packet in Packeta" button.
  5. The plugin sends the data to the Packeta API and displays a confirmation with the packet ID.

What Gets Exported

  • Pickup point: Point ID, recipient name, email, phone, weight, value.
  • External point (Z-Box): Carrier ID + Point ID, plus recipient details.
  • Home delivery: Carrier ID + full address (street, house number, city, ZIP code).
  • COD: If the payment method is Cash on Delivery, the COD amount is automatically set.

Security

  • Every export is protected by a CSRF token.
  • The API password is never exposed on the frontend.
  • All API requests and responses are logged in the #__sema_zasilkovna_log table (the API password is masked in logs).
  • A shipment cannot be exported twice – if already exported, the message "Packet has already been exported." is shown.

11. Bulk Export and Labels

To process multiple orders at once, use the buttons in the VirtueMart orders list. They are provided by the system plugin plg_system_semazasilkovna, installed automatically alongside the shipment plugin.

Steps

  1. Navigate to VirtueMart > Orders.
  2. In the toolbar (next to "Update Orders") you will see the "Export to Zasilkovna" button.
  3. Clicking it sends all not-yet-exported orders with the status configured in Export Order Status (default C) to Packeta.
  4. Results appear in a bar below the toolbar – a packet ID for each successful order, or an error message.
  5. After the export, a "Download Labels" button appears and downloads a single PDF with labels for all exported shipments.

Good to Know

  • Already-exported orders are skipped – re-running the export creates no duplicates. If there is nothing to export, the message "No unexported orders" is shown.
  • An error on one order does not stop the others. Handle failed orders individually from the order detail.
  • Bulk labels work only for internal Zasilkovna points. For external points (Z-Box) and home delivery, download the label individually from the order detail – the Packeta API offers no bulk download for courier labels.
  • Both export and label download are restricted to users with admin access and protected by a CSRF token.

12. Printing Labels

After a successful shipment export, you can download a PDF label:

  1. In the order detail, click "Download Label (PDF)".
  2. The browser downloads a PDF file with the label.

For downloading labels for multiple orders at once, see section 11.

Label Formats

The format is set in the global plugin settings:

FormatDescription
A6 on A4A6 label on A4 paper (default)
A7 on A4A7 label on A4 paper
A6 on A6A6 label on A6 paper (direct printer)
A7 on A7A7 label on A7 paper (direct printer)

Label Types

The plugin automatically selects the correct label type based on the delivery method:

  • Internal Zasilkovna points: Standard Zasilkovna label (packetLabelPdf).
  • External points (Z-Box) and HD: Courier label (packetCourierLabelPdf) – the plugin first requests a tracking number from Packeta.

13. Cash on Delivery (COD)

The plugin supports automatic COD detection:

  1. In the global plugin settings, fill in the "COD Payment IDs" parameter.
  2. Enter comma-separated VirtueMart payment method IDs that are Cash on Delivery.
  3. During shipment export, the plugin automatically checks whether the order uses a COD payment method and sets the correct amount.

How to Find the Payment Method ID

  1. Navigate to VirtueMart > Payment Methods.
  2. Open the COD payment method.
  3. The ID is visible in the URL (parameter virtuemart_paymentmethod_id).

Limitations with Foreign Carriers

  • COD must be in the carrier's currency – see section 7 and section 14.
  • Some carriers do not support COD at all (disallowsCod: true, e.g., AT DPD HD). Do not offer COD payment on such a method.

14. Currencies and Rounding

The plugin sends the order currency (the currency field) to Packeta along with the shipment value and any COD amount.

  • CZK and HUF have no minor unit – Packeta rejects decimal places for them and returns a PacketAttributesFault error. The plugin therefore rounds both the value and the COD amount to whole numbers for these currencies.
  • EUR, PLN, and others are sent with decimal places unchanged.
  • The order currency should match the carrier currency (the Currency column in the tables in section 7), otherwise Packeta rejects the COD amount.

15. Uninstallation

Steps

  1. Navigate to Extensions > Manage > Extensions.
  2. Search for semazasilkovna.
  3. Uninstall the shipment plugin SemaShipping Packeta - Zasilkovna shipping for VirtueMart.

What Gets Deleted

  • The shipment plugin (PHP, JS, CSS, language files)
  • The system plugin plg_system_semazasilkovna (removed automatically)
  • Table #__virtuemart_shipment_plg_semazasilkovna (shipment data in orders)

What Is PRESERVED

  • Table #__sema_zasilkovna_log (audit records of API calls)

Why is the log preserved? Records of exported shipments serve as an audit trail. Automatic deletion on uninstall could result in loss of important information. If you want to remove the table, do it manually:

DROP TABLE IF EXISTS `#__sema_zasilkovna_log`;

(replace #__ with your actual table prefix)


16. Troubleshooting

Widget Does Not Appear

  1. Verify the plugin is enabled.
  2. Verify the shipping method has delivery type Pickup Points + Z-Boxes (not HD).
  3. Check that the API Key (Widget) is filled in the global plugin settings.
  4. Check the browser console (F12) for JavaScript errors.
  5. Verify the page is not blocked by a Content Security Policy (CSP) for the widget.packeta.com domain.

Customer Cannot Complete the Order

  • For "Pickup Points" methods, the customer MUST select a point. The message "Please select a Zasilkovna pickup point." is displayed correctly.
  • For "Home Delivery" methods, no point validation is performed – if the customer cannot complete the order, the issue is elsewhere.

Error During Shipment Export

  • Verify the API Password is filled in the global plugin settings.
  • Verify the Sender Label matches the sender name in the Packeta Client Section exactly.
  • Check the error message – the plugin displays the exact Packeta API response.
  • Check the log in the #__sema_zasilkovna_log table for request and response details.

PacketAttributesFault Error

Most common causes:

  • Missing house number for a carrier with separateHouseNumber: true – see House Number.
  • Decimal places in CZK or HUF – handled by the rounding described in section 14.
  • Sender Label mismatch with the Packeta Client Section.
  • Missing phone or email for a carrier with requiresPhone / requiresEmail.
  • Carrier weight limit exceeded (maxWeight, typically 30 kg).

Home Delivery Method Uses the Wrong Carrier

  • Verify the HD Carrier ID matches the country set in the Countries parameter.
  • Verify the carrier has apiAllowed: true in the feed – e.g., "Packeta vecerni doruceni Bratislava HD" (ID 132) cannot be used via the API.
  • Verify Delivery Type is set to hd (not pickup).

Label Does Not Download

  1. Verify the shipment was successfully exported (a packet ID must exist).
  2. Check that the label format in the plugin settings is valid.
  3. For external points and HD: the plugin needs to obtain a tracking number from Packeta. If this fails, check the API log.
  4. For bulk download: external points and HD are not part of the bulk PDF – download them individually.

Bulk Export Buttons Do Not Appear

  1. Verify the system plugin plg_system_semazasilkovna is installed and enabled (Extensions > Plugins, group system).
  2. Verify you are on the VirtueMart > Orders page (the buttons appear nowhere else).
  3. Check the browser console for JavaScript errors.

COD Amount Not Set

  • Verify the COD payment method ID is correctly entered in the "COD Payment IDs" parameter.
  • The ID must be a number matching virtuemart_paymentmethod_id in the payment method URL.
  • Separate multiple IDs with commas without spaces (e.g., 3,7).
  • Verify the carrier supports COD at all (disallowsCod: false).

Shipping Method Not Displayed

  • Check country settings (allowed / blocked).
  • Check weight restrictions (min / max weight).
  • Verify the method is Published in VirtueMart.
  • Verify the plugin is Enabled.

Launch Checklist

  • Plugin installed and enabled
  • API Key (Widget) filled in
  • API Password filled in
  • Sender Label filled in and matching the Packeta Client Section
  • Shipping method created in VirtueMart and published
  • Delivery type selected (pickup or hd)
  • Widget Country configured (if pickup)
  • HD Carrier ID filled in and verified against the carrier feed (if hd)
  • For HD: exactly one country set in the Countries parameter
  • Field house_number created (if the carrier requires a separate house number)
  • Order currency matches the carrier currency
  • COD payment IDs filled in (if using COD)
  • Label format selected
  • Export Order Status configured
  • Test order placed and shipment successfully exported
  • Label downloaded and printed
  • Bulk export tested in the orders list

Packeta® and Zásilkovna® are registered trademarks of their respective owners. This product is an independent extension and is not affiliated with, or endorsed by, the operator of the Packeta / Zásilkovna service.

Interested in working together?

Get in touch and let's discuss your project. We'll be happy to help you choose the right solution.