--- name: shopify-app-billing description: Subscriptions, charges, and billable routes for a Laravel Shopify app using kyon147/laravel-shopify. --- ## When to use You are in a **host Laravel application** with `kyon147/laravel-shopify` and you need **billing**: recurring or one-time charges, plan selection URLs, or gating **your** controllers until the shop has an active plan. ## Configuration (your published `shopify-app.php`) Enable and tune billing via env + config keys such as: - `SHOPIFY_BILLING_ENABLED` → `billing_enabled` - `SHOPIFY_BILLING_FREEMIUM_ENABLED` → `billing_freemium_enabled` - `SHOPIFY_BILLING_REDIRECT` → `billing_redirect` (where users land for the billing flow) Confirm `route_names` for `billing`, `billing.process`, and `billing.usage_charge` if you override route names to avoid collisions with **your** app. ## Protecting routes Apply the `billable` middleware (alias for `Osiset\ShopifyApp\Http\Middleware\Billable`) to **your** route groups or controllers that should only run for shops with a valid charge/plan per package rules. Combine with `verify.shopify` when the route also requires an authenticated shop session. ## Extending billing in the app (don’t edit vendor) - Package `BillingController` and `Traits/BillingController` show how billing endpoints are structured — **extend or wrap** from **your** `App\Http\Controllers` if you need custom UX, keeping the package’s config and charge flow intact. - API calls for plans/charges typically go through the shop model’s integration with `apiHelper()` and related storage — reference `src/Services/ApiHelper.php` and models under `src/Storage/Models/` in vendor for behavior, implement app-specific logic in **your** namespaces. ## Do / Don’t - **Do** test the full redirect loop (plan URL → Shopify approval → callback) in a dev store. - **Don’t** bypass `billable` or charge checks in production routes for convenience.