nowo-tech/wallet-qr-bundle

Symfony bundle to generate Google Wallet and Apple Wallet save links with QR codes for Android and iOS.

Maintainers

Package info

github.com/nowo-tech/WalletQRBundle

Homepage

Issues

Language:Shell

Type:symfony-bundle

pkg:composer/nowo-tech/wallet-qr-bundle

Transparency log

Fund package maintenance!

HecFranco

Statistics

Installs: 6

Dependents: 0

Suggesters: 0

Stars: 0

v3.0.1 2026-07-30 12:11 UTC

This package is auto-updated.

Last update: 2026-08-03 07:21:32 UTC


README

CI Packagist Version Packagist Downloads License PHP Symfony GitHub stars Coverage

⭐ Found this useful? Give it a star on GitHub! It helps us maintain and improve the project. πŸ“‹ Requires PHP 8.2+ and Symfony 7.x or 8.x (CI matrix includes Symfony 7.4, 8.0, 8.1)

FrankenPHP demos: runtime is selected with FRANKENPHP_MODE (worker default, or classic for per-request PHP / hot-reload). See docs/DEMO-FRANKENPHP.md. Symfony bundle to generate Google Wallet (Android) and Apple Wallet (iOS) save links with QR codes.

QR rendering requires the mandatory dependency QrCodeBundle (nowo-tech/qr-code-bundle), which Composer installs automatically. You can also use it standalone for QR codes outside wallet flows.

FrankenPHP Friendly Worker Mode

This bundle is FrankenPHP worker mode friendly.

Features

  • βœ… Google Wallet Add to Google Wallet save links (signed JWT)
  • βœ… Apple Wallet .pkpass download URL builder for iOS QR codes
  • βœ… PNG QR codes as data URIs via required QrCodeBundle (Twig helpers included)
  • βœ… Pair generation for Android + iOS in one call
  • βœ… Symfony configuration under nowo_wallet_qr
  • βœ… URL validation for custom QR links (QrUrlPolicy; optional host allowlist)
  • βœ… Demo apps for Symfony 7 and 8 (FrankenPHP)

Quick start

composer require nowo-tech/wallet-qr-bundle

nowo-tech/qr-code-bundle is pulled in as a required dependency. Register both bundles (Flex does this via the recipe):

Nowo\QrCodeBundle\NowoQrCodeBundle::class => ['all' => true],
Nowo\WalletQrBundle\NowoWalletQrBundle::class => ['all' => true],
# config/packages/nowo_wallet_qr.yaml
nowo_wallet_qr:
    google_wallet:
        enabled: true
        issuer_id: '%env(GOOGLE_WALLET_ISSUER_ID)%'
        service_account_json: '%kernel.project_dir%/config/google-wallet-service-account.json'
        origins: ['www.example.com']
    apple_wallet:
        enabled: true
        pass_download_url_pattern: 'https://www.example.com/wallet/{pass_id}.pkpass'

# Prefer configuring QR options on QrCodeBundle (legacy nowo_wallet_qr.qr_code still works):
# config/packages/nowo_qr_code.yaml
nowo_qr_code:
    default_profile: default
    profiles:
        default:
            size: 300
use Nowo\WalletQrBundle\Model\GoogleWalletPassReference;
use Nowo\WalletQrBundle\Service\WalletQrService;

$reference = GoogleWalletPassReference::withIssuer(
    $issuerId,
    objectSuffix: 'MEMBER_001',
    classSuffix: 'MEMBER_CLASS',
);

$pair = $walletQrService->createWalletQrPair($reference, applePassId: 'MEMBER_001');
// $pair['android']->qrCodeDataUri, $pair['ios']->qrCodeDataUri

Development

make up
make test
make test-coverage
make demo-smoke
make release-check

Demos: make -C demo/symfony8 up

Documentation

Additional documentation

Tests and coverage

Language Coverage
PHP ~100% lines

Run make test-coverage for the detailed report.

License

MIT β€” see LICENSE.