Stripe Payment Setup
Complete Stripe configuration guide for tournament payments
Complete guide to setting up and configuring Stripe payment processing for your dance tournaments.
Required: Stripe configuration is mandatory for any tournament that collects entry fees. This setup must be completed before creating paid tournaments.
Why Stripe?
Benefits for dance tournaments
Automation:
- Instant payments - immediate confirmations
- Recurring billing - for annual packages
- Multi-currency - international tournaments
- Refunds - easy online refunds
Security:
- PCI DSS Level 1 - highest standard
- 3D Secure - additional verification
- Fraud detection - fraud detection
- GDPR compliant - GDPR compliance
Costs (Poland):
European cards: 1.4% + 0.25 EUR
International cards: 2.9% + 0.25 EUR
BLIK: 1.6% (no fixed fee)
P24 transfers: 2.2% + 0.80 PLN
Getting Started
Stripe Account Registration
Required information:
- Company data - name, tax ID, address
- Representative - name, surname, personal ID
- Bank account - for payouts (IBAN)
- Business description - "Dance tournament organization"
Verification process:
- Fill out the form at stripe.com/en-pl
- Submit documents:
- Company registration extract
- Representative's ID
- Address confirmation (utility bill)
- Wait for verification (24-72h)
You can start testing in test mode immediately after registration!
Basic Configuration
Stripe Dashboard:
- Log in to dashboard.stripe.com
- Go to Settings → Business settings
- Complete:
- Public details - name visible to customers
- Customer emails - enable automatic confirmations
- Branding - organization logo and colors
Regional settings:
Country: Poland
Timezone: Europe/Warsaw
Settlement currency: PLN
Date format: DD/MM/YYYY
Communication language: Polish
Payment methods:
- ✅ Cards - Visa, Mastercard, Amex
- ✅ BLIK - popular in Poland
- ✅ Przelewy24 - bank transfers
- ✅ Apple Pay - mobile payments
- ✅ Google Pay - Android users
eParkiet Integration
API Keys:
- Stripe Dashboard → Developers → API keys
- Copy keys:
Publishable key: pk_live_51H3bgk... Secret key: sk_live_51H3bgk...
- In eParkiet → Settings → Billing
- Paste keys and save
Webhook configuration:
- Stripe Dashboard → Developers → Webhooks
- Click "Add endpoint"
- Endpoint URL:
https://app.eparkiet.com/api/stripe/webhook
- Events to send:
payment_intent.succeeded
payment_intent.payment_failed
checkout.session.completed
charge.refunded
Test connection:
- Create test tournament (1 PLN fee)
- Make test payment
- Check if status updated
Advanced Configuration
Checkout Experience
Stripe Elements (recommended):
- Embedded in your page - consistent UX
- Customizable - match your design
- Optimized - best conversion
- Secure - card data never touches your server
Implementation example:
// Initialize Stripe
const stripe = Stripe('pk_live_your_key');
const elements = stripe.elements();
// Create payment element
const paymentElement = elements.create('payment', {
layout: 'tabs',
defaultValues: {
billingDetails: {
name: participant.name,
email: participant.email
}
}
});
// Mount in form
paymentElement.mount('#payment-element');
Stripe Checkout:
- Ready payment page - zero code
- Mobile optimized - responsive design
- All methods - cards, BLIK, P24
- Compliance - SCA, 3DS ready
Session configuration:
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card', 'blik', 'p24'],
line_items: [{
price_data: {
currency: 'pln',
product_data: {
name: 'Standard Adult A + Latin Adult A',
description: 'Silesian Championships 2024'
},
unit_amount: 36000, // 360 PLN
},
quantity: 1,
}],
mode: 'payment',
success_url: 'https://eparkiet.com/success',
cancel_url: 'https://eparkiet.com/cancel',
});
Payment Intents API:
- Full control - custom payment flow
- Advanced features - hold funds, partial capture
- Complex scenarios - split payments, marketplaces
Payment flow:
- Create Payment Intent on backend
- Collect card data on frontend
- Confirm payment
- Handle 3D Secure if required
- Webhook confirms success
Example:
# Backend - create intent
intent = stripe.PaymentIntent.create(
amount=36000, # 360 PLN
currency='pln',
customer=customer_id,
metadata={
'tournament_id': 'MS2024',
'participant_id': '12345',
'categories': 'STD-A,LAT-A'
}
)
# Frontend - confirm
const result = await stripe.confirmCardPayment(
intent.client_secret,
{payment_method: paymentMethodId}
);
Stripe SDK:
- iOS/Android - native SDK
- React Native - for cross-platform
- Flutter - growing popularity
Mobile optimizations:
- Apple Pay / Google Pay
- Biometric authentication
- Card scanning via camera
- Offline mode with queue
Best practices:
- Minimize typing - use defaults
- Show progress clearly
- Handle network issues gracefully
- Test on various devices
Payment Error Handling
Most common issues:
Insufficient funds - insufficient account balance
- Suggest installment payment
- Allow payment method change
- Give 24h for retry
Card declined - card rejected by bank
- Ask to contact bank
- Suggest another card
- Offer alternative methods (BLIK, transfer)
3D Secure failed - verification error
- Explain what 3DS is
- Ask to retry
- Check data correctness
User messages:
const errorMessages = {
'insufficient_funds': 'Insufficient funds in account.',
'card_declined': 'Card declined. Try another card.',
'expired_card': 'Card expired. Use current card.',
'incorrect_cvc': 'Invalid CVC code. Check 3 digits on back.',
'processing_error': 'Processing error. Try again later.'
};
Transaction Management
Payment Dashboard
eParkiet main view:
Today's payments:
━━━━━━━━━━━━━━━━━━━━━━━━━━━
💚 Success: 45 (8,250 PLN)
🟡 Processing: 3 (540 PLN)
🔴 Failed: 2 (360 PLN)
━━━━━━━━━━━━━━━━━━━━━━━━━━━
Total: 50 transactions (9,150 PLN)
Transaction details:
- Payment ID - pi_1H3bgk2eZvKYlo
- Participant - John Smith
- Amount - 360 PLN
- Status - Paid
- Method - Visa •••• 4242
- Date - 15.03.2024 14:23
Refunds and Adjustments
Full Refund
When to use:
- Participation cancellation (before tournament)
- Tournament cancellation
- Technical error
Process:
- Find transaction in eParkiet
- Click "Refund"
- Confirm amount (default 100%)
- Add note (refund reason)
- Process refund
Timeline:
- Immediately - status in system
- 5-10 days - funds in customer account
Partial Refund
Scenarios:
- Category change to cheaper
- Cancellation of one category
- Compensation for issues
Calculation:
Original payment: 540 PLN
- Standard Adult A: 180 PLN
- Latin Adult A: 180 PLN
- Show Dance: 180 PLN
Participant cancels Show Dance
Refund: 180 PLN
Remaining: 360 PLN
Documentation:
- Automatic credit note
- Email to participant
- Transaction history record
Dispute Handling
Chargeback process:
- Notification - Stripe informs about dispute
- Deadline - 7 days to respond
- Evidence - provide documentation
- Decision - bank decides
Required evidence:
- Registration confirmation
- Terms with signature
- Communication with participant
- Participation proof (photos, results)
Prevention:
- Clear statement descriptor
- Quick communication
- Flexible refund policy
- Good customer service
Reports and Settlements
Data Export
Report types:
- Daily - all day transactions
- Monthly - for accounting
- Per tournament - event revenue
- Tax - VAT, invoices
Export format:
Date,Participant,Amount,VAT,Net,Method,Status,Tournament
2024-03-15,John Smith,360.00,67.32,292.68,Card,Paid,MS2024
2024-03-15,Anna Jones,180.00,33.66,146.34,BLIK,Paid,MS2024
2024-03-15,Peter Wilson,540.00,101.00,439.00,P24,Refund,MS2024
Accounting
Automatic invoices:
- Generation after payment
- Sequential numbering
- Email delivery to customer
- Cloud archive
System integration:
- Invoice API - push to accounting system
- Webhooks - real-time sync
- Batch export - once daily all
Conversion Optimization
A/B Testing
Elements to test:
- Payment method order - BLIK vs card first
- Single vs multi-step checkout
- Showing Stripe logo - trust signal
- Message language - formal vs friendly
Metrics:
Variant A (BLIK first):
- Started: 100
- Completed: 73
- Conversion: 73%
Variant B (Card first):
- Started: 100
- Completed: 81
- Conversion: 81% ✅
Abandoned Payments
Recovery strategies:
- Email reminder - after 2 hours
- Saved cart - link to complete
- Limited offer - 10% discount for 24h
- Personal touch - call from organizer
Email template:
Hi {name}!
We noticed you didn't complete registration for
Silesian Championships 2024.
Your selected categories are waiting:
- Standard Adult A
- Latin Adult A
[Complete Registration] <- button
Questions? Reply to this email.
Best regards,
eParkiet Team
Security
PCI Compliance
eParkiet + Stripe = Full compliance:
- Card data doesn't touch your servers
- Tokenization of all sensitive data
- Regular security audits
- End-to-end encryption
Fraud Prevention
Stripe Radar:
- Machine learning detection
- Blocking suspicious cards
- Transaction geolocation
- Velocity checking
Custom rules:
Block when:
- Amount > 2000 PLN AND first transaction
- Card country ≠ IP country
- >5 attempts within hour
- Known stolen card
GDPR & Privacy
Data in Stripe:
- Minimization - only necessary
- Retention - automatic deletion
- Portability - export on demand
- Encryption - at rest and transit
Congratulations! Your Stripe integration is ready. Remember to regularly monitor transactions and update settings as needed.
Next Steps
- Pricing Policy - pricing strategies
- Revenue Analysis - financial reports
- International Tournaments - currency handling