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.
| Requirement | Version |
|---|---|
| Joomla | 4.x, 5.x |
| VirtueMart | 4.x |
| PHP | 8.0+ |
| MySQL | 5.7+ / MariaDB 10.3+ |
| Current version | 1.3.2 |
- Requirements
- Installation
- Enabling the Plugin
- Global Configuration
- Creating a Shipping Method
- Delivery Type
- Home Delivery (HD)
- Pickup Point Widget
- Shipping Price
- Exporting Shipments to Packeta
- Bulk Export and Labels
- Printing Labels
- Cash on Delivery (COD)
- Currencies and Rounding
- Uninstallation
- Troubleshooting
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
| Credential | Where to Find It | Purpose |
|---|---|---|
| API Key (Widget) | Packeta Client Section > Settings > API | Displays the pickup point selection widget on the frontend |
| API Password | Packeta Client Section > Settings > API | Exporting shipments and printing labels (backend) |
| Sender Label | Packeta Client Section > User Information > Senders | Sender identification in the shipment (required) |
| Carrier ID (HD only) | Carrier feed – see section 7 | Carrier ID for home delivery |
2. Installation
- Download the installation ZIP file
plg_vmshipment_semazasilkovna_X.Y.Z.zip. - Log in to the Joomla administration panel.
- Navigate to System > Install > Extensions.
- Upload the ZIP file.
- 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:
- Navigate to Extensions > Plugins (or System > Manage > Plugins).
- Search for
semazasilkovnaorZasilkovna. - Click the plugin SemaShipping Packeta - Zasilkovna shipping for VirtueMart (group
vmshipment) and set Status = Enabled. - Save.
The system plugin
plg_system_semazasilkovnaenables 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:
| Parameter | Description |
|---|---|
| API Key (Widget) | Public API key for Packeta Widget v6 (16 characters). Displayed on the frontend – not secret. |
| API Password | Secret API password for REST API calls (shipment export, labels). NEVER exposed on the frontend. |
| Sender Label | The 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 IDs | Comma-separated VirtueMart payment method IDs that are Cash on Delivery. COD amount is automatically set during export (see section 13). |
| Label Format | PDF label format for printing: A6 on A4, A7 on A4, A6 on A6, A7 on A7. |
| Export Order Status | VirtueMart 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
- In VirtueMart admin, navigate to Shop > Shipment Methods.
- Click New.
- 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
- Switch to the Configuration tab (per-method settings).
- Configure the parameters described in the following sections.
- 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
| Parameter | Description |
|---|---|
| Widget Country | ISO 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 ID | Packeta 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
- Create a new shipping method as described in section 5.
- Delivery Type = Home Delivery (hd).
- HD Carrier ID = the carrier ID for that country (see the table below).
- Countries = only the single country this method delivers to.
- Set the price, tax, and optionally the weight range (see section 9).
- Save.
Recommended Carrier IDs for Common Countries
| Country | Carrier ID | Carrier | Currency | Separate house number | COD |
|---|---|---|---|---|---|
| Czech Republic | 106 | CZ Zasilkovna domu HD | CZK | no | yes |
| Slovakia | 131 | SK Packeta Home HD | EUR | no | yes |
| Hungary | 4159 | HU Doruceni na adresu HD | HUF | no | yes |
| Germany | 13613 | DE Home Delivery HD | EUR | yes | yes |
| Poland | 1406 | PL DPD HD | PLN | no | yes |
| Austria | 80 | AT Rakouska posta HD | EUR | no | yes |
Alternative carriers, if their terms suit you better:
| Country | Carrier ID | Carrier | Separate house number | COD |
|---|---|---|---|---|
| Hungary | 763 | HU Madarska posta HD | yes | yes |
| Hungary | 3828 | HU Express One HD | no | yes |
| Germany | 6373 | DE Hermes HD | yes | yes |
| Poland | 272 | PL Polska posta 48 HD | no | yes |
| Poland | 3603 | PL InPost HD | no | yes |
| Poland | 4162 | PL Doruceni na adresu HD | yes | yes |
| Austria | 6830 | AT DPD HD | yes | no |
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:
| Field | Meaning |
|---|---|
id | The value for the HD Carrier ID parameter |
country | ISO country code (cz, sk, hu, de, pl, at, ...) |
pickupPoints | false = home delivery (HD), true = pickup point / box |
apiAllowed | Must be true, otherwise the carrier cannot be used via the API |
currency | The currency the carrier accepts COD in |
separateHouseNumber | true = requires the house number in a dedicated field |
disallowsCod | true = carrier does not support COD |
maxWeight | Maximum 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:
- Navigate to VirtueMart > Shop > User Fields.
- Create a new field with the Name set to exactly
house_number. - Mark it as required and show it in both shipping and billing addresses.
- Save.
Without this field, Packeta returns a
PacketAttributesFaulterror 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
- The customer selects the Zasilkovna shipping method in the cart.
- Clicks the "Choose Pickup Point" button.
- A widget opens with a map and a list of points.
- After selecting a point, its name is displayed below the button.
- 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.,
czfor Czech Republic,skfor 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:
| Parameter | Description |
|---|---|
| Shipping Cost | Base shipping cost. |
| Package Fee | Additional handling / packaging fee (added to the shipping cost). |
| Tax Rule | VirtueMart tax rule for the shipping cost (VAT). |
| Free Shipping Above | Order amount above which shipping is free. Leave empty to disable. |
Method Display Restrictions
| Parameter | Description |
|---|---|
| Countries | Allowed countries for this shipping method. For HD methods, set exactly one country matching the Carrier ID. |
| Blocked Countries | Countries where this method is NOT available. |
| Minimum Weight | Minimum order weight to show this method. |
| Maximum Weight | Maximum order weight to show this method. We recommend matching the carrier limit (maxWeight from the feed, typically 30 kg). |
| Weight Unit | Weight 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
- Navigate to VirtueMart > Orders.
- Open the order detail.
- In the shipping section, you will see information about the selected point (or address for HD).
- Click the "Create Packet in Packeta" button.
- 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_logtable (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
- Navigate to VirtueMart > Orders.
- In the toolbar (next to "Update Orders") you will see the "Export to Zasilkovna" button.
- Clicking it sends all not-yet-exported orders with the status configured in Export Order Status (default
C) to Packeta. - Results appear in a bar below the toolbar – a packet ID for each successful order, or an error message.
- 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:
- In the order detail, click "Download Label (PDF)".
- 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:
| Format | Description |
|---|---|
| A6 on A4 | A6 label on A4 paper (default) |
| A7 on A4 | A7 label on A4 paper |
| A6 on A6 | A6 label on A6 paper (direct printer) |
| A7 on A7 | A7 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:
- In the global plugin settings, fill in the "COD Payment IDs" parameter.
- Enter comma-separated VirtueMart payment method IDs that are Cash on Delivery.
- 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
- Navigate to VirtueMart > Payment Methods.
- Open the COD payment method.
- 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
PacketAttributesFaulterror. 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
- Navigate to Extensions > Manage > Extensions.
- Search for
semazasilkovna. - 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
- Verify the plugin is enabled.
- Verify the shipping method has delivery type Pickup Points + Z-Boxes (not HD).
- Check that the API Key (Widget) is filled in the global plugin settings.
- Check the browser console (F12) for JavaScript errors.
- Verify the page is not blocked by a Content Security Policy (CSP) for the
widget.packeta.comdomain.
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_logtable 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: truein 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
- Verify the shipment was successfully exported (a packet ID must exist).
- Check that the label format in the plugin settings is valid.
- For external points and HD: the plugin needs to obtain a tracking number from Packeta. If this fails, check the API log.
- For bulk download: external points and HD are not part of the bulk PDF – download them individually.
Bulk Export Buttons Do Not Appear
- Verify the system plugin
plg_system_semazasilkovnais installed and enabled (Extensions > Plugins, groupsystem). - Verify you are on the VirtueMart > Orders page (the buttons appear nowhere else).
- 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_idin 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_numbercreated (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.