{"id":279130,"date":"2026-03-16T10:22:18","date_gmt":"2026-03-16T10:22:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/topomer\/"},"modified":"2026-03-30T10:05:09","modified_gmt":"2026-03-30T10:05:09","slug":"topomer","status":"publish","type":"plugin","link":"https:\/\/tr.wordpress.org\/plugins\/topomer\/","author":23343342,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0","stable_tag":"trunk","tested":"6.9.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Topomer","header_author":"(C) Topomer","header_description":"A plugin to manage promo codes.","assets_banners_color":"8e9ea0","last_updated":"2026-03-30 10:05:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/topomer.com\/","header_author_uri":"","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.0":{"tag":"1.0.0","author":"gofranjemai","date":"2026-03-16 10:23:38"}},"upgrade_notice":{"1.1.3":"<p>Security and compatibility update to satisfy WordPress.org review requirements.\nThis release hardens session handling, sanitization\/escaping, and activation-only core loading.<\/p>","1.0":"<p>Initial release. Ensure WooCommerce is installed and active before activation.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3494415,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3494415,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3494415,"resolution":"1544x500","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3494415,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3494415,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3494415,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3494415,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3494415,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3494415,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3494415,"resolution":"7","location":"assets","locale":""}},"screenshots":{"1":"Topomer admin dashboard","2":"Manual promo management screen","3":"Customer balance display during checkout","4":"Topomer payment option in WooCommerce checkout","5":"Topomer logo asset used for branding","6":"Topomer mobile profile screen preview","7":"Topomer mobile balance screen preview"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[591,507,174841,257852,286],"plugin_category":[45],"plugin_contributors":[257853,257854],"plugin_business_model":[],"class_list":["post-279130","plugin","type-plugin","status-publish","hentry","plugin_tags-coupons","plugin_tags-payment","plugin_tags-promo-codes","plugin_tags-topomer","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-anisawadni","plugin_contributors-chouaybaroua","plugin_committers-gofranjemai"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/topomer\/assets\/icon-128x128.png?rev=3494415","icon_2x":"https:\/\/ps.w.org\/topomer\/assets\/icon-256x256.png?rev=3494415","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/topomer\/assets\/screenshot-1.png?rev=3494415","caption":"Topomer admin dashboard"},{"src":"https:\/\/ps.w.org\/topomer\/assets\/screenshot-2.png?rev=3494415","caption":"Manual promo management screen"},{"src":"https:\/\/ps.w.org\/topomer\/assets\/screenshot-3.png?rev=3494415","caption":"Customer balance display during checkout"},{"src":"https:\/\/ps.w.org\/topomer\/assets\/screenshot-4.png?rev=3494415","caption":"Topomer payment option in WooCommerce checkout"},{"src":"https:\/\/ps.w.org\/topomer\/assets\/screenshot-5.png?rev=3494415","caption":"Topomer logo asset used for branding"},{"src":"https:\/\/ps.w.org\/topomer\/assets\/screenshot-6.png?rev=3494415","caption":"Topomer mobile profile screen preview"},{"src":"https:\/\/ps.w.org\/topomer\/assets\/screenshot-7.png?rev=3494415","caption":"Topomer mobile balance screen preview"}],"raw_content":"<!--section=description-->\n<p>Topomer extends WooCommerce with two main capabilities:<\/p>\n\n<ol>\n<li>Promo code management (automatic and manual)<\/li>\n<li>A Topomer payment flow that lets eligible customers pay with their Topomer balance<\/li>\n<\/ol>\n\n<p>The plugin validates customer tokens through Topomer services, calculates discount rules from remote price intervals, and updates balances after successful checkout.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Automatic promo code generation based on cart total<\/li>\n<li>Manual promo code creation and management from the admin area<\/li>\n<li>Dynamic discount percentage based on configured price intervals<\/li>\n<li>WooCommerce checkout integration<\/li>\n<li>Topomer token validation through API<\/li>\n<li>Customer balance display at checkout<\/li>\n<li>Balance consumption and synchronization after successful payment<\/li>\n<\/ul>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 5.0+<\/li>\n<li>WooCommerce installed and activated<\/li>\n<li>PHP 7.4+<\/li>\n<\/ul>\n\n<h3>Setup<\/h3>\n\n<ol>\n<li>Confirm WooCommerce is active.<\/li>\n<li>Configure your Topomer settings and API-related options.<\/li>\n<li>Verify promo intervals and manual promo settings.<\/li>\n<li>Test checkout using a valid Topomer token.<\/li>\n<\/ol>\n\n<h3>External Services<\/h3>\n\n<p>This plugin relies on external services provided by Topomer (hosted on files-pub.com) for core functionality. Without these services, token validation, balance handling, and some promo\/payment logic will not work.<\/p>\n\n<h4>Service Provider<\/h4>\n\n<ul>\n<li>Provider: Topomer<\/li>\n<li>Service base domain: files-pub.com<\/li>\n<li>Terms of service: https:\/\/topomer.com\/terms<\/li>\n<li>Privacy policy: https:\/\/topomer.com\/privacy<\/li>\n<\/ul>\n\n<h4>Endpoints, Data Sent, and Purpose<\/h4>\n\n<ol>\n<li>Token verification endpoint<\/li>\n<\/ol>\n\n<p>* URL: https:\/\/files-pub.com\/api\/plugin\/users\/get-by-token\n* Purpose: Validate customer token and retrieve account data.\n* Trigger: Checkout flow and visits containing ?idTopomer=TOKEN.\n* Data sent: Token value (URL parameter).<\/p>\n\n<ol>\n<li>Price intervals endpoint<\/li>\n<\/ol>\n\n<p>* URL: https:\/\/files-pub.com\/api\/interval-prix\n* Purpose: Retrieve discount intervals used for dynamic promo calculation.\n* Trigger: Cart\/checkout logic when discount rules are needed.\n* Data sent: No customer personal data.<\/p>\n\n<ol>\n<li>Balance update endpoint<\/li>\n<\/ol>\n\n<p>* URL: https:\/\/files-pub.com\/api\/plugin\/users\/update-solde\n* Purpose: Update user balance after successful payment.\n* Trigger: After order completion\/payment processing.\n* Data sent: Token, updated balance amount, user ID.<\/p>\n\n<ol>\n<li>Token expiration endpoint<\/li>\n<\/ol>\n\n<p>* URL: https:\/\/files-pub.com\/api\/plugin\/users\/update-expired\n* Purpose: Mark a token as used\/expired.\n* Trigger: After token usage or validation workflow.\n* Data sent: Token, expiration status.<\/p>\n\n<ol>\n<li>Personal shopper balance endpoint<\/li>\n<\/ol>\n\n<p>* URL: Hosted on files-pub.com (Topomer internal endpoint)\n* Purpose: Retrieve available shopper balance for payment checks.\n* Trigger: Access with ?idTopomer=ID and during checkout.\n* Data sent: Personal shopper ID and authentication token in headers.<\/p>\n\n<ol>\n<li>Promo code management endpoints<\/li>\n<\/ol>\n\n<p>* URL: Hosted on files-pub.com (Topomer internal endpoints)\n* Purpose: Create\/update promo codes from admin actions.\n* Trigger: Admin creates or updates promo definitions.\n* Data sent: Promo details (code, percentage, type, and ID for updates).<\/p>\n\n<ol>\n<li>Order processing endpoint<\/li>\n<\/ol>\n\n<p>* URL: Hosted on files-pub.com (Topomer internal endpoint)\n* Purpose: Create\/process order records after payment.\n* Trigger: After successful payment.\n* Data sent: Order data (order ID, customer info, items, totals, payment method).<\/p>\n\n<ol>\n<li>Authentication endpoint<\/li>\n<\/ol>\n\n<p>* URL: Hosted on files-pub.com (Topomer internal endpoint)\n* Purpose: Obtain access token for API requests.\n* Trigger: Plugin authentication flow.\n* Data sent: Authentication credentials.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Developed by Topomer.<\/p>\n\n<!--section=installation-->\n<h4>Install from WordPress Admin<\/h4>\n\n<ol>\n<li>In WordPress admin, go to Plugins &gt; Add New.<\/li>\n<li>Search for \"Topomer\".<\/li>\n<li>Click Install Now.<\/li>\n<li>Click Activate.<\/li>\n<\/ol>\n\n<h4>Manual Install (ZIP)<\/h4>\n\n<ol>\n<li>Download the plugin ZIP.<\/li>\n<li>In WordPress admin, go to Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Upload the ZIP file and click Install Now.<\/li>\n<li>Activate the plugin.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20woocommerce%3F\"><h3>Does this plugin require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce must be installed and active.<\/p><\/dd>\n<dt id=\"how%20are%20automatic%20promo%20codes%20generated%3F\"><h3>How are automatic promo codes generated?<\/h3><\/dt>\n<dd><p>Promo rules are applied dynamically using cart total and price intervals from Topomer APIs.<\/p><\/dd>\n<dt id=\"how%20does%20topomer%20payment%20appear%20at%20checkout%3F\"><h3>How does Topomer payment appear at checkout?<\/h3><\/dt>\n<dd><p>When conditions are met (for example a valid token and eligible promo\/payment context), Topomer payment becomes available in checkout.<\/p><\/dd>\n<dt id=\"what%20if%20the%20user%20balance%20is%20not%20enough%3F\"><h3>What if the user balance is not enough?<\/h3><\/dt>\n<dd><p>The payment is rejected and the customer is notified about the insufficient amount.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Refactor plugin bootstrap into modular files for maintainability.<\/li>\n<li>Restrict core upgrade loading to activation context only (guarded dbDelta usage).<\/li>\n<li>Remove direct WP_List_Table core file loading from templates.<\/li>\n<li>Ensure sessions are started only in the narrow Topomer flow (?idTopomer).<\/li>\n<li>Improve session data sanitization and validation in payment flow.<\/li>\n<li>Escape API error output to prevent unsafe admin\/frontend notices.<\/li>\n<li>Add session_write_close() after session writes to reduce lock duration.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Automatic promo code generation<\/li>\n<li>Manual promo management<\/li>\n<li>WooCommerce integration<\/li>\n<li>Topomer payment method<\/li>\n<li>Token verification via API<\/li>\n<li>Dynamic discount calculation<\/li>\n<li>Balance synchronization after payment<\/li>\n<\/ul>","raw_excerpt":"Manage automatic and manual promo codes for WooCommerce, with Topomer balance payment support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/279130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=279130"}],"author":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/gofranjemai"}],"wp:attachment":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=279130"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=279130"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=279130"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=279130"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=279130"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=279130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}