Docs
Stripe Integration

Stripe Integration

Connect Stripe for online card payments, subscription billing, and member self-service card updates.

Stripe is OnCloudWine's recommended online payment processor. It powers release payments for online-first wineries and handles your OnCloudWine subscription billing as well.

What Stripe does for you

Release payments

Charge cards on file when you process a release. Each charge becomes a Stripe PaymentIntent.

Subscription billing

Your OnCloudWine plan is billed monthly or annually via Stripe (handled automatically — see Billing & Invoices).

Card storage

Cards are stored on Stripe (PCI-compliant). OnCloudWine never sees raw card numbers.

Member self-service

Members update their card via the portal. The form is rendered by Stripe Elements, not OnCloudWine.

3D Secure

Stripe handles strong customer authentication for European-issued cards automatically.

Connect

  1. Open integrations

    Settings → Organization → Integrations → Stripe.

  2. Click Connect Stripe

    Redirects to Stripe Connect's OAuth flow. Sign in with your Stripe account (or create one — Stripe walks you through it if needed).

  3. Authorize

    Stripe asks you to confirm the connection. OnCloudWine requests permissions to create payment methods, charge customers, and read payment status.

  4. Land back in the dashboard

    The integration shows ACTIVE with your Stripe account name and the last four digits of your Stripe account ID.

Configure webhooks

The webhook events OnCloudWine listens to:

EventWhat it triggers
payment_intent.succeededPayment record → COMPLETED.
payment_intent.payment_failedPayment record → FAILED. Member is emailed to update their card.
charge.refundedRefund event added to the payment timeline.
customer.subscription.updatedUpdates your OnCloudWine subscription state.
invoice.paidMarks your OnCloudWine invoice as paid.

Charging release payments

When you click Process Payments on a release, OnCloudWine:

  1. Looks up each contact's Stripe customer

    Created the first time a payment is attempted for the contact.

  2. Finds the default payment method

    The card the member set as default in their portal.

  3. Creates a PaymentIntent

    Off-session capture (no member action needed). For 3DS-required cards, Stripe responds with requires_action and OnCloudWine flags the payment as needing member intervention.

  4. Awaits the webhook

    The success/failure event from Stripe transitions the payment record accordingly.

Authentication-required payments

European cards (and increasingly some US issuers) require 3D Secure authentication for off-session charges. When this happens:

  1. Stripe returns requires_action

    The PaymentIntent stays open, awaiting member confirmation.

  2. OnCloudWine emails the member

    The email contains a deep link to a Stripe-hosted page where they confirm the charge.

  3. Member completes 3DS

    Once confirmed, Stripe captures the charge and webhooks back to OnCloudWine. Payment record → COMPLETED.

Refunds

From any COMPLETED payment, click Refund to issue a full or partial refund. OnCloudWine submits the refund to Stripe and the payment timeline reflects the refund event when Stripe webhooks back (usually instant).

Disputes and chargebacks

If a member disputes a charge, Stripe notifies OnCloudWine via webhook and:

  • The payment record is flagged with a Disputed badge
  • A task is auto-created on the contact ("Respond to dispute")
  • The dispute timeline is visible on the payment detail page

You respond to disputes from the Stripe dashboard directly — OnCloudWine doesn't currently mediate dispute responses.

Square or Stripe?

Many wineries run both:

Use Square forUse Stripe for
In-personTasting-room sales, events, swipe transactions.
Online releasesRecurring release charges, subscriptions, branded portal.
BothYou can run both — assign each contact to whichever processor stores their card.

A contact has at most one default card on each processor. The release charge uses whichever processor is set as default for that contact.

What's next?