eo/passbook-bundle
Symfony2 bundle that integrates the php-passbook library to generate signed .pkpass files for Apple Wallet. Configure your pass type and team identifiers, certificates, and output path, then create passes from your app.
.pkpass (pass.json + assets + manifest hashes + detached PKCS#7 signature) from a Pass Type ID .p12 and Apple's WWDR certificate. A PM can use it to run the cheapest possible experiment — do our users want a wallet-resident artifact (loyalty card, coupon, event/membership ticket) — and get evidence in days instead of speculating in a roadmap doc. The code is a means; the decision it informs is "is wallet presence on the roadmap or not.".p12 + password, WWDR cert, icon, output path)..pkpass files. The product-defining question is updates: Apple Wallet passes go stale unless you operate a web-service endpoint Wallet polls and send APNs pushes on change. Use this package to scope the cheap half (generate a pass, prove demand), and treat the update service — device registration store, push sender, certificate rotation — as a separate, larger, platform commitment. Don't let "we can generate a pass" leak into the roadmap as "we have Wallet support."WalletGateway) or a throwaway spike. This package's implicit answer is "one-off, Symfony-2-specific, unmaintained." Choosing it as-is sets how much you're willing to invest around it — and how painful the second wallet will be..p12 is a signing secret; Pass Type IDs expire and must be rotated (Apple has already rotated/expired older WWDR intermediates — G4 to 2030, earlier ones expired 2023). Adopting any of this forces a decision on secret storage, rotation ownership, and who gets paged when a renewal is missed — a customer-visible failure mode (passes silently stop updating) that belongs on the PM's risk register, not buried in a ticket.Consider it when:
eymengunay/php-passbook library, lift the signing/bundling approach, and implement it behind your own WalletPassGenerator interface with a maintained library or ~a few hundred lines of your own code.Look elsewhere (i.e., do not adopt this package as a dependency) when:
Eo\PassbookBundle\EoPassbookBundle) registered through AppKernel::registerBundles(), consuming Symfony's DI container and FrameworkBundle conventions. There is no service provider, no config publishing, no facade. The integration effort to bend it into Laravel exceeds wiring a maintained standalone pass library directly. It is commonly miscategorized as framework-agnostic PHP; it is not.symfony/* and --ignore-platform-reqs hacks rather than a clean install.To executives (one paragraph): Apple Wallet passes are a cheap, high-visibility retention surface — a loyalty card or ticket that lives on the customer's lock screen instead of buried in an app. The expensive part isn't the idea, it's the cryptographic signing and certificate plumbing, which is commodity work. This package is a free, pre-built adapter that proves the concept on a legacy Symfony 2 application in a sprint or two at effectively zero license cost and no vendor negotiation. Two caveats shape the recommendation. First, it is a Symfony bundle, not a Laravel package — on our stack it is a reference implementation and specification, not something we install and run. Second, it has been unmaintained since January 2018 with essentially no user base, so we treat it as a prototype accelerator, never a production foundation. Recommendation: fund a time-boxed spike with a defined kill criterion (e.g., "X% of pilot users add the pass, Y% redeem within 30 days"), build it behind an internal wallet interface so the engine can be swapped without touching product code, and do not commit to live pass updates, an SLA, or certificate-rotation operations until that signal exists. Roughly 60–70% of the spike effort is pass assets, Apple account setup, and certificate provisioning — not integration code — so size the estimate accordingly.
To engineering (one paragraph): Do not composer require this into a Laravel app. It is a Symfony 2.1+ bundle wrapping eymengunay/php-passbook; there is no service provider, config publishing, or facade, and its dependency constraints will collide with a modern PHP 8 / current-symfony/* stack. What it is good for is telling us the exact shape of the work: a .pkpass is pass.json + assets + manifest hashes + a detached PKCS#7 signature, signed with a Pass Type ID .p12 and Apple's WWDR cert, served as application/vnd.apple.pkpass. Take that spec, then either adopt a maintained standalone PHP pass library behind our own WalletPassGenerator interface, or port the signing/bundling routine (small, well-bounded surface) into a Laravel-native service with config published and secrets pulled from our secrets manager. Assume we own the certificate lifecycle: verify the WWDR chain against Apple's current intermediate (older generations expired in 2023), plan .p12 rotation and storage, and add alerting because a bad cert fails silently — passes just stop updating. Scope the spike to generation only: no Wallet web service, no device registration table, no APNs push, and confirm nothing in the underlying library relies on Apple's retired binary provider protocol before we estimate anything. Put it all behind the interface so the swap is trivial if the concept validates.
How can I help you explore Laravel packages today?