finds.dev← search

// the find

blendbyte/laravel-paypal

★ 1,149 · PHP · MIT · updated Apr 2026

PayPal REST API client for Laravel and standalone PHP.

A PHP/Laravel wrapper for PayPal's REST API v2, covering the full surface area: orders, subscriptions, invoices, disputes, payouts, webhooks, and vaulted payment methods. The v3.1 rewrite dropped support for the dead v1 Payments API and added PSR-18 client swapping, exception mode, and offline webhook verification. Useful for any Laravel shop that needs to integrate PayPal without hand-rolling HTTP calls.

The PSR-18 client abstraction is genuinely useful — swapping Guzzle for Symfony HttpClient in tests is one line. Local webhook verification with in-memory cert caching is the right call; most packages still make a round-trip to PayPal per webhook. The BillingPlanBuilder is a good ergonomic win: building billing plan payloads by hand is exactly the kind of tedious nesting that breaks silently. Test coverage is serious — separate mock request/response fixtures per API surface, not a pile of hand-wavy integration stubs.

The error handling story is split in an awkward way: you opt in to exceptions with `withExceptions()`, but forgetting to call it means API failures silently return an array with an `error` key — easy to miss in a conditional chain. The retry policy only works with the default Guzzle client; swap in a custom PSR-18 client and retries are your problem, which the docs bury in a note. IPN verification is still present but the feature is deprecated by PayPal and mixing it with webhook code in the same package creates confusion about which path to actually use. The `Carbon` dependency surfaces in the reporting helpers (`listTransactions`) without being declared in composer.json as a hard requirement — it's pulled in transitively via Laravel, so standalone users will hit a runtime error.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →