Stripe Pro v5.1

AJT Stripe Integration Pro

WooCommerce was overkill for MSP billing. We needed invoices, card payments, and a customer portal, not a shop with a cart and shipping zones. I built a standalone Stripe billing platform with invoicing, autopay, subscriptions, accounting sync, magic-link auth, and branded PDF invoices. It also works alongside WooCommerce if you need it, but that's optional, not required.

0 Lines of Code
0 Database Tables
0 Accounting Syncs
0 Encryption
Scroll

The Financial Backbone

Stripe Pro is the financial backbone of the entire AJT ecosystem. Every other plugin either extends it (MSP Hub adds tickets, quotes, and contracts to the portal) or uses its infrastructure (the licensing system, the encryption layer, the portal framework). It handles invoicing, card payments, subscriptions, autopay, customer management, accounting sync to QuickBooks and Xero, branded PDF invoices, magic-link authentication, and a visual storefront. All amounts stored in pence/cents for precision. All PII encrypted at rest with AES-256.

Standalone Invoicing

A complete invoicing system that doesn't need WooCommerce. Create invoices with line items, tax rates, discounts, and notes. Custom invoice numbering with configurable prefix, suffix, start number, and zero-padding. Partial payments supported: customers can pay a portion and the balance updates automatically. Void invoices with credit notes. Overdue reminder emails sent on a configurable schedule via cron. Invoice notes create an internal audit trail. Every invoice stores a Stripe Invoice ID for reconciliation, and amounts are always in the smallest currency unit (pence, cents) to eliminate floating-point precision errors.

Autopay & Card Payments

Customers save payment cards via Stripe Elements with full 3D Secure / SCA support handled transparently. When autopay is enabled, invoices are charged automatically on creation or via a daily cron job. Failed charges trigger retry logic with configurable attempt counts and escalating delay intervals. Success and failure notification emails are sent to both customer and admin. Customers manage their saved cards through the portal: add new cards, set a default, remove old ones. The standalone gateway handles PaymentIntent creation server-side (never trusting client-submitted amounts), confirms with Stripe Elements on the frontend, and processes the webhook confirmation for belt-and-braces reliability.

Subscriptions & Storefront

The visual storefront renders a product catalogue with basket, checkout, and Stripe Elements payment. Products support one-time purchases, recurring subscriptions (monthly, annual, custom intervals), and bundles that group multiple products into a single package. The product editor is a split-panel visual interface for managing products, pricing tiers, images, and descriptions. Subscriptions can be paused, cancelled, and resumed through both the admin and the customer portal. The storefront on ajt.support uses this exact system for selling AJT plugin licences, with products synced from License Master.

Customer Portal

A tabbed customer portal where customers manage their entire billing relationship. Invoices tab shows all invoices with status badges (paid, outstanding, overdue, void) and one-click payment. Subscriptions tab shows active plans with management actions. Payment methods tab for card management. Profile tab for contact details and password changes. The portal is built as a framework with hooks at every surface, so MSP Hub can inject Tickets, Quotes, Services, Contracts, and Block Hours tabs without modifying Stripe Pro core. The subscription portal on ajt.support is a specialised variant used exclusively for licence management, with download links and licence key display.

Accounting Sync

OAuth2 integration with both QuickBooks Online and Xero. Invoices created in Stripe Pro are pushed to the connected accounting platform automatically. Payment records sync when invoices are paid. Customer records are matched between systems by email. Multi-currency support handles conversions correctly. The sync is one-directional: Stripe Pro is the source of truth, accounting is the destination. This eliminates the double-entry insanity of manually creating the same invoice in two systems. Diagnostics show sync status, last successful push, and any API errors with retry capability.

How It's Built

The engineering under the hood that makes it all work.
🔗

Magic Link Auth

Passwordless login via encrypted email tokens. Single-use, time-limited, cryptographically signed. Perfect for invoice payment links where you don't want to force a customer to remember a password. The magic link authenticates, sets a session, and redirects to the invoice or portal page. Application forms use the same mechanism for new customer onboarding.

📄

PDF Invoices

Branded HTML rendered to PDF via WeasyPrint. Dual-render architecture: beautiful in the browser, pixel-perfect as a downloadable PDF. Custom logo, company details, colour scheme, bank details for manual payments, and line-item tables with tax breakdowns. PDFs can be emailed as attachments or downloaded from the portal and admin. The printable invoice page serves both the browser view and the PDF generation source.

🔐

AES-256 Encryption

All personally identifiable information is encrypted at rest using AES-256-CBC. Customer names, email addresses, phone numbers, addresses, payment method identifiers, cancellation reasons, and notes are all encrypted in the database. Searchable fields use SHA-256 blind indexes via ajt_stripe_email_hash() so you can look up customers by email without decrypting every row. The client and licence master use separate encryption key chains.

📊

Admin Dashboard

A bento-grid dashboard with revenue charts, invoice feeds, payment feeds, attention alerts (failed charges, overdue invoices), circle indicators for key metrics, and MSP Hub integration strips when active. Customer intelligence scoring (A/B/C/D grades) based on payment behaviour helps identify reliable customers and flag problematic ones. Revenue breakdown with drilldown modals for detailed analysis.

👤

Customer Management

A dedicated customers tab with search, filtering, and a detail view showing the complete financial relationship: all invoices, all orders, all subscriptions, all contracts, saved payment methods, and MSP Hub links (tickets, services, contracts) when active. Bulk actions, customer deletion with data cleanup, and NET-14 per-customer payment terms configuration.

📝

Quotes & Invoicing

A quote builder that creates professional quotes with line items, then converts accepted quotes into invoices with one click. Quotes are stored as a custom post type with their own lifecycle: draft, sent, accepted, declined, expired, converted. Quote-to-invoice conversion preserves all line items, customer details, and terms. The invoicing tab shows quotes and invoices side by side with filtering and search.

🏪

WooCommerce Mode

Optional WooCommerce integration adds a NET-14 pay-later gateway (buy now, invoice later with configurable payment terms) and a card gateway with full SCA/3D Secure support. Checkout Blocks compatible. For sites that need both a WooCommerce shop and standalone invoicing, both coexist cleanly. Order meta boxes show Stripe payment details, invoice links, and sync status.

📧

Email Notifications

Branded transactional emails for every lifecycle event: invoice created, payment received, payment failed, overdue reminders, autopay success/failure, subscription created/cancelled, quote sent, application received. Email templates use merge tags ({customer_name}, {invoice_number}, {amount_due}, {payment_link}) and respect Robot workflow overrides when GLASS is active.

📜

License Module

A 14-file portable licensing system that can be dropped into any AJT plugin without modification. RSA JWT token verification (RS256, not shared-secret HMAC), Sentinel MU-plugin for boot-time integrity checks, heartbeat cron for periodic licence validation, colocation proof for same-server deployments, and obfuscated protocol to prevent reverse engineering. The licence module on ajt.support communicates with Stripe Pro via local WordPress hooks, not HTTP.

Security & Infrastructure

Beyond encryption, Stripe Pro follows the same security model as every AJT plugin without exception.
🔒

Server-Side Price Authority

Never trust client-submitted amounts. Every PaymentIntent is created server-side by looking up prices from the product catalogue. The frontend submits a product ID, not a price. This prevents price manipulation attacks entirely.

🎣

Webhook Verification

Stripe webhooks are verified using the webhook signing secret before processing. Events are idempotent: processing the same event twice has no side effects. Belt-and-braces reliability for payment confirmation.

Error Recovery

Failed Stripe API calls trigger automatic retry with exponential backoff. Failed invoice creation queues for manual retry. Admin notifications on persistent failures. A dedicated dashboard widget shows failed and pending invoices that need attention.

🛡️

REST API with Auth

5 API controllers (customers, finance, payments, subscriptions, misc) with JWT authentication, rate limiting, input validation, and audit logging. The API powers the GLASS portal sections and any external integrations.

📊

Diagnostics

A comprehensive diagnostics panel showing Stripe connection status (test and live modes), webhook configuration, API version, accounting sync health, database table status, and cron job schedules. One-click connection test for both Stripe and accounting platforms.

🧹

Clean Uninstall

Delete the plugin and it removes everything: all options, all database tables, all user meta, all transients, all cron hooks, all custom post types. Zero residue. Encrypted data is destroyed with the encryption keys.

Lines of Code
PHP Files
Database Tables
API Controllers
Accounting Platforms
License Module Files
Bit Encryption
Client-Trusted Amounts

Part of the Ecosystem

Stripe Pro is the financial backbone. MSP Hub extends its portal with tickets, quotes, contracts, and services. GLASS provides the admin shell, page builder, and Robot AI assistant. License Master handles software licensing via the same Stripe Pro billing infrastructure. Every plugin shares the same encryption layer, security model, and design language. Back to the full ecosystem →

Want to Work Together?

I'm always interested in challenging WordPress architecture problems. If you need a plugin built properly, let's talk.
Get in Touch