Secure Donations Online & In-Person
Our donation platform is built on Stripe — Payment Element, Express Checkout (Apple Pay & Google Pay), Link, ACH bank transfers, and Stripe Terminal for kiosk tap-to-pay. Every payment confirmed via Stripe webhooks.
Donation Amount
$100.00
Express Checkout
ACH Bank Transfer
Stripe will securely connect to your bank account via Plaid. No routing numbers needed.
Pay with Link
Autofill your saved payment info from Link — Stripe's one-click checkout. No re-entering card details across any Link-enabled checkout.
Partner Program
Demonstrating Our Stripe Integration
This page provides a technical overview of how our donation platform integrates Stripe for secure payment collection. We use Stripe-hosted components — Payment Element and Stripe Terminal — ensuring sensitive card data is never handled by our servers. Prepared as part of our Stripe Partner Program application.
Online Donation Flow
Donors visit our public eFund site. Stripe Payment Element offers three payment methods in one seamless UI — card, ACH, and Link — with Express Checkout for one-tap payments.
Apple Pay & Google Pay
When available on the donor's device and browser, we render Stripe's Express Checkout Element — full-width Apple Pay and Google Pay buttons. No card entry, no form friction. Payment completes in one tap using the device's saved credentials.
Payment Element — Three Methods in One
If express checkout is skipped, we render Stripe Payment Element — a Stripe-hosted, adaptive UI that presents Card (manual entry), Bank ACH (via Stripe-powered Plaid connection), and Link (Stripe's one-click autofill network). Donors switch between them via tabs. Zero raw card data ever hits our servers.
Source of Truth
After processing, Stripe sends a signed payment_intent.succeeded or payment_intent.payment_failed webhook event to our backend. We verify the Stripe signature and update the donation record — no status is written before webhook confirmation.
Payment Flow
Donor selects amount
Donor visits eFund site, picks a campaign and donation amount.
PaymentIntent created
Frontend calls our API; backend creates a Stripe PaymentIntent and returns the client_secret.
Stripe UI collects payment
Express Checkout (Apple/Google Pay), or Payment Element (Card, ACH, or Link) captures payment details securely.
Stripe processes payment
Stripe handles card network authorization, fraud detection, and bank ACH initiation.
Webhook updates status
Stripe fires a signed webhook. Our backend verifies and marks the donation as confirmed.
Kiosk Payment Flow
Physical donation kiosks use Stripe Terminal with the Stripe M2 Reader for contactless NFC tap-to-pay.
Donation Kiosk
$50.00
Selected amount · General Fund
Stripe M2 Reader
Tap, insert, or swipe
Terminal Status
Hardware-Backed In-Person Payments
Our kiosk is connected to the Stripe M2 Reader via Stripe Terminal SDK. Donors tap their card, phone, or smartwatch — Stripe Terminal handles all EMV and NFC cryptography inside the reader's certified hardware. Card data never passes through our app.
Kiosk Flow
Donor approaches kiosk
Donor selects a campaign and donation amount on the kiosk touchscreen.
PaymentIntent created
Our system creates a Stripe PaymentIntent and registers it with the connected Terminal reader.
Donor taps card on M2
Stripe Terminal prompts the donor. The M2 reader reads the NFC signal and encrypts card data in hardware.
Stripe Terminal processes
Stripe authenticates, authorizes, and settles the transaction via its Terminal platform.
Webhook confirms result
Stripe fires a signed webhook. Our backend updates the kiosk donation status.
Payment Processing Architecture
Stripe webhooks are the single source of truth. Our backend only records a successful donation after receiving and verifying a Stripe-signed event.
Stripe handles all sensitive payment data inside Payment Element and Terminal — no card data ever reaches our servers.
Every webhook is verified using Stripe's HMAC signing secret before our backend processes the event.
Donation records are updated only after webhook confirmation, keeping records accurate even if a browser closes mid-payment.
Built on Stripe's Secure Infrastructure
Sensitive payment data is always handled by Stripe — never directly by our platform.
Payment Element and Stripe Terminal operate inside Stripe's PCI-compliant environment. Raw card numbers never transit our code path.
Final payment status is determined only by Stripe's signed webhook events — verified with Stripe's HMAC signing secret on every delivery.
Our frontend uses Stripe's JS SDK and passes only the PaymentIntent client_secret to Stripe's hosted UI. No card data flows through our app.
PaymentIntents use idempotency keys to prevent duplicate charges even in cases of network retries or client disconnects.
The Stripe M2 Reader is a Stripe-certified, tamper-resistant device. EMV and NFC card data is encrypted in hardware before leaving the reader.
Donations are only confirmed after webhook delivery, keeping records accurate across all failure scenarios including browser closure.
One Unified Payment Infrastructure
Stripe enables our platform to accept online donations via Payment Element, Express Checkout, Link, and ACH — and in-person kiosk donations via Stripe Terminal — through a single, reliable integration with webhook-confirmed accuracy.
Online Payments
- Express Checkout — Apple Pay & Google Pay
- Payment Element — Card entry
- Payment Element — ACH bank transfer
- Payment Element — Link (one-click)
In-Person Payments
- Stripe Terminal SDK
- Stripe M2 Reader
- NFC Tap-to-Pay / Contactless
- Webhook-confirmed donation status
This integration overview was prepared for the Stripe Partner Program application.