eParkiet LogoeParkiet
Payments & Revenue

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:

  1. Fill out the form at stripe.com/en-pl
  2. Submit documents:
    • Company registration extract
    • Representative's ID
    • Address confirmation (utility bill)
  3. Wait for verification (24-72h)

You can start testing in test mode immediately after registration!

Basic Configuration

Stripe Dashboard:

  1. Log in to dashboard.stripe.com
  2. Go to Settings → Business settings
  3. 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:

  1. Stripe Dashboard → Developers → API keys
  2. Copy keys:
    Publishable key: pk_live_51H3bgk...
    Secret key: sk_live_51H3bgk...
  3. In eParkiet → Settings → Billing
  4. Paste keys and save

Webhook configuration:

  1. Stripe Dashboard → Developers → Webhooks
  2. Click "Add endpoint"
  3. Endpoint URL:
    https://app.eparkiet.com/api/stripe/webhook
  4. 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:

  1. Create Payment Intent on backend
  2. Collect card data on frontend
  3. Confirm payment
  4. Handle 3D Secure if required
  5. 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:

  1. Find transaction in eParkiet
  2. Click "Refund"
  3. Confirm amount (default 100%)
  4. Add note (refund reason)
  5. 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:

  1. Notification - Stripe informs about dispute
  2. Deadline - 7 days to respond
  3. Evidence - provide documentation
  4. 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:

  1. Email reminder - after 2 hours
  2. Saved cart - link to complete
  3. Limited offer - 10% discount for 24h
  4. 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