Peer-to-peer ticket resale on WooCommerce. Fans list tickets they cannot use, other fans buy them, and the seller is paid the day after the event.
Install
Download ticket-marketplace-0.1.0.zip below, then Plugins → Add New → Upload Plugin in WordPress. WooCommerce must be active first.
The archive contains only what a site needs to run: the plugin bootstrap, src/, readme.txt and the licence. Test suites and the local seller-verification helper are deliberately left out — that helper bypasses payout verification and has no business on a live site.
What's in it
- Curated event catalogue with per-event face-value tiers.
- Listings mirrored onto hidden WooCommerce products, with oversell protection enforced by a conditional database update rather than Woo stock alone.
- Per-market compliance engine: price caps, seat-disclosure requirements, per-event listing limits, blocked markets. Rules resolve against the country the event is in, and enforce at listing, edit, approval and again at checkout.
- Escrow holding funds until the day after the event, with bounded retries and a stable idempotency key.
- Disputes that freeze a payout before it is sent.
- Moderation queue with barcode and file-content duplicate detection.
- Ticket files stored outside the web root, served only through signed expiring URLs with per-request entitlement checks.
- Admin-configurable commission in basis points, with per-seller and per-event overrides, frozen onto each sale as it happens.
- DAC7 seller counters, tax ID collection and CSV export.
- WP-CLI:
wp tm escrow-release,wp tm payouts,wp tm moderate.
Before taking real money
Declare the business model to Stripe. Ticket resale is restricted-but-allowed, so expect a rolling reserve and disclose it at onboarding rather than being shut off after launch.
Review the market rule table against the countries you intend to operate in. It ships with a small researched set; everything else defaults to a face-value cap. Belgium is blocked outright.
No live Stripe transaction has ever been made with this code. Every transfer in the test suite runs against a fake gateway. Run one real low-value payout end to end before trusting it: test mode does not surface reserve behaviour, cross-border payout restrictions, or Stripe's risk review.
The limit worth understanding
This does file handoff, not barcode reissue. A seller can keep a copy of the PDF they sold. Mandatory moderation, duplicate detection, Stripe identity verification and post-event payouts are compensating controls, not an equivalent to invalidating the original barcode — which needs a partner integration with whoever sold the ticket first. The payout layer sits behind an interface so that integration can be added without rewriting the escrow logic.
Verification
384 automated checks across three suites against WordPress 7.0 and WooCommerce 10.9, plus the upload and delivery paths verified by hand over HTTP. This ZIP was installed and activated from a clean WordPress install before release.