Key Takeaways
PayFast remains the default for SA WooCommerce stores: cheapest setup, no merchant account needed, but the checkout redirects off-site and the WordPress plugin is dated
Peach Payments offers the cleanest hosted checkout experience and supports 3D Secure 2 properly, but pricing is negotiated and tilts toward bigger merchants
Yoco's WooCommerce integration is solid for small stores and offers the best UX of any local gateway, but recurring billing is limited
Stripe (via Stripe ZA) is the right pick for any store with material international revenue and the only sensible option for subscription products
Most SA stores end up with two gateways: a local one (PayFast or Yoco) for ZAR customers and Stripe for international customers
Why the gateway choice is bigger than it looks
Of all the technical decisions on a South African WooCommerce store, the payment gateway is the one that compounds. Get it right and the store quietly takes money for years. Get it wrong and the result is some combination of cart abandonment, chargeback exposure, manual reconciliation, and a migration project two years later that costs more than the original build.
The four gateways below cover roughly 95% of the SA WooCommerce market in 2026. We have integrated, audited, and migrated between all of them. This is what we tell clients when they ask.
PayFast
PayFast is the default. It has the largest install base on South African WooCommerce stores, the easiest sign-up process, and the lowest barrier to entry. If you have ever bought something from a South African online store, there is a strong chance the payment went through PayFast.
How the integration works
The official PayFast plugin for WooCommerce redirects the customer off your site to the PayFast hosted checkout page. They enter card details on PayFast's domain, complete the payment, and get redirected back to your site with a notification sent server-to-server (ITN, Instant Transaction Notification).
This is an off-site gateway. The customer leaves your domain during payment. This matters for two reasons:
- The PayFast page is not branded to look like your store. Some customers hesitate when they leave a familiar domain.
- You do not handle card data, which means PCI compliance is minimal for you. PayFast carries it.
// Typical PayFast ITN endpoint handler in a child plugin
add_action( 'woocommerce_api_wc_gateway_payfast', function() {
// PayFast's server posts here after a transaction
// Validate the signature
// Verify the source IP against PayFast's published list
// Verify the transaction against PayFast's validate endpoint
// Update the WooCommerce order status
});The signature validation is the bit that most home-grown PayFast integrations get wrong. PayFast computes an MD5 signature over the posted parameters in a specific order. If you do not reproduce that order exactly, validation fails silently and orders get stuck in on-hold. The official plugin handles it, but custom integrations regularly get this wrong.
What works
- Pay-as-you-go pricing, no monthly fee on the standard account.
- No merchant account required. You sign up with PayFast directly.
- Supports cards, EFT (instant bank transfer), Bitcoin, Zapper, Masterpass.
- Reasonable settlement timeframes (T+2 to T+7 depending on the account).
- Established ITN system that's been stable for years.
What does not
- The hosted checkout is dated. The page looks like 2018 web design. We are not aware of any planned redesign.
- The WooCommerce plugin has not had material UX work in several years. The settings page is clunky and the error messages are unhelpful.
- 3DS2 implementation is conservative. More transactions get challenged than under Stripe or Peach, and challenged transactions abandon at a higher rate.
- Subscriptions support via the WooCommerce Subscriptions plugin works but has edge cases around card updates, failed renewals, and pro-rated changes.
- Customer support for technical integration issues is slower than Stripe or Peach.
When PayFast is the right call
Small to medium SA store, mostly local customers, no recurring billing, owner who wants the simplest path to taking payments online. Stores under R1M monthly turnover with mostly-local audience.
Peach Payments
Peach Payments is the more enterprise-feeling of the SA gateways. They focus on hosted-checkout experiences that feel like part of your site rather than a redirect to a third-party page. They support more international card networks than PayFast and have a cleaner 3DS2 implementation.
How the integration works
Peach offers two main integration patterns for WooCommerce:
- Hosted Payment Page: similar to PayFast in concept (customer leaves your site briefly) but the page can be styled to match your brand colours and typography. The flow feels more seamless.
- Embedded checkout: a tokenisation flow where the card details are entered in an iframe on your checkout page. The card data never touches your server (so PCI scope stays low) but the visual experience feels native.
The official Peach plugin for WooCommerce supports both modes. Most stores we manage on Peach use the embedded checkout because it has the highest conversion in our experience.
// Peach's tokenisation endpoint produces a registration ID
// that you then use to charge the card from your server
// Pseudocode of the server-side charge after tokenisation:
$response = wp_remote_post( 'https://eu-test.oppwa.com/v1/payments', array(
'headers' => array(
'Authorization' => 'Bearer ' . PEACH_ACCESS_TOKEN,
),
'body' => array(
'entityId' => PEACH_ENTITY_ID,
'amount' => $order->get_total(),
'currency' => 'ZAR',
'paymentType' => 'DB',
'registrationId' => $registration_id,
'merchantTransactionId' => $order->get_order_number(),
),
));What works
- 3DS2 done properly, with frictionless authentication on low-risk transactions.
- Embedded checkout that feels native to your store.
- Tokenisation that supports card-on-file and recurring charges (the foundation for subscription integrations).
- Stronger fraud screening tools than PayFast.
- Local SA support with reasonable response times.
- ZAR and multiple international currencies in one integration.
What does not
- Pricing is opaque. Rates are negotiated and tend to favour higher-volume merchants. For a small store, PayFast or Yoco is usually cheaper.
- The technical onboarding is more involved than PayFast. There is more configuration to get right (entity IDs, brand IDs, webhook URLs).
- Recurring billing through Peach in WooCommerce needs custom work. The WooCommerce Subscriptions integration is not as mature as Stripe's.
- The dashboard, while functional, is less polished than Stripe's.
When Peach is the right call
Mid-sized to larger SA store with R500k+ monthly turnover. Branded checkout experience matters. International cards are common. Conversion-rate sensitivity is high enough that the better 3DS2 implementation pays back.
Yoco
Yoco started as a card reader for small SA businesses and has expanded into online payments. Their WooCommerce plugin is newer than PayFast's and the UX shows it. For small SA stores that want a clean, on-trend payment experience, Yoco is genuinely good.
How the integration works
Yoco's WooCommerce plugin uses an embedded checkout (similar to Peach's tokenisation flow, similar in concept to Stripe Elements). Card details enter an iframe on the checkout page. Yoco returns a token. Your server charges the token through their API.
This is a fully on-site checkout: the customer never leaves your domain. The UX is materially better than PayFast's redirect.
What works
- Modern checkout experience. Looks and feels current.
- Fast onboarding. New stores can be live in a day.
- Predictable pricing: a flat percentage with no monthly fee.
- Real-time dashboard with reasonable analytics.
- Good local support, including for integration questions.
- Pay by Link, QR code, and other channels accessible from the same account.
What does not
- Limited international card support compared to Peach or Stripe.
- Recurring billing in WooCommerce is not well-supported at the time of writing. We have not seen a robust Yoco + WooCommerce Subscriptions setup in production.
- API rate limits are lower than the international gateways, which matters for high-throughput stores at peak times.
- Reporting and reconciliation tools are less mature than Peach's.
When Yoco is the right call
Small to mid-sized SA store, mostly local customers, no subscriptions, owner cares about the checkout experience and wants a payment partner that does not feel ten years old. R0 to R1M monthly turnover.
Stripe (Stripe ZA)
Stripe formally launched in South Africa in 2024 with ZAR support and local acquiring. Stripe ZA is now the standard recommendation for any SA store with material international revenue, subscription products, or sophistication requirements that the local gateways do not meet.
How the integration works
Stripe Elements is an embedded checkout where card fields render in iframes on your checkout page, exactly as on any international Stripe integration. The card data never touches your server. PCI scope is minimal.
For subscriptions, Stripe Billing handles the entire lifecycle: trial periods, plan changes, prorations, failed-payment retries, dunning emails, all server-side and reliable.
// Stripe Elements card field initialisation
const stripe = Stripe('pk_live_...');
const elements = stripe.elements({
mode: 'payment',
amount: orderTotal,
currency: 'zar',
});
const paymentElement = elements.create('payment');
paymentElement.mount('#payment-element');The official Stripe plugin for WooCommerce is well-maintained, supports Stripe Elements and Stripe Checkout (their hosted page), and integrates cleanly with WooCommerce Subscriptions.
What works
- The single best checkout UX of any gateway covered here.
- Frictionless 3DS2 done as well as anyone in the industry does it.
- Production-grade subscription support, including SCA-compliant card-on-file.
- Excellent documentation and developer experience.
- Built-in support for Apple Pay, Google Pay, and other mobile wallets.
- Stripe Tax can handle SA VAT automatically.
- Granular fraud screening (Stripe Radar) with rules you can tune.
- Multi-currency, multi-region from a single account.
What does not
- Fees are higher than PayFast for ZAR-to-ZAR transactions (Stripe ZA's local card fee is roughly comparable but international cards cost more).
- The dashboard is in USD by default with ZAR available as a display option; reconciliation requires deliberate currency-handling on your side.
- Customer support is email and chat (no SA phone line equivalent to what Peach offers).
- Some SA banks issue cards that occasionally hit Stripe's fraud rules harder than they should, which requires Radar tuning.
When Stripe is the right call
Any store with material international revenue. Any store with subscription products. Any store where the checkout UX is a competitive differentiator. Larger stores (R1M+ monthly) where the fees pay back in lower abandonment.
The honest comparison table
| Factor | PayFast | Peach | Yoco | Stripe ZA |
|---|---|---|---|---|
| Setup difficulty | Easiest | Moderate | Easy | Moderate |
| Hosted vs on-site checkout | Hosted (redirect) | Both | On-site (Elements) | On-site (Elements) |
| Checkout UX | Dated | Strong | Strong | Best |
| 3DS2 implementation | Conservative | Strong | Strong | Best |
| Subscriptions support | Workable, edge cases | Custom work | Limited | Production-grade |
| International card support | Limited | Strong | Limited | Best |
| Apple Pay / Google Pay | No | Yes | Limited | Yes |
| Settlement time | T+2 to T+7 | T+1 to T+3 | T+2 | T+2 (ZA) |
| Fees (typical SA card) | ~3.5% | 2.5-3.5% negotiated | ~2.95% | ~2.9% + R2 |
| Best fit | Small SA store | Mid to large SA store | Small SA store, UX-conscious | International, subscriptions, larger |
The two-gateway pattern most SA stores end up at
After managing dozens of SA Woo stores, here is the configuration we see working most often for stores doing more than R500k monthly turnover with international revenue.
ZAR card from SA visitor → PayFast or Yoco (cheapest local rate)
Recurring subscription → Stripe
International card → Stripe
Mobile wallet checkout → Stripe (Apple Pay / Google Pay)This is implemented by enabling both gateways in WooCommerce and using a small mu-plugin to set the default based on the visitor's country and the product type. The customer sees one or two clean options at checkout; the routing is invisible.
We will write a follow-up on the implementation specifics of multi-gateway routing in WooCommerce. For now, the recommendation is to design for two gateways from the start, even if you launch with one. Migrating from a single gateway to a dual setup later is far more work than building for both from day one.
What we'd actually recommend
- New store, small, SA-only customers: start with Yoco or PayFast. Yoco for better UX, PayFast for the lowest friction sign-up.
- New store, expecting international customers: start with Stripe and add a local gateway later if local card acceptance is an issue.
- Existing store on PayFast, struggling with international cards: add Stripe alongside.
- Existing store on PayFast, struggling with subscription churn: migrate subscriptions to Stripe even if you keep PayFast for one-off purchases.
- Existing store doing R5M+ monthly, on PayFast: review whether Peach's negotiated rates and better fraud tools would pay back.
The gateway is one of the few decisions on a Woo store that is hard to reverse once you have years of customer card tokens in one provider's system. Pick deliberately.
Related reading
- WordPress Hosting in South Africa: Xneelo vs Hetzner vs International Hosts. The hosting decision sits underneath payment performance.
- Why Your South African WooCommerce Store Feels Slow to International Visitors. Gateway choice affects how this plays out in checkout.
- wp_postmeta is Destroying Your WooCommerce Store's Speed. The database side of checkout performance.
- Scaling WooCommerce: what breaks after 10,000 visitors. When the gateway is fine and something else is the bottleneck.

Written by
Barry van Biljon
Full-stack developer specializing in high-performance web applications with React, Next.js, and WordPress.
Ready to Get Started?
Have questions about implementing these strategies? Our team is here to help you build high-performance web applications that drive results.
