{"id":323346,"date":"2026-06-25T10:14:19","date_gmt":"2026-06-25T10:14:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/riderx-delivery-sync\/"},"modified":"2026-08-03T10:58:30","modified_gmt":"2026-08-03T10:58:30","slug":"riderx-delivery-sync","status":"publish","type":"plugin","link":"https:\/\/ar.wordpress.org\/plugins\/riderx-delivery-sync\/","author":23512718,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.51","stable_tag":"1.0.51","tested":"7.0.2","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"RiderX Delivery Sync","header_author":"RiderX","header_description":"Two-way sync between WooCommerce orders and RiderX delivery platform.","assets_banners_color":"fad500","last_updated":"2026-08-03 10:58:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/riderx.me","rating":0,"author_block_rating":0,"active_installs":0,"downloads":170,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.47":{"tag":"1.0.47","author":"riderx","date":"2026-06-25 10:13:41"},"1.0.48":{"tag":"1.0.48","author":"riderx","date":"2026-07-09 09:13:12"},"1.0.49":{"tag":"1.0.49","author":"riderx","date":"2026-07-09 09:44:30"},"1.0.50":{"tag":"1.0.50","author":"riderx","date":"2026-08-03 10:41:49"},"1.0.51":{"tag":"1.0.51","author":"riderx","date":"2026-08-03 10:58:30"}},"upgrade_notice":{"1.0.51":"<p>Required update for anyone on 1.0.50: fixes delivery status callbacks being silently dropped when they arrive before the order is linked, which could leave orders stuck in processing.<\/p>","1.0.50":"<p>Required update: fixes a fatal error that could take the site down, fixes signed RiderX status webhooks being rejected with a 401, and fixes orders never being completed automatically when a delivery finishes.<\/p>","1.0.49":"<p>Declares WooCommerce HPOS and Cart &amp; Checkout Blocks compatibility, clearing the WooCommerce feature-incompatibility notice.<\/p>","1.0.48":"<p>Improves middleware base URL reliability in Docker\/local setups and auto-normalizes common pasted endpoint URLs.<\/p>","1.0.46":"<p>Adds flexible daily opening-hour ranges and improves RiderX settings page clarity.<\/p>","1.0.45":"<p>Internationalization and security hardening fixes for WordPress.org Plugin Check compliance.<\/p>","1.0.44":"<p>Compatibility metadata update for WordPress 7.0 directory checks.<\/p>","1.0.43":"<p>This release aligns text domain and admin asset loading with WordPress.org review requirements.<\/p>","1.0.42":"<p>This release removes UTF-8 BOM from all PHP files to pass automated directory checks.<\/p>","1.0.41":"<p>This release removes UTF-8 BOM from plugin PHP files to satisfy automated scanner requirements.<\/p>","1.0.40":"<p>This release updates plugin naming for WordPress.org directory policy compliance.<\/p>","1.0.39":"<p>Release package no longer contains markdown documentation files.<\/p>","1.0.38":"<p>Webhook security is now stricter for public deployment: configure Webhook Signing Secret in plugin settings before enabling production callbacks.<\/p>","1.0.37":"<p>Webhooks now work with RiderX&#039;s signed payloads and update delivery status correctly. Optionally set the Webhook Signing Secret to verify signatures.<\/p>","1.0.36":"<p>More reliable webhook authentication on servers that strip the Authorization header.<\/p>","1.0.35":"<p>Per-order delivery detail with live status and pickup-to-customer direction on the map.<\/p>","1.0.34":"<p>Rate breakdown now displays correctly in block-based checkout.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3586006,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3586006,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3586006,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3586006,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.47","1.0.48","1.0.49","1.0.50","1.0.51"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[13827,24151,268846,3546,286],"plugin_category":[45],"plugin_contributors":[268847],"plugin_business_model":[],"class_list":["post-323346","plugin","type-plugin","status-publish","hentry","plugin_tags-delivery","plugin_tags-logistics","plugin_tags-riderx","plugin_tags-shipping","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-riderx","plugin_committers-riderx"],"banners":{"banner":"https:\/\/ps.w.org\/riderx-delivery-sync\/assets\/banner-772x250.png?rev=3586006","banner_2x":"https:\/\/ps.w.org\/riderx-delivery-sync\/assets\/banner-1544x500.png?rev=3586006","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/riderx-delivery-sync\/assets\/icon-128x128.png?rev=3586006","icon_2x":"https:\/\/ps.w.org\/riderx-delivery-sync\/assets\/icon-256x256.png?rev=3586006","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>RiderX Delivery Sync connects your WooCommerce store to the RiderX delivery platform. It quotes live delivery rates at checkout and dispatches paid orders to RiderX for fulfilment, keeping order delivery status in sync.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Live delivery rate quotes shown as a WooCommerce shipping method (classic and block checkout).<\/li>\n<li>Rate breakdown displayed in the shipping label (distance, estimated time, net price, VAT).<\/li>\n<li>Automatic dispatch of orders to RiderX when payment is received.<\/li>\n<li>Configurable restaurant \/ pickup location and credentials.<\/li>\n<li>Works with WooCommerce High-Performance Order Storage (HPOS).<\/li>\n<\/ul>\n\n<p>This plugin communicates with the RiderX delivery service to obtain rates and create deliveries. A RiderX account and API credentials are required.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin uses external services for delivery orchestration and optional admin map visualization:<\/p>\n\n<ul>\n<li><p>RiderX API (required for core functionality)<\/p>\n\n<ul>\n<li>Service URL: https:\/\/riderx.me<\/li>\n<li>Purpose: Request delivery rate quotes, dispatch deliveries, and read live delivery status.<\/li>\n<li>Data sent: Pickup and delivery addresses, customer phone, customer email, order total, currency, item count, and optional pickup schedule.<\/li>\n<li>Terms: https:\/\/riderx.me<\/li>\n<\/ul><\/li>\n<li><p>OpenStreetMap tile service (optional, admin delivery-history maps)<\/p>\n\n<ul>\n<li>Service URL: https:\/\/tile.openstreetmap.org<\/li>\n<li>Purpose: Render map tiles in the plugin admin delivery history detail view.<\/li>\n<li>Activation: Used only when \"Enable external map services\" is enabled in plugin settings.<\/li>\n<li>Data sent: Map tile coordinates requested by the browser while rendering the admin map.<\/li>\n<li>Terms: https:\/\/operations.osmfoundation.org\/policies\/tiles\/<\/li>\n<\/ul><\/li>\n<li><p>OSRM demo routing service (optional, admin delivery-history route line)<\/p>\n\n<ul>\n<li>Service URL: https:\/\/router.project-osrm.org<\/li>\n<li>Purpose: Draw pickup-to-customer route geometry in the admin delivery history detail view.<\/li>\n<li>Activation: Used only when \"Enable external map services\" is enabled in plugin settings.<\/li>\n<li>Data sent: Pickup and customer latitude\/longitude coordinates.<\/li>\n<li>Terms: https:\/\/project-osrm.org\/<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install it through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to WooCommerce settings and enter your RiderX API credentials and pickup location.<\/li>\n<li>Enable the RiderX delivery shipping method in your shipping zones.<\/li>\n<li>Copy the Inbound Webhook URL from the RiderX settings screen and register it in your RiderX partner panel.<\/li>\n<li>Paste the webhook signing secret that RiderX returns back into the Webhook Signing Secret field, so delivery status callbacks can be verified.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20riderx%20account%3F\"><h3>Do I need a RiderX account?<\/h3><\/dt>\n<dd><p>Yes. You need RiderX API credentials to request rates and dispatch deliveries.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20block%20checkout%3F\"><h3>Does it work with block checkout?<\/h3><\/dt>\n<dd><p>Yes. The delivery rate and its breakdown are shown in both classic and block (React) checkout.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.51<\/h4>\n\n<ul>\n<li>Fixed a regression in 1.0.50 that could silently drop delivery status updates. The delivery ID is only stored on the order once the dispatch request returns, so an early callback can arrive before the order is matchable; 1.0.50 acknowledged those with a 200 and RiderX never retried them, leaving the order stuck. Unmatched status callbacks now return 404 again so RiderX retries them.<\/li>\n<li>Unmatched delivery.vehicle.location pings are still acknowledged with 200, since those are frequent, disposable, and not worth quadrupling with retries.<\/li>\n<li>A \"shipment_destroyed\" delivery no longer returns the goods to stock when it cancels the order, because a destroyed parcel is never coming back. An ordinary \"cancel\" still restocks as before.<\/li>\n<li>Added the riderx_woo_sync_non_restocking_statuses filter to control which delivery statuses cancel an order without restocking.<\/li>\n<\/ul>\n\n<h4>1.0.50<\/h4>\n\n<ul>\n<li>Fixed a fatal error that could take down the whole site: the shipping method installer ran on plugins_loaded and dereferenced WooCommerce country data before WooCommerce had initialised it. It now runs on woocommerce_init.<\/li>\n<li>Fixed orders never completing automatically: the plugin looked for a \"delivered\" delivery status, which RiderX does not send. Orders are now completed on the documented \"completed\" and \"late_completed\" statuses (\"delivered\" is still accepted as an alias).<\/li>\n<li>Orders are now cancelled when RiderX reports \"cancel\" or \"shipment_destroyed\".<\/li>\n<li>delivery.vehicle.location events now only record the courier position instead of adding an order note for every periodic ping.<\/li>\n<li>Webhooks that cannot be matched to an order are acknowledged with 200 instead of 404, so RiderX no longer burns its three-attempt retry budget on deliveries this store does not own.<\/li>\n<li>Added the riderx_woo_sync_completed_delivery_statuses and riderx_woo_sync_failed_delivery_statuses filters for stores that need custom status mapping.<\/li>\n<li>Fixed inbound status webhooks being rejected: signature verification required a t= timestamp component that RiderX does not send, so every genuine signed callback failed with a 401.<\/li>\n<li>Signature verification now accepts the plain hex digest RiderX sends, as well as the sha256=, v1= and base64 digest formats, and reads the timestamp from X-Service-Timestamp when it is not embedded in the signature. The replay window is only enforced when a timestamp is actually supplied.<\/li>\n<li>Signature verification also accepts the X-RiderX-Signature, X-Webhook-Signature and X-Hub-Signature-256 headers in addition to X-Service-Signature.<\/li>\n<li>Clarified on the settings screen that the webhook signing secret comes from the RiderX partner panel after you register the inbound webhook URL there.<\/li>\n<li>Fixed the Show\/Hide toggle only working on the first secret field on the settings screen.<\/li>\n<\/ul>\n\n<h4>1.0.49<\/h4>\n\n<ul>\n<li>Declared compatibility with WooCommerce High-Performance Order Storage (HPOS \/ custom order tables).<\/li>\n<li>Declared compatibility with the WooCommerce Cart &amp; Checkout Blocks.<\/li>\n<li>Resolves the \"incompatible with currently enabled WooCommerce features\" admin notice.<\/li>\n<\/ul>\n\n<h4>1.0.48<\/h4>\n\n<ul>\n<li>Fixed local Docker middleware URL handling: settings now accept private IP and host.docker.internal base URLs.<\/li>\n<li>Normalized middleware URL input so pasted endpoint paths like \/health or \/api\/integrations\/woocommerce\/calculate-rate are reduced to the proper base URL.<\/li>\n<li>Added local auto-detection fallback for middleware base URL when the field is left empty.<\/li>\n<\/ul>\n\n<h4>1.0.47<\/h4>\n\n<ul>\n<li>Synced readme Stable tag with plugin header version (1.0.47).<\/li>\n<li>Excluded wordpress-org-assets directory from distributable plugin ZIP.<\/li>\n<\/ul>\n\n<h4>1.0.46<\/h4>\n\n<ul>\n<li>Added per-day opening schedule with multiple time ranges (example: 09:00-14:00,16:00-22:00).<\/li>\n<li>Added support for same-day close\/reopen windows and overnight ranges.<\/li>\n<li>Opening-hours status now evaluates current day plus overnight spill from previous day.<\/li>\n<li>Reduced noise on RiderX settings page by hiding unrelated admin notices from other plugins.<\/li>\n<\/ul>\n\n<h4>1.0.45<\/h4>\n\n<ul>\n<li>Added translators comments to all translatable strings with placeholders.<\/li>\n<li>Hardened input sanitization and nonce verification in admin and checkout handlers.<\/li>\n<li>Fixed release archive to use POSIX path separators for reliable extraction on all platforms.<\/li>\n<\/ul>\n\n<h4>1.0.44<\/h4>\n\n<ul>\n<li>Updated readme Tested up to to WordPress 7.0 for directory compatibility checks.<\/li>\n<\/ul>\n\n<h4>1.0.43<\/h4>\n\n<ul>\n<li>Updated plugin text domain to riderx-delivery-sync to match the plugin slug.<\/li>\n<li>Replaced inline admin  output with wp_add_inline_style() to comply with enqueue best practices.<\/li>\n<li>Updated readme Tested up to value to WordPress 6.9.<\/li>\n<\/ul>\n\n<h4>1.0.42<\/h4>\n\n<ul>\n<li>Removed UTF-8 BOM from all PHP source files to satisfy WordPress.org automated scanner checks.<\/li>\n<li>Rebuilt release archive after encoding cleanup.<\/li>\n<\/ul>\n\n<h4>1.0.41<\/h4>\n\n<ul>\n<li>Removed UTF-8 BOM bytes from PHP files flagged by WordPress.org automated checks.<\/li>\n<li>Repackaged release artifact with the corrected file encoding.<\/li>\n<\/ul>\n\n<h4>1.0.40<\/h4>\n\n<ul>\n<li>Renamed plugin display name to RiderX Delivery Sync to comply with WordPress.org naming policy.<\/li>\n<li>Updated release packaging slug to riderx-delivery-sync.<\/li>\n<\/ul>\n\n<h4>1.0.39<\/h4>\n\n<ul>\n<li>Packaging cleanup: removed markdown release notes from the distributable plugin ZIP.<\/li>\n<li>Build script now excludes all .md files from release archives.<\/li>\n<\/ul>\n\n<h4>1.0.38<\/h4>\n\n<ul>\n<li>Hardened inbound webhook authorization: signed requests now require a configured signing secret or a valid API key.<\/li>\n<li>Added signed webhook replay-window checks using the RiderX signature timestamp.<\/li>\n<li>Switched Leaflet admin assets to bundled local files for WordPress.org packaging compliance.<\/li>\n<li>Added release packaging assets and WordPress.org submission\/release guide.<\/li>\n<\/ul>\n\n<h4>1.0.37<\/h4>\n\n<ul>\n<li>Inbound status webhook now understands the real RiderX delivery payload (event + delivery object) and resolves the WooCommerce order by stored delivery id or the \"WooCommerce order N\" description, in addition to the legacy flat payload.<\/li>\n<li>Added support for RiderX's X-Service-Signature (HMAC-SHA256) webhook authentication, with an optional \"Webhook Signing Secret\" setting to verify the signature. Signed RiderX requests are accepted and bound to an existing order when no secret is configured.<\/li>\n<li>Webhook updates now backfill the RiderX delivery id and sender\/receiver coordinates onto orders that were dispatched before this metadata was stored.<\/li>\n<\/ul>\n\n<h4>1.0.36<\/h4>\n\n<ul>\n<li>Inbound status webhook now also reads the API key from the HTTP_AUTHORIZATION \/ REDIRECT_HTTP_AUTHORIZATION server variables, so the Authorization: Bearer header keeps working on Apache\/FastCGI stacks that strip it.<\/li>\n<\/ul>\n\n<h4>1.0.35<\/h4>\n\n<ul>\n<li>Delivery history now shows a separate, expandable detail panel per order with its own map.<\/li>\n<li>Detail map draws the pickup-to-customer direction (road route with straight-line fallback).<\/li>\n<li>Added real-time delivery status (current status, timeline, rider, vehicle, ETAs) fetched live from the RiderX API with a refresh button.<\/li>\n<\/ul>\n\n<h4>1.0.34<\/h4>\n\n<ul>\n<li>Display the delivery rate breakdown directly in the shipping method label so it appears in block checkout.<\/li>\n<\/ul>\n\n<h4>1.0.33<\/h4>\n\n<ul>\n<li>Added delivery rate breakdown (distance, estimated time, net price, VAT) to the shipping rate.<\/li>\n<\/ul>","raw_excerpt":"Two-way sync between WooCommerce orders and the RiderX delivery platform, including live delivery rate quotes at checkout.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/323346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=323346"}],"author":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/riderx"}],"wp:attachment":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=323346"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=323346"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=323346"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=323346"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=323346"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=323346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}