Get in touch
  • OpenCart
  • Shipping
  • v1.2.8

Ukrposhta — Ukrposhta shipping for OpenCart 2.3, 3.x & 4.x

A free Ukrposhta shipping module for OpenCart 3 and 4: region → city → branch picker at checkout and live cost calculation via the eCom API.

Compatibility
OpenCart 2.3.0.x · 3.0.2 – 3.0.5 · 4.0.2 – 4.1.x
Version
v1.2.8 (OpenCart 4)
v1.2.4 (OpenCart 3.x)
v1.1.5 (OpenCart 2.3)
Updated
25 October 2026

The module in action — 43 sec

Clear even without sound: Ukrainian subtitles

What the module does

Feature Free
A Ukrposhta branch-picker widget: region → city → branch ✔
Data from the official Ukrposhta Address Classifier ✔
Live shipping-cost calculation via the eCom API ✔
The chosen branch is recorded on the order ✔
Cached directories — checkout doesn't slow down ✔
OpenCart 4.x compatible ✔
Free ✔

What it looks like

Ukrposhta — branch-picker widget at OpenCart checkout
The customer has chosen “Deliver to a Ukrposhta branch” — the widget opens right under the contact fields with a dropdown list of regions. The rate is already reflected in the order total.
Ukrposhta — chosen branch confirmed at OpenCart checkout
The region → city → branch chain is complete, and the choice is confirmed on its own line. The index can also be typed in manually if the customer knows it.
Ukrposhta — module settings in the OpenCart admin
Settings: eCom Bearer token (stored encrypted, shown only as a mask in the form), sender index, service type, default rate, geo-zone and tax, plus the widget’s appearance.

Technical requirements

  • OpenCart 4.0.2 – 4.1.x, 3.0.2 – 3.0.5 or 2.3.0.x — a separate build for each branch
  • PHP 7.4 and newer; the OpenCart 2.3 build also runs on PHP 5.6
  • An eCom agreement with Ukrposhta: the Bearer key is issued in the eCom account after signing the agreement — it’s needed for the address classifier and rate calculation
  • For rate calculation — the sender’s warehouse postal index

Version history

v1.2.8 OC 4.x Current 25 October 2026

With international delivery on, an empty grey «Ukrposhta delivery / Another country» bar no longer hangs above the Nova Poshta (or another carrier’s) block when that carrier is chosen.

v1.2.7 OC 4.x 23 September 2026

CatCode One Page Checkout: the widget sometimes did not appear — Ukrposhta ticked, but no region, city and branch selector.

v1.2.5 OC 4.x 23 September 2026

The hidden address form no longer gets the dummy postcode «00000».

All versions (17)
v1.2.3 OC 3.x v1.1.4 OC 2.3 23 September 2026

The region → city → branch widget supports the CatCode One Page Checkout page and appears in the shipping method block; after a branch is picked the rate list is requested again.

v1.2.4 OC 4.x 23 September 2026

The region placeholder in the hidden address field is no longer “the first zone of the country”.

v1.2.3 OC 4.x 23 September 2026

The rate is recalculated after a post office is chosen.

v1.2.2 OC 4.x 23 September 2026

Works on CatCode One Page Checkout (route extension/cc_onepage/checkout) exactly as on the stock checkout.

v1.2.0 4.x, 3.x) · 1.1.0 (2.3 20 August 2026

International shipping calculation added.

v1.1.2 4.x) · 1.1.1 (3.x) · 1.0.1 (2.3 August 2026

The live Ukrposhta rate is finally calculated.

v3.x 1.1.0 11 August 2026

The OpenCart 3 build was brought up to the level of 2.3 and 4.x.

v1.1.0 5 August 2026

Fixed a dead PHP 7.4 polyfill: the polyfill file had a WordPress ABSPATH guard copied into it, which never exists in OpenCart.

v1.0.12 24 July 2026

The widget scrolls into view as soon as Ukrposhta is chosen — on mobile it renders above the shipping-method selector and was easy to miss.

v1.0.11 24 July 2026

City search no longer fails silently without the mbstring extension: mb_strlen / mb_strtolower are now guarded, and autocomplete works on any hosting.

v1.0.10 23 July 2026

Saving contact details no longer resets an already-chosen shipping and payment method.

v1.0.8–1.0.9 23 July 2026

The order’s address is now filled with exactly what the customer picked (the classifier’s city, the region in Cyrillic, the branch’s real postal index), plus manual index entry.

v1.0.4 23 July 2026

Fixed a fatal error in shipping-method calculation.

v1.0.0 July 2026

First public release: a region → city → branch widget at checkout, a live domestic rate via the eCom API, key encryption, weekly classifier sync via cron.

Full module description

Ukrposhta Shipping for OpenCart 2.3, 3.x and 4.x is a Ukrposhta shipping module: a branch-picker widget (region → city → branch) at checkout, based on the official Address Classifier, and live domestic shipping-cost calculation via the eCom API. The branch the customer picked is recorded on the order, so a manager doesn’t have to ask for the address again over messenger.

The module is free. It installs as a standard OpenCart extension (ocmod) and needs no theme edits — the widget hooks in via the event system.

How it works, step by step

  1. The admin installs the extension, clicks “Install” on the settings page — the module creates its tables, events and cron tasks — and syncs regions with one click.
  2. The eCom Bearer token and sender index are entered; “Test connection” and “Test rate” buttons instantly confirm the key is accepted and the API responds.
  3. At checkout, the customer chooses Ukrposhta delivery — the footer/after event loads the widget, which walks through region → city → branch.
  4. The module requests a rate from the eCom API using the sender’s and recipient’s postal indices; if the API is unavailable, a default rate from the settings is shown instead.
  5. After checkout, the order.addOrder/after event saves the chosen branch (index, city, name) along with the order.
  6. Once a week the region classifier cache is refreshed — the directory never goes stale. On OpenCart 4 the built-in cron does it; on 3.x and 2.3, a link for the system crontab shown in the module settings.

Under the hood

  • The Bearer key is encrypted before being written to the database; the settings form shows only a “saved” mask, never the plain value.
  • The classifier is cached in the module’s own tables (up_regions, up_cities, up_offices) — checkout reads the local database rather than hitting the API on every request.
  • Integration is via OpenCart events (footer inject, order added) — no theme template edits; the 4.x and 3.x builds have no OCMOD controller patches, while the 2.3 build adds a small OCMOD patch that saves the address at checkout.
  • Standard OpenCart shipping-method settings: geo-zone, tax class, sort order.
  • The widget’s look is configurable: accent colour, corner radius, theme (auto/light/dark).
  • The OpenCart 4 build has a sandbox toggle for working against Ukrposhta’s test environment.

How to install

  1. Download the build for your version and install it via “Extensions → Installer”: ukrposhta.ocmod.zip for 4.x, ukrposhta-oc3-1.2.4.ocmod.zip for 3.x, ukrposhta-oc2-1.1.5.ocmod.zip for 2.3.
  2. In “Extensions → Extensions → Shipping” find “Ukrposhta shipping” and click Install.
  3. Open the settings and click “Install” — the tables, events and cron tasks are created.
  4. Enter the eCom Bearer token and sender index, click “Test connection”, then “Sync regions”.
  5. Enable the shipping method and save — the branch-picker widget will appear at checkout.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
Do I need an agreement with Ukrposhta?

Yes. The Address Classifier and the rate are authorised with a Bearer key issued after signing an eCom agreement.

Do I need to edit the theme for the widget to appear at checkout?

No. The widget hooks in via the footer/after event — theme templates aren't changed, and there's no conflict with custom checkouts built into theme code.

Does the module create waybills and labels?

Not yet. Creating a shipment (waybill) is planned for the next update; the current version covers branch selection and rate calculation.

What happens if the Ukrposhta API is unavailable?

The shipping method won't disappear from checkout: the customer sees the default rate you set in the settings.

Can I test it without a live key?

Yes, there's a test-environment (sandbox) toggle on the "Access keys" tab.

What happens to the data after I delete the module?

Events and cron tasks are removed, but the tables with the directory and saved branch choices are intentionally kept — nothing is lost after reinstalling.

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.

Order a custom module