The 2026 Cashless Mandate
As we approach May 2026, a significant shift is coming to the Slovak business landscape. Under the new Electronic Records of Sales Act (the successor to the eKasa system), all entrepreneurs who record sales via eKasa will be legally required to enable their customers to pay via cashless methods.
While the "right to pay in cash" remains protected by the Constitution, the new law ensures that the choice is in the hands of the consumer. If a customer wants to pay by card, you must provide a way to do so.
What Does This Mean for E-shops?
For "pure" e-shops that already operate exclusively through online transfers or payment gateways, this change might seem redundant. However, it critically impacts e-shops that:
- Have physical pickup points where they accept cash.
- Operate their own delivery services where payment is handled at the door.
If you accept cash at a physical location, you must, from May 1, 2026, also offer at least one cashless alternative. This doesn't necessarily mean a traditional POS terminal; it could be a software terminal (Tap to Pay), or even an instant payment via QR code.
Why Stripe is the Ideal Solution
For developers and business owners looking to comply quickly while providing a world-class user experience, Stripe remains the gold standard. It’s not just a payment processor; it’s a complete financial infrastructure that handles everything from 3D Secure 2 authentication to automated tax collection.
In the context of the Slovak market, Stripe supports:
- Credit and Debit Cards (Visa, Mastercard).
- Digital Wallets (Apple Pay, Google Pay).
- Local Payment Methods (via SEPA Direct Debit or redirecting to bank-specific gateways).
Integrating Stripe into a React Application
Integrating Stripe into a modern React (or Next.js) application is straightforward thanks to the @stripe/react-stripe-js and @stripe/stripe-js libraries.
1. Installation
npm install @stripe/react-stripe-js @stripe/stripe-js
2. Setting Up the Elements Provider
Wrap your checkout component with the Elements provider. This gives your sub-components access to Stripe's UI components.
import { loadStripe } from '@stripe/stripe-js';
import { Elements } from '@stripe/react-stripe-js';
const stripePromise = loadStripe(process.env.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY!);
export default function CheckoutPage() {
const options = {
// Fully customizable appearance
appearance: { theme: 'night' },
// Use the client secret from your backend's PaymentIntent
clientSecret: '{{CLIENT_SECRET}}',
};
return (
<Elements stripe={stripePromise} options={options}>
<CheckoutForm />
</Elements>
);
}
3. Creating the Checkout Form
Using the PaymentElement, Stripe automatically renders the best payment methods based on the customer's location and device.
import { useStripe, useElements, PaymentElement } from '@stripe/react-stripe-js';
const CheckoutForm = () => {
const stripe = useStripe();
const elements = useElements();
const handleSubmit = async (event) => {
event.preventDefault();
if (!stripe || !elements) return;
const result = await stripe.confirmPayment({
elements,
confirmParams: {
return_url: "https://your-eshop.sk/order/success",
},
});
if (result.error) {
console.log(result.error.message);
}
};
return (
<form onSubmit={handleSubmit}>
<PaymentElement />
<button disabled={!stripe}>Pay Now</button>
</form>
);
};
Future-Proofing Your Business
The May 1 deadline is less than a month away. Transitioning to a cashless-first mindset isn't just about legal compliance; it's about meeting your customers where they are. In 2026, convenience is the primary currency.
By integrating a robust solution like Stripe, you're not just checking a box for the Slovak tax authorities—you're building a foundation for international growth and a seamless shopping experience.
Is your e-shop ready for the May 1st deadline? If you need assistance with payment gateway integration, feel free to reach out.