Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Donation Checkout Laravel Package

ghijk/donation-checkout

ghijk/donation-checkout is a Laravel package for adding donation checkout flows to your application, helping you collect one-time or recurring contributions with configurable amounts and a streamlined checkout experience.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. donation-checkout is a small, single-purpose Laravel package that bolts a public donation endpoint onto a Statamic-backed site and delegates payment processing to Stripe. Architecturally it is a peripheral component: it does not own domain data beyond Stripe customer references and optional Statamic user records, and it sits behind the host application's routing, middleware, and cache layers. That is a good fit for a TPM's preferred risk posture — a narrow blast radius, replaceable in a quarter if the maintainer relationship sours. It is a poor fit if the organisation expects the package to own reconciliation, receipts, refunds, or financial reporting; v2.1.7 does not move it in that direction.

Integration feasibility. Integration is a composer require plus configuration, not a service build. The work is concentrated in configuration and policy decisions rather than code: Stripe keys and webhook secrets, rate-limit thresholds, the create_users flag, and the email normalisation behaviour that now silently rewrites donor input. The new create_users option (default true) is the most consequential integration detail in this release — it means a default install will create Statamic user records for every donor, which is a data-protection and list-hygiene decision that should be made explicitly rather than inherited from a default.

Technical risk. Three items dominate:

  1. Framework floor raised to Laravel 12.69.3. The security fix is delivered by pinning forward, not by patching in place. Any host application on Laravel 10 or 11 cannot take this release, and therefore cannot take the four advisory fixes, without a framework upgrade. That converts a routine patch into a platform programme for lagging applications. This is the single most important fact in the release.
  2. Generic Stripe error responses. Correct for security (no leakage of key state, account configuration, or upstream error text to anonymous callers) and costly for operations: support tickets will say "donation failed" with no correlatable detail unless the host application logs Stripe error codes server-side. We must own that logging, because the package deliberately will not surface it.
  3. Rate limiting is per IP with defaults of 5/minute and 50/day. Shared NAT, corporate egress, and mobile carrier aggregation will cause legitimate donors to be throttled. The limits are configurable, which is the mitigation, but the default is tuned for abuse resistance rather than conversion.

Secondary risks: single-maintainer project, two PRs of change surface, and a test suite of 45 tests / 130 assertions — thin but proportionate for the package's size, and notable that it includes a clean composer audit.

Key questions.

  • Which of our applications are below Laravel 12.69.3, and is a framework upgrade funded?
  • Do we want create_users on or off by default for our deployment, and who signs off on the privacy impact?
  • Where will Stripe failure detail be logged, and what is the retention policy for those logs?
  • Are the per-IP limits viable for our donor demographics (kiosk, campus, event Wi-Fi)?
  • What is the maintainer's succession plan, and do we have a fork-and-maintain contingency?
  • Is there a webhook path for payment confirmation, and is it idempotent under Stripe retries? The release notes do not say.

Integration Approach

Stack fit. Requires PHP and Laravel 12.69.3+, CommonMark 2.10.3+, Flysystem 3.36.0+, plus Statamic for the user-creation path. The dependency set is mainstream and well-vetted; nothing exotic is introduced. Applications already on Laravel 12 with Statamic are a direct fit and should see a low-effort adoption. Applications on Laravel 10/11 are a framework-upgrade project with this package as the trigger, not the cause.

Migration path. The composer constraints are the good news: affected dependency versions cannot be installed, so the resolver fails loudly rather than silently shipping a vulnerable graph. Migration is therefore self-verifying at install time. The behavioural changes to plan for are (a) donor input is now bounded and emails normalised, so stored records may differ from historical records and any downstream matching on raw email will need review; (b) Stripe customers are reused rather than recreated, which will reduce customer-object sprawl but changes what a "new donor" looks like in Stripe; (c) Stripe API failures return generic responses, so any client-side or test-side assertion on error text must be updated.

Compatibility. Two compatibility surfaces to check explicitly: Statamic version alignment (the create_users path touches Statamic's user repository) and cache driver support for the rate limiter. Rate limiting on a per-process or file cache will not behave correctly across multiple application servers; a shared Redis or database cache is required for the stated limits to be accurate in a load-balanced deployment.

Sequencing. Recommended order:

  1. Inventory Laravel versions across all properties; classify each as "ready" or "framework upgrade required."
  2. For ready properties: stage install, run composer audit, run the package test suite, and verify the rate limiter against the production cache driver.
  3. Decide and document create_users and rate-limit values per property before promotion — do not ship defaults to production by inaction.
  4. Add Stripe error-code logging with correlation IDs in the host application, then verify a forced failure end-to-end in staging.
  5. Promote to production outside a campaign window; watch donation success rate and 429 rate for 72 hours.
  6. Treat framework upgrades for lagging properties as a separate, resourced workstream with its own timeline.

Operational Impact

Maintenance. Low steady-state cost, but the maintenance surface is the dependency graph, not the package code. Because fixes arrive as version floors, every security release becomes a compatibility gate — we should expect to be pushed forward on Laravel, CommonMark, and Flysystem on the maintainer's cadence, not ours. Budget a recurring dependency-review slot rather than a one-off install.

Support. The generic Stripe responses shift diagnostic burden onto our own logging and onto the maintainer's issue tracker. First-line support will not be able to distinguish a declined card from a misconfigured key from an outage without server-side logs. Conversely, the create_users flag and rate-limit configuration are the two settings most likely to generate tickets, and both should be documented in our runbook rather than left to the README.

Scaling. The package is stateless apart from Stripe customer objects and Statamic users, so it scales with the host application. The real scaling constraint is the per-IP rate limiter: behind a load balancer it requires a shared cache, and behind NAT it will throttle aggregates of legitimate users. Expect to raise the daily limit materially for any event-driven or institutional traffic and to monitor 429 counts as a conversion metric, not just an abuse metric.

Failure modes. Distinct failure classes and their observability:

  • Stripe API failure — generic response to the donor, opaque to support without our logs. Highest operational risk.
  • Rate-limit false positive — silent donor-facing rejection; looks like an outage to the user.
  • Dependency drift — a future advisory with no forward version leaves us pinned to a vulnerable or uninstallable graph; mitigated by maintaining a fork-ready posture.
  • User-creation side effects — with create_users true by default, a spike in traffic creates Statamic users, which may trigger downstream email or CRM automations nobody intended.
  • Email normalisation mismatch — duplicate-suppression logic downstream may not recognise normalised addresses.

Ramp-up. Engineering effort is measured in hours for a Laravel 12 + Statamic property: install, configure, staging verification, log instrumentation, production promotion. Product and legal effort is the longer pole — deciding create_users, reviewing the privacy impact of donor user records, and setting rate limits against expected traffic. For properties below Laravel 12.69.3, ramp-up is a multi-week framework upgrade owned by platform engineering, and this package should be listed as the business driver for prioritising it.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hsluv/hsluv
seampact/codegen
seampact/hooks
seampact/ir
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support