Payment Integrations¶
The portfolio's payment story is a unified payment-gateway service that fronts five processors. Every billing-enabled app installs all five SDKs even if only one is the default; per-tenant routing flips between them.
Portfolio default: the five gateways¶
| Gateway | App count | Default for |
|---|---|---|
| Stripe | ~25 apps | Subscriptions, modern checkout flows |
| PayPal | ~15 apps | Consumer fallback |
| Braintree | ~10 apps | Enterprise / legacy merchants |
| Square | ~10 apps | In-person + online retail |
| Authorize.net | ~10 apps | Legacy enterprise |
Apps that ship the full five-gateway set: Automotive-Repair-Diagnosis-AI, Boomer_AI, Ecom-Sales, FamilyChat, GoGreen-AI-Concierge, GoGreen-SmartForms, GoGreen-Workflow-Hub, GoGreenPaperlessInitiative, GoGreenSourcingAI, GogreenSellerAI, Maximus, MyPollingApp, NaggingWifeAI, OpenSentinel, PRT, Realestate-all-docker, Recruiting_AI, Sales_AI_App, Tutor_AI, Voting_NewAndImproved.
Stripe¶
What it is. Card processing + billing engine. Subscriptions, checkout sessions, customer portal, invoices, tax (Stripe Tax), payment links, Apple Pay / Google Pay through one SDK. Webhooks for every state change.
Why it's the default. Best DX, best docs, fastest integration. Recurring billing is solved out of the box.
SDK: stripe (Node) — used everywhere. stripe-php for Maximus / Voting / WP plugins.
Common patterns:
- Checkout Sessions — for one-shot purchases. Stripe-hosted.
- Subscriptions — Boomer_AI ("Plus / Family / Premium"), Tutor_AI, FamilyChat. Webhook (customer.subscription.updated) drives the local user-tier column.
- Webhooks — every billing app verifies Stripe-Signature and runs the event through an idempotency check.
- Stripe Connect — not used. No marketplace-style platform-payment flows in the portfolio.
PayPal¶
What it is. The original online wallet. Consumers without a card on file, international payments, recurring billing.
SDK: @paypal/checkout-server-sdk (Node, deprecated but still in use), paypalrestsdk (Python — Automotive uses this), srmklive/paypal (PHP — Voting uses this).
Used as primary in: apps where the customer base skews older or international. PayPal is the "secondary checkbox" in Stripe-first apps.
Tradeoffs. SDK quality lags Stripe. Webhooks less reliable historically. Buyer protection rules can claw back funds.
Braintree¶
What it is. PayPal-owned full-stack gateway. Cards + PayPal + Venmo + Apple/Google Pay through one tokenizer. Used by larger merchants for the unified vault.
SDK: braintree (Node and Python).
Used as primary in: Automotive-Repair-Diagnosis-AI flow uses Braintree as a peer of Stripe — some shops have a Braintree account already.
Square¶
What it is. Originally in-person card readers; now online + in-store unified. Strong at retail / restaurants / appointment-booking businesses.
SDK: squareup (Python — Automotive), square (Node).
Used as primary in: Salon-Digital-Assistant, MangyDogCoffee, SCO-Digital-Assistant — verticals with brick-and-mortar customers who already use Square POS.
Authorize.net¶
What it is. Visa-owned legacy gateway, very common with older B2B merchants and traditional retail. ARB for recurring billing.
SDK: httpx REST in Python (Automotive), authorizenet in Node.
Why it's still on the list. Customers who've used Auth.net for 15 years aren't switching. Tutor_AI and the larger e-commerce apps include it for that reason.
The unified payment-gateway service pattern¶
What it is. Each billing-enabled app exports a single PaymentGatewayService (varies in name) that hides the concrete gateway behind methods like:
service.createCheckout({ amount, currency, customer })
service.createSubscription({ planId, customer })
service.refund({ chargeId, amount })
service.handleWebhook(req)
The active gateway is chosen by per-tenant config — tenant A gets Stripe, tenant B gets Authorize.net, the calling code doesn't change.
Reference implementations to copy from: Recruiting_AI, GoGreen-Sourcing, Maximus, FamilyChat, Boomer_AI all expose this pattern. See per-app src/services/payment.service.ts (or .php).
Per Integrations_Audit.md: the unified service is documented as the standard across "all 5 payment gateways now fully implemented" — see the ### Payment Gateways table in that file for the per-app matrix.
Webhook conventions¶
Every gateway integration:
1. Exposes a /webhooks/{gateway} POST endpoint.
2. Verifies the gateway-specific signature header before parsing.
3. Persists the raw body + parsed event in an audit table for replay.
4. Routes the event to a typed handler (onSubscriptionUpdated, onChargeRefunded, …).
5. Idempotency-keys the handler by event.id so retries are safe.
Cryptocurrency / Web3 (separate)¶
The Web3 apps (akt-giving-garden, chat-governance-hub, tiny-governance-hub, my-onchainkit-app) accept on-chain payments via wallet-connect flows. See Integrations-Web3.md. They do not use the five fiat gateways.
Comparison alternatives (not used)¶
| Gateway | Notes |
|---|---|
| Adyen | Enterprise-grade, multi-region. No portfolio app at that scale. |
| Klarna / Affirm | BNPL. Not in any flow. |
| Mollie / Razorpay / Paystack | Region-specific. No app targets those regions. |
| Lemon Squeezy / Paddle | Merchant-of-Record (handles VAT/sales tax). Useful for SaaS — not used here, Stripe handles tax via Stripe Tax. |
| Crypto-fiat (Coinbase Commerce, BitPay) | Not used. Web3 apps go on-chain directly. |
Decision guide¶
Stripe is fine? Stripe.
Customer requires a different gateway? Use the unified service to switch.
Need BNPL? Add Klarna/Affirm via Stripe (Stripe supports these).
Tenant on Square POS? Square (already fits their flow).
Pre-2020 enterprise customer? Authorize.net.
On-chain payments? See Integrations-Web3.md.