Here's Cashier's mission statement:
> Laravel Cashier provides an expressive, fluent interface to Stripe's and Braintree's subscription billing services. It handles almost all of the boilerplate subscription billing code you are dreading writing. In addition to basic subscription management, Cashier can handle coupons, swapping subscription, subscription "quantities", cancellation grace periods, and even generate invoice PDFs.
In my opinion, Cashier fails to achieve its purported goals. First of all, the Stripe API is already a joy to work with and there's little value in trying to improve it by hiding API methods behind a bunch of smoke and mirrors. Second, Cashier doesn't significantly reduce boilerplate code. It actually traps you into its limited and opinionated way of doing things. It's a net negative for anything but the most basic of use cases. In my experience, I had to write additional billing code to get it to do basic things it should have been able to do in the first place. It got to the point where it just wasn't worth it anymore and starting from scratch was the better option, hence this package.
Here's just one example: I want to create a Stripe customer, without a card up front, trialing on a subscription. A super common SaaS use case. You would think that Cashier would make that easy, right? Nope. Instead, you have to manually set a custom 'trial_ends_at' field on your application user, deal with this hacky onGenericTrial() method to determine if your user is on a trial without a subscription (which I needed to create!), and in the end no customer or subscription is ever created in Stripe. Instead of using Stripe to do what it's made for, Cashier handles this itself, creating an unmanageable nightmare. What's even worse is that your application is effectively out of sync with Stripe.
The package I created avoids these headaches. It provides a wrapper around the Stripe API that automatically syncs Stripe data with your application whenever you make an API call or Stripe sends data to your webhook. This way you aren't locked into any specific way of doing things and you have total control over your data.
The only disclaimer I want to add is that my package doesn't plan on supporting Braintree, which is only used by about 5% of Cashier users by installs according to Packagist[1][2].
[1]: https://packagist.org/packages/laravel/cashier
[2]: https://packagist.org/packages/laravel/cashier-braintree