{"id":318237,"date":"2026-05-26T08:35:17","date_gmt":"2026-05-26T08:35:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/drusoft-shipping-for-econt\/"},"modified":"2026-05-26T08:34:41","modified_gmt":"2026-05-26T08:34:41","slug":"drusoft-shipping-for-econt","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/drusoft-shipping-for-econt\/","author":23474490,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Drusoft Shipping for Econt","header_author":"DRUSOFT LTD","header_description":"A clean, conflict-free Econt integration for Bulgaria.","assets_banners_color":"c7d1d9","last_updated":"2026-05-26 08:34:41","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/ventzie555\/drusoft-shipping-for-econt","header_author_uri":"https:\/\/drusoft.dev\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"ventzie","date":"2026-05-26 08:34:41"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3548787,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3548787,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3548787,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3548787,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3548822,"resolution":false,"location":"assets","locale":"","contents":"{\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=wc-settings&tab=shipping\",\"login\":true,\"plugins\":[\"woocommerce\"],\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"drusoft-shipping-for-econt\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Checkout page with Econt delivery type selection (Address, Office, Automat).","2":"Shipping method settings in the WooCommerce shipping zone modal.","3":"Econt Shipment metabox on the order edit screen.","4":"Econt Orders admin page with bulk actions."}},"plugin_section":[],"plugin_tags":[2986,13827,196632,3546,286],"plugin_category":[45],"plugin_contributors":[259833],"plugin_business_model":[],"class_list":["post-318237","plugin","type-plugin","status-publish","hentry","plugin_tags-bulgaria","plugin_tags-delivery","plugin_tags-econt","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-ventzie","plugin_committers-ventzie"],"banners":{"banner":"https:\/\/ps.w.org\/drusoft-shipping-for-econt\/assets\/banner-772x250.png?rev=3548787","banner_2x":"https:\/\/ps.w.org\/drusoft-shipping-for-econt\/assets\/banner-1544x500.png?rev=3548787","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/drusoft-shipping-for-econt\/assets\/icon-128x128.png?rev=3548787","icon_2x":"https:\/\/ps.w.org\/drusoft-shipping-for-econt\/assets\/icon-256x256.png?rev=3548787","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Drusoft Shipping for Econt<\/strong> is a high-performance, conflict-free WooCommerce integration for Econt delivery services in Bulgaria. Real-time shipping rates, two-step waybill generation, courier pickup requests, and full order management \u2014 all through the official Econt API.<\/p>\n\n<h4>Important Compatibility Note<\/h4>\n\n<p>This plugin is currently <strong>not compatible<\/strong> with the WooCommerce Block Cart and Block Checkout pages. Please ensure your store uses the classic shortcode-based Cart (<code>[woocommerce_cart]<\/code>) and Checkout (<code>[woocommerce_checkout]<\/code>) pages.<\/p>\n\n<h4>For Your Customers<\/h4>\n\n<ul>\n<li><strong>Dynamic Checkout Experience<\/strong> \u2014 Real-time city, office, and automat (APS) selection directly on the checkout page.<\/li>\n<li><strong>Multiple Delivery Types<\/strong> \u2014 Choose between delivery to Address, Econt Office, or Econt Automat (APS).<\/li>\n<li><strong>Smart Street Search<\/strong> \u2014 Built-in autocomplete for Bulgarian street names with intelligent prefix handling (e.g. \"\u0443\u043b.\", \"\u0431\u0443\u043b.\").<\/li>\n<li><strong>Region-Based City Filtering<\/strong> \u2014 Cities are filtered by the Bulgarian province selected at checkout.<\/li>\n<\/ul>\n\n<h4>For Merchants<\/h4>\n\n<ul>\n<li><strong>HPOS Compatible<\/strong> \u2014 Fully supports WooCommerce High-Performance Order Storage.<\/li>\n<li><strong>Automated Data Sync<\/strong> \u2014 Uses Action Scheduler to keep Bulgarian cities and Econt offices\/automats up to date in the background.<\/li>\n<li><strong>Waybill Management<\/strong> \u2014 Generate, print (PDF), and cancel waybills from the order edit screen.<\/li>\n<li><strong>Courier Pickup Requests<\/strong> \u2014 Request a courier pickup directly from WP admin, with automatic skip of weekends and Bulgarian bank holidays.<\/li>\n<li><strong>Dedicated Econt Orders Page<\/strong> \u2014 Filtered admin list of every Econt order with bulk Generate \/ Print \/ Cancel actions.<\/li>\n<li><strong>Bulgarian (bg_BG) Translation Included.<\/strong><\/li>\n<\/ul>\n\n<h4>Also Ship via Speedy?<\/h4>\n\n<p>This plugin has a sibling for the <strong>Speedy<\/strong> courier: <a href=\"https:\/\/wordpress.org\/plugins\/drusoft-shipping-for-speedy\/\">Drusoft Shipping for Speedy<\/a>. Both plugins share the same checkout UI, settings layout, and admin order-management screens \u2014 once you've learned one, the other feels familiar. Install both if your store supports delivery via either courier.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin relies on the <strong>Econt API<\/strong>, a third-party service provided by <strong>Econt AD<\/strong> (Econt Bulgaria), to deliver its shipping functionality. The plugin cannot operate without a valid Econt API account.<\/p>\n\n<h4>What the service is<\/h4>\n\n<p>Econt AD is a courier and logistics company operating in Bulgaria. Their JSON API allows merchants to calculate shipping rates, create shipments (waybills), manage deliveries, request courier pickups, and retrieve location data (cities, offices, automats, streets).<\/p>\n\n<h4>What data is sent and when<\/h4>\n\n<p>Authentication: every request is sent over HTTPS with an <code>Authorization: &lt;private_key&gt;<\/code> header. The Store ID is only stored locally to identify the merchant in the WooCommerce settings and is not transmitted on every request.<\/p>\n\n<ul>\n<li><strong>Recipient address data<\/strong> (city, street, num, office\/automat code, postcode, phone, email) \u2014 sent when calculating shipping rates on the cart\/checkout page and when creating a waybill after order placement.<\/li>\n<li><strong>Sender address data<\/strong> (name, phone, email, city, street, num) \u2014 sent when creating a waybill and when requesting a courier pickup.<\/li>\n<li><strong>Shipment details<\/strong> (weight, COD flag, currency, package count, item descriptions) \u2014 sent when creating a waybill.<\/li>\n<li><strong>Waybill identifiers<\/strong> (internal id, shipment number) \u2014 sent when cancelling a shipment, requesting a courier pickup, or generating an Air Waybill (AWB).<\/li>\n<li><strong>Location queries<\/strong> (city ID, street name) \u2014 sent when the customer searches for cities, offices, automats, or streets, and during the daily background sync of the full Bulgarian nomenclature.<\/li>\n<\/ul>\n\n<p>Data is transmitted only when the corresponding action is triggered (a customer changes their selection on checkout, a merchant generates a waybill, the background sync runs, etc.).<\/p>\n\n<h4>Service links<\/h4>\n\n<ul>\n<li>Econt API documentation (Shipments \/ Nomenclatures): <a href=\"https:\/\/ee.econt.com\/services\/\">https:\/\/ee.econt.com\/services\/<\/a><\/li>\n<li>Econt Terms and Conditions: <a href=\"https:\/\/www.econt.com\/en\/general-conditions\">https:\/\/www.econt.com\/en\/general-conditions<\/a><\/li>\n<li>Econt Privacy Policy: <a href=\"https:\/\/www.econt.com\/en\/privacy-policy\">https:\/\/www.econt.com\/en\/privacy-policy<\/a><\/li>\n<\/ul>\n\n<h3>Econt API Endpoints<\/h3>\n\n<p>This plugin communicates with two Econt API hosts:<\/p>\n\n<ul>\n<li><strong><code>delivery.econt.com<\/code><\/strong> \u2014 Orders, payments, grouping (demo: <code>delivery-demo.econt.com<\/code>)<\/li>\n<li><strong><code>ee.econt.com<\/code><\/strong> \u2014 Nomenclatures and Shipments (demo: <code>demo.econt.com\/ee\/<\/code>)<\/li>\n<\/ul>\n\n<p>All requests are authenticated with an <code>Authorization: &lt;private_key&gt;<\/code> header.<\/p>\n\n<h4>Location Data (Nomenclatures)<\/h4>\n\n<ul>\n<li><strong><code>POST \/services\/Nomenclatures\/getCities.json<\/code><\/strong> \u2014 Full list of Bulgarian cities. Used by the background syncer to populate the local <code>wp_drushfe_cities<\/code> table.<\/li>\n<li><strong><code>POST \/services\/Nomenclatures\/getOffices.json<\/code><\/strong> \u2014 All Econt offices and automats (APS). Used by the background syncer to populate the local <code>wp_drushfe_offices<\/code> table.<\/li>\n<li><strong><code>POST \/services\/Nomenclatures\/getStreets.json<\/code><\/strong> \u2014 Streets within a specific city. Used by the checkout-page street autocomplete and cached per city in a 24h transient.<\/li>\n<\/ul>\n\n<h4>Pricing<\/h4>\n\n<ul>\n<li><strong><code>POST \/services\/OrdersService.getPrice.json<\/code><\/strong> \u2014 Calculates the shipping price for a recipient address, delivery type, and weight. Used live at cart\/checkout each time the customer changes their selection.<\/li>\n<\/ul>\n\n<h4>Shipment Management<\/h4>\n\n<ul>\n<li><strong><code>POST \/services\/OrdersService.updateOrder.json<\/code><\/strong> \u2014 Creates a waybill draft. Used by the waybill generator on order status change or via the manual \"Generate Waybill\" action.<\/li>\n<li><strong><code>POST \/services\/OrdersService.createAWB.json<\/code><\/strong> \u2014 Promotes a draft to a committed Air Waybill, returning the shipment number and PDF URL.<\/li>\n<li><strong><code>POST \/services\/OrdersService.deleteLabel.json<\/code><\/strong> \u2014 Cancels a single waybill draft by internal id. Used by the per-order \"Cancel Shipment\" action.<\/li>\n<li><strong><code>POST \/services\/Shipments\/LabelService.deleteLabels.json<\/code><\/strong> \u2014 Bulk-cancels committed AWBs by shipment number. Used by the Econt Orders bulk \"Cancel\" action.<\/li>\n<li><strong><code>POST \/services\/Shipments\/ShipmentService.requestCourier.json<\/code><\/strong> \u2014 Requests a courier pickup for one or more shipments. Used from the per-order \"Request Courier\" action; auto-retries on national holiday rejections.<\/li>\n<\/ul>\n\n<h4>Rate Limiting &amp; Caching<\/h4>\n\n<p>The plugin minimizes API calls through several strategies:<\/p>\n\n<ul>\n<li><strong>Local database tables<\/strong> \u2014 Cities and offices are synced once per day via Action Scheduler and queried locally.<\/li>\n<li><strong>Transient caching<\/strong> \u2014 Per-city street lists are cached for 24 hours.<\/li>\n<li><strong>Session storage<\/strong> \u2014 Cart selections and the most recent shipping quote are stored in the WooCommerce session, so unchanged selections do not re-quote.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>drusoft-shipping-for-econt<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Ensure <strong>WooCommerce<\/strong> is installed and active.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Navigate to <strong>WooCommerce &gt; Settings &gt; Shipping &gt; Shipping Zones<\/strong>.<\/li>\n<li>Add or edit a shipping zone (e.g. \"Bulgaria\").<\/li>\n<li>Click <strong>Add shipping method<\/strong> and select <strong>Drusoft Shipping for Econt<\/strong>.<\/li>\n<li>Enter your <strong>Econt Store ID<\/strong> and <strong>Private Key<\/strong> (issued by Econt under <strong>My Econt &gt; Integration &gt; API<\/strong>), then click <strong>Save Changes<\/strong>.<\/li>\n<li>Background sync for cities and offices starts automatically via the WooCommerce Action Scheduler.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20econt%20api%20credentials%20do%20i%20need%3F\"><h3>What Econt API credentials do I need?<\/h3><\/dt>\n<dd><p>You need a <strong>Store ID<\/strong> and a <strong>Private Key<\/strong>, both issued by Econt under <strong>My Econt &gt; Integration &gt; API<\/strong>. Contact Econt Bulgaria if you do not yet have API access.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20support%20the%20woocommerce%20block%20checkout%3F\"><h3>Does this plugin support the WooCommerce Block Checkout?<\/h3><\/dt>\n<dd><p>Not yet. The plugin currently requires the classic shortcode-based Checkout page (<code>[woocommerce_checkout]<\/code>). Block Checkout support is planned for a future release.<\/p><\/dd>\n<dt id=\"how%20are%20cities%20and%20offices%20kept%20up%20to%20date%3F\"><h3>How are cities and offices kept up to date?<\/h3><\/dt>\n<dd><p>The plugin uses the WooCommerce Action Scheduler to sync cities and offices from Econt's Nomenclatures API in the background. You can monitor the scheduled action (<code>drushfe_sync_locations_event<\/code>) under <strong>WooCommerce &gt; Status &gt; Scheduled Actions<\/strong>.<\/p><\/dd>\n<dt id=\"how%20is%20shipping%20cost%20calculated%3F\"><h3>How is shipping cost calculated?<\/h3><\/dt>\n<dd><p>Shipping cost is fetched live from Econt's <code>OrdersService.getPrice<\/code> endpoint each time the customer changes the city, delivery type, office, or street on the cart\/checkout page. The result is stored in the WooCommerce session and surfaced as the shipping rate.<\/p><\/dd>\n<dt id=\"can%20i%20automatically%20generate%20waybills%3F\"><h3>Can I automatically generate waybills?<\/h3><\/dt>\n<dd><p>Yes. Enable the <strong>Generate Waybill Automatically<\/strong> option in the shipping method settings. A waybill (draft + AWB) will be created automatically when an order transitions to \"Processing\" or \"On Hold\".<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20courier%20request%20lands%20on%20a%20bulgarian%20bank%20holiday%3F\"><h3>What happens if a courier request lands on a Bulgarian bank holiday?<\/h3><\/dt>\n<dd><p>The plugin automatically retries with the next working day, skipping weekends and any holiday Econt reports. The skipped dates are recorded as an order note for traceability.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>WooCommerce shipping method for Econt (<code>drushfe_econt<\/code>) with per-zone instance settings.<\/li>\n<li>Live shipping cost via <code>OrdersService.getPrice<\/code> with <code>Authorization: &lt;private_key&gt;<\/code> header.<\/li>\n<li>Three delivery modes: to Address, to Econt Office, or to Econt Automat (APS).<\/li>\n<li>Native checkout UI with country \u2192 state \u2192 city Select2 \u2192 delivery-type radio \u2192 office Select2 or street autocomplete.<\/li>\n<li>Daily background sync of Bulgarian cities and Econt offices\/automats via Action Scheduler.<\/li>\n<li>Two-step waybill flow: <code>OrdersService.updateOrder<\/code> (draft) \u2192 <code>OrdersService.createAWB<\/code> (commit), returning shipment number and signed PDF URL.<\/li>\n<li>Admin order actions: Print Waybill (signed PDF), Cancel Shipment, Request Courier.<\/li>\n<li>Courier requests auto-retry across weekends and Bulgarian bank holidays \u2014 no manual rescheduling needed.<\/li>\n<li>Dedicated Econt Orders admin page with bulk Generate \/ Print \/ Cancel.<\/li>\n<li>HPOS (High-Performance Order Storage) compatible.<\/li>\n<li>Bulgarian (bg_BG) translation included.<\/li>\n<\/ul>","raw_excerpt":"A clean, conflict-free Econt integration for WooCommerce stores in Bulgaria.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/318237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=318237"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ventzie"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=318237"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=318237"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=318237"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=318237"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=318237"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=318237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}