spatie/laravel-mobile-pass
Generate Apple Wallet and Google Wallet passes for boarding passes, event tickets, coupons, store cards, membership cards, and gift cards—with push updates to keep issued passes current on users' devices.
.pkpass bundling, web service registration) and Google Wallet's class/object API are each multi-week integration efforts with their own auth models. This package collapses both into one Laravel-native model (MobilePass) with unified addToWalletUrl(), expire(), and update-push behavior — turning a "maybe next quarter" integration into a scoped sprint.MobilePass records give you an auditable link between a pass and a customer/order.PushPassUpdateJob (queue opt-in via MOBILE_PASS_QUEUE_CONNECTION), automatic Google object PATCHes on model update, and Apple webservice registration mean a gate change, price change, points balance, or coupon expiry can be reflected on the user's device. That supports decisions about real-time personalization, dynamic offers, and "always current" credentials instead of stale static artifacts.GoogleMobilePassSaved / GoogleMobilePassRemoved events, plus isCurrentlySavedToGoogleWallet() and googleEvents. That gives you a measurable funnel (issued → added to wallet → updated → redeemed) to justify or kill the channel.Adopt when most of these hold:
webServiceURL (the package now hard-fails on non-HTTPS config — a good thing, but a deployment constraint).Look elsewhere or defer when:
For executives — the one-liner: This is the buy-side answer to "should we put our tickets/coupons/loyalty cards in Apple and Google Wallet?" It replaces what is normally a multi-week, two-platform integration (cryptographic pass signing, certificate management, Google's class/object API, device registration and push updates) with a Laravel package we can adopt in days, under an MIT license, from a maintainer with a long track record in the PHP ecosystem.
Why it matters commercially: Wallet is a retention and conversion surface, not a cosmetic one. Passes sit on the lock screen, resurface by time and location, and update in place — so a coupon can expire, a gate can change, and a points balance can move without the customer opening anything. We also get a measurable funnel from the save/remove callbacks and update events, which means we can prove or kill the channel on data rather than opinion.
For engineering — the honest scope: The package handles pass generation, signing and bundling, unified add-to-wallet URLs, expiry, queued update pushes, and Apple/Google lifecycle events. What it does not remove: Apple Developer Program enrollment and Pass Type ID certificate handling, Google Wallet issuer/service-account configuration, a publicly reachable HTTPS host for Apple's web service, certificate rotation on a calendar, and real-device QA. Those are operational line items we should staff explicitly, not assume away.
Known constraints to state up front, not discover later: Smart Tap NFC is deferred; only Apple and Google wallets are covered; callback signature verification uses Google's ECv2 signing-only path rather than automatic JWKS fetching; and the package has essentially no downstream dependents yet, so we should treat 1.x as "active, well-documented, but early" and pin our version. A short spike — one pass type, end to end on both platforms — is the right first commitment before we put it behind a launch.
How can I help you explore Laravel packages today?