{"id":397499,"date":"2026-11-02T08:21:02","date_gmt":"2026-11-02T08:21:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/maytes-for-woocommerce\/"},"modified":"2026-11-02T22:45:00","modified_gmt":"2026-11-02T22:45:00","slug":"maytes-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/maytes-for-woocommerce\/","author":23597889,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Maytes for WooCommerce","header_author":"Maytes","header_description":"Let customers split the cost of an order with their mates. Adds the Split with Maytes button under the express checkout buttons, on the classic and the block checkout.","assets_banners_color":"","last_updated":"2026-11-02 22:45:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/developers.maytes.co\/woocommerce","header_author_uri":"https:\/\/maytes.co","rating":0,"author_block_rating":0,"active_installs":0,"downloads":151,"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":"kosmaytes","date":"2026-11-02 09:17:37","revision":3779387},"1.1.0":{"tag":"1.1.0","author":"kosmaytes","date":"2026-11-02 22:45:00","revision":3780921}},"upgrade_notice":{"1.1.0":"<p>Faster checkouts and webhooks, safer handling of repeated webhooks, and a popup option. Nothing to change on your store.<\/p>","1.0.1":"<p>Runs your store&#039;s own checkout checks for Split with Maytes orders, and fixes the button spacing on the classic checkout.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3779272,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3779272,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3779387,"resolution":"1","location":"assets","locale":"","width":1170,"height":1320}},"screenshots":{"1":"Split with Maytes on the checkout, on a phone."}},"plugin_section":[],"plugin_tags":[3148,232995,1887,163080,286],"plugin_category":[45],"plugin_contributors":[290195],"plugin_business_model":[],"class_list":["post-397499","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-group-payments","plugin_tags-payments","plugin_tags-split-payments","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-kosmaytes","plugin_committers-kosmaytes"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/maytes-for-woocommerce\/assets\/icon-128x128.png?rev=3779272","icon_2x":"https:\/\/ps.w.org\/maytes-for-woocommerce\/assets\/icon-256x256.png?rev=3779272","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/maytes-for-woocommerce\/assets\/screenshot-1.png?rev=3779387","caption":"Split with Maytes on the checkout, on a phone."}],"raw_content":"<!--section=description-->\n<p><strong>Split with Maytes<\/strong> lets a customer pay their share of an order and invite their mates to pay theirs. The order is paid once everyone has paid, and you receive the full amount through Maytes.<\/p>\n\n<p>The plugin adds three things to your store:<\/p>\n\n<ul>\n<li><strong>The Split with Maytes button<\/strong>, in a full-width row of its own under the express checkout buttons (Apple Pay, Google Pay, Link), at the same size. It works on the classic checkout and on the Checkout block.<\/li>\n<li><strong>A checkout route<\/strong> on your site that turns the cart into a pending WooCommerce order and a Maytes checkout.<\/li>\n<li><strong>A webhook route<\/strong> on your site that captures the payment and marks the order paid, so your usual order emails go out.<\/li>\n<\/ul>\n\n<p>Your theme, your Stripe setup and your card checkout stay exactly as they are.<\/p>\n\n<h4>What you need<\/h4>\n\n<ul>\n<li>A Maytes merchant account, with sandbox and production credentials from the Maytes merchant portal.<\/li>\n<li>WooCommerce, with AUD as the store currency.<\/li>\n<li>A public HTTPS site, so Maytes can deliver webhooks.<\/li>\n<li>At least one other payment method enabled in WooCommerce, such as card payments. On the Checkout block, Split with Maytes can't be the store's only payment method.<\/li>\n<\/ul>\n\n<p>The full setup guide is at <a href=\"https:\/\/developers.maytes.co\/woocommerce\">developers.maytes.co\/woocommerce<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects your store to Maytes, the service that runs Split with Maytes. It's needed to take Split with Maytes payments.<\/p>\n\n<ul>\n<li><strong>Maytes checkout button script<\/strong>, loaded from <code>https:\/\/js.maytes.co<\/code> on checkout pages where the button shows. It draws the button and opens the Maytes checkout. As with any script, the customer's browser sends standard request information, such as its IP address and user agent.<\/li>\n<li><strong>Maytes API<\/strong> (<code>https:\/\/api.maytes.co<\/code>, or <code>https:\/\/sandbox-api.maytes.co<\/code> while testing), called from your server only:\n\n<ul>\n<li>when a customer clicks Split with Maytes, to create the checkout. It sends the order ID, the total, the currency, the name, quantity and price of each line, and the return and cancel URLs on your store;<\/li>\n<li>when Maytes reports a payment, to capture or release it. It sends the checkout ID, the order ID, the total and the currency.\nYour OAuth client ID and secret are sent to <code>\/oauth\/token<\/code> to get an access token. The customer's name, email address and postal address are never sent.<\/li>\n<\/ul><\/li>\n<li><strong>Maytes checkout<\/strong>, the page the button opens, where the customer and their mates pay. The customer's payment details are entered there, with Maytes.<\/li>\n<\/ul>\n\n<p>Maytes <a href=\"https:\/\/maytes.co\/terms\/\">terms and conditions<\/a> and <a href=\"https:\/\/maytes.co\/privacy\/\">privacy policy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li><p>Add your Maytes settings to <code>wp-config.php<\/code>, above the line <code>\/* That's all, stop editing! *\/<\/code>. Start with sandbox values:<\/p>\n\n<p>define( 'MAYTES_ENV', 'sandbox' ); \/\/ 'production' when live\ndefine( 'MAYTES_API_ENDPOINT', 'https:\/\/sandbox-api.maytes.co' ); \/\/ live: https:\/\/api.maytes.co\ndefine( 'MAYTES_CLIENT_ID', '\u2026' );\ndefine( 'MAYTES_CLIENT_SECRET', '\u2026' );\ndefine( 'MAYTES_WEBHOOK_SECRET', '\u2026' );<\/p><\/li>\n<li><p>In the Maytes merchant portal, subscribe <code>https:\/\/your-store.example\/wp-json\/maytes\/v1\/webhook<\/code> to the <code>checkout.authorized<\/code> and <code>checkout.voided<\/code> events. Copy the signing secret it shows into <code>MAYTES_WEBHOOK_SECRET<\/code>.<\/p><\/li>\n<li>Pay with a sandbox test card, then switch every setting to production.<\/li>\n<\/ol>\n\n<p>The settings stay on your server: the plugin never stores them in the database or sends them to the browser.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20maytes%20account%3F\"><h3>Do I need a Maytes account?<\/h3><\/dt>\n<dd><p>Yes. The plugin connects your store to Maytes, which runs the split payment. Your credentials are in the Maytes merchant portal.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20checkout%20block%3F\"><h3>Does it work with the Checkout block?<\/h3><\/dt>\n<dd><p>Yes. On the Checkout block, Split with Maytes is an express payment method in a full-width row under the other express buttons. On the classic checkout, it sits directly under the WooCommerce Stripe Gateway's express buttons.<\/p><\/dd>\n<dt id=\"does%20it%20change%20my%20stripe%20setup%3F\"><h3>Does it change my Stripe setup?<\/h3><\/dt>\n<dd><p>No. Maytes payments stay outside Stripe. They don't appear in your Stripe dashboard, and the money arrives through Maytes settlements.<\/p><\/dd>\n<dt id=\"why%20does%20the%20button%20ask%20for%20my%20customer%27s%20details%20first%3F\"><h3>Why does the button ask for my customer's details first?<\/h3><\/dt>\n<dd><p>Maytes doesn't return the customer's name, email or address, and your order emails need them. If a required field is empty, the customer sees the checkout's usual error and fills it in first.<\/p><\/dd>\n<dt id=\"where%20are%20refunds%20made%3F\"><h3>Where are refunds made?<\/h3><\/dt>\n<dd><p>In the Maytes merchant portal, not from the WooCommerce order screen.<\/p><\/dd>\n<dt id=\"which%20currencies%20are%20supported%3F\"><h3>Which currencies are supported?<\/h3><\/dt>\n<dd><p>AUD. The button stays hidden for other currencies.<\/p><\/dd>\n<dt id=\"can%20the%20maytes%20checkout%20open%20in%20a%20popup%3F\"><h3>Can the Maytes checkout open in a popup?<\/h3><\/dt>\n<dd><p>Yes. By default the button takes the customer to the Maytes checkout and back. To open it in a popup instead, add this to your theme's <code>functions.php<\/code> or a small plugin:<\/p>\n\n<pre><code>add_filter( 'maytes_woo_client_config', function ( $config ) {\n    $config['button']['mode'] = 'popup';\n    return $config;\n} );\n<\/code><\/pre><\/dd>\n<dt id=\"can%20i%20stop%20a%20payment%20before%20the%20money%20is%20taken%3F\"><h3>Can I stop a payment before the money is taken?<\/h3><\/dt>\n<dd><p>Yes. Return <code>false<\/code> from the <code>maytes_woo_can_fulfil<\/code> filter, for example when a booking has just filled up. The customer's funds are released, nothing is captured, and the order is marked Failed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Faster checkouts and webhooks: the plugin keeps its Maytes access token until shortly before it expires, instead of asking for a new one every time.<\/li>\n<li>A webhook delivered twice at the same moment is acted on once.<\/li>\n<li>A customer can start Split with Maytes up to 10 times in 10 minutes, so repeated clicks can't pile up unpaid orders.<\/li>\n<li>The order received page says the payment is being confirmed while Maytes finishes it.<\/li>\n<li>New <code>maytes_woo_client_config<\/code> filter, for example to open the Maytes checkout in a popup.<\/li>\n<li>Deleting the plugin removes its cached tokens and settings. Orders keep their Maytes notes.<\/li>\n<li>The code is split into small classes. Hooks and their callbacks, routes, order data, the public <code>Maytes_Woo<\/code> methods and the <code>maytes_woo_can_fulfil<\/code> filter are unchanged, so code that moves the button or calls the plugin keeps working.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: on the classic checkout, the button now keeps clear of the \"Billing details\" heading when no other express button is showing.<\/li>\n<li>Fixed: a paid order now has one payment note, not two, on WooCommerce 10.4 and later.<\/li>\n<li>Fixed: your store's own checkout checks (minimum order amounts, address checks, coupons, stock, and rules added by other plugins) now also run when a customer chooses Split with Maytes.<\/li>\n<li>Fixed: when the last item sells out while the order is being placed, the customer now sees the out-of-stock message instead of a general error.<\/li>\n<li>Fixed: the order page now says \"Payment via Split with Maytes\", and Split with Maytes is listed under WooCommerce \u2192 Settings \u2192 Payments with a link to the setup guide.<\/li>\n<li>Fixed: product names with \"&amp;\" or quotes now show on the Maytes checkout as written, not as \"&amp;\".<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: Split with Maytes on the classic checkout and the Checkout block, with capture on the webhook.<\/li>\n<\/ul>","raw_excerpt":"Let customers split the cost of an order with their mates. Adds the Split with Maytes button to your WooCommerce checkout.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/397499","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=397499"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kosmaytes"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=397499"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=397499"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=397499"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=397499"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=397499"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=397499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}