{"id":13861386,"url":"https://github.com/eymengunay/php-passbook","last_synced_at":"2026-04-02T18:45:57.229Z","repository":{"id":4762978,"uuid":"5913521","full_name":"eymengunay/php-passbook","owner":"eymengunay","description":"iOS passbook library for PHP","archived":false,"fork":false,"pushed_at":"2025-11-09T19:18:10.000Z","size":1942,"stargazers_count":265,"open_issues_count":8,"forks_count":53,"subscribers_count":23,"default_branch":"master","last_synced_at":"2026-03-19T17:02:54.565Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://eymengunay.github.io/php-passbook/","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eymengunay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["eymengunay","razvanphp"]}},"created_at":"2012-09-22T14:08:18.000Z","updated_at":"2025-07-24T18:33:45.000Z","dependencies_parsed_at":"2025-12-25T13:02:52.041Z","dependency_job_id":null,"html_url":"https://github.com/eymengunay/php-passbook","commit_stats":{"total_commits":170,"total_committers":23,"mean_commits":7.391304347826087,"dds":0.3529411764705882,"last_synced_commit":"3de781a349daa1f916aaee9c364a8096bc3ab91b"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/eymengunay/php-passbook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eymengunay%2Fphp-passbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eymengunay%2Fphp-passbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eymengunay%2Fphp-passbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eymengunay%2Fphp-passbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eymengunay","download_url":"https://codeload.github.com/eymengunay/php-passbook/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eymengunay%2Fphp-passbook/sbom","scorecard":{"id":388950,"data":{"date":"2025-08-11","repo":{"name":"github.com/eymengunay/php-passbook","commit":"25fdf869e68340602f1b451a096e0c017fbd4ddd"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/lint.yaml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":6,"reason":"Found 9/14 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/lint.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/lint.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yaml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/lint.yaml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint.yaml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/lint.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint.yaml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/lint.yaml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/eymengunay/php-passbook/test.yml/master?enable=pin","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T17:20:05.211Z","repository_id":4762978,"created_at":"2025-08-18T17:20:05.211Z","updated_at":"2025-08-18T17:20:05.211Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31313316,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-05T06:01:20.532Z","updated_at":"2026-04-02T18:45:57.202Z","avatar_url":"https://github.com/eymengunay.png","language":"PHP","funding_links":["https://github.com/sponsors/eymengunay","https://github.com/sponsors/razvanphp"],"categories":["杂项","杂项 Miscellaneous","PHP","Miscellaneous","Configuration"],"sub_categories":["Miscellaneous"],"readme":"# PHP PASSBOOK LIBRARY\n\n[![Code Coverage](https://scrutinizer-ci.com/g/eymengunay/php-passbook/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/eymengunay/php-passbook/?branch=master)\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/eymengunay/php-passbook/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/eymengunay/php-passbook/?branch=master)\n[![PHPUnit](https://github.com/eymengunay/php-passbook/actions/workflows/test.yml/badge.svg)](https://github.com/eymengunay/php-passbook/actions/workflows/test.yml)\n[![Total Downloads](https://img.shields.io/packagist/dt/eo/passbook.svg)](https://packagist.org/packages/eo/passbook)\n[![Latest Stable Version](https://img.shields.io/packagist/v/eo/passbook.svg)](https://packagist.org/packages/eo/passbook)\n\n## What is Passbook?\n\n\u003e Passbook is an application in iOS that allows users to store coupons, boarding passes, event tickets,\n\u003e store cards, 'generic' cards and other forms of mobile payment.\n\n## What does this library do?\n\nPHP-Passbook is a library for creating and packaging passes inside your application. Distribution of generated pass files can be done by attaching the file in an e-mail or serving it from your web server.\n\n## Breaking changes\n\n### Version 3.0.0\n\n* Requires PHP \u003e= 7.4\n\n### Version 2.0.0\n\n* `Image` class `setRetina`/`isRetina` methods replaced with `setDensity`/`getDensity`.\n\n## Installing\n\n### Using Composer\n\nTo add PHP-Passbook as a local, per-project dependency to your project, simply add a dependency on eo/passbook to your project's composer.json file. Here is a minimal example of a composer.json file that just defines a development-time dependency on the latest version of the library:\n\n```json\n{\n    \"require\": {\n        \"eo/passbook\": \"dev-master\"\n    }\n}\n```\n\n## API Doc\nSearch by class, method name, or package: http://eymengunay.github.io/php-passbook/api\n\n## Usage Example\n\nThis example will create a pass of type Ticket and will save the pkpass file in the output path specified. To use this example, you will need to do the following and set the constants accordingly:\n\n* [Create a P12 Certificate file](#p12-certificate)\n* [Download Apple’s World Wide Developer Relations (WWDR) certificate](#wwdr-certificate)\n* [Obtain a Pass Type Identifier and Team Identifier from Apple](#obtaining-the-pass-type-identifier-and-team-id)\n* Get an icon (29x29 png file) for the pass\n* Specify a name for your organization\n* Specify the output path where the pass will be saved\n\n```php\n\u003c?php\n\nuse Passbook\\Pass\\Field;\nuse Passbook\\Pass\\Image;\nuse Passbook\\PassFactory;\nuse Passbook\\Pass\\Barcode;\nuse Passbook\\Pass\\Structure;\nuse Passbook\\Type\\EventTicket;\n\n// Set these constants with your values\ndefine('P12_FILE', '/path/to/p12/certificate.p12');\ndefine('P12_PASSWORD', 'password_for_p12_file');\ndefine('WWDR_FILE', '/path/to/wwdr.pem');\ndefine('PASS_TYPE_IDENTIFIER', 'pass.com.example.yourpass');\ndefine('TEAM_IDENTIFIER', 'IDFROMAPPLE');\ndefine('ORGANIZATION_NAME', 'Your Organization Name');\ndefine('OUTPUT_PATH', '/path/to/output/path');\ndefine('ICON_FILE', '/path/to/icon.png');\n\n// Create an event ticket\n$pass = new EventTicket(\"1234567890\", \"The Beat Goes On\");\n$pass-\u003esetBackgroundColor('rgb(60, 65, 76)');\n$pass-\u003esetLogoText('Apple Inc.');\n\n// Create pass structure\n$structure = new Structure();\n\n// Add primary field\n$primary = new Field('event', 'The Beat Goes On');\n$primary-\u003esetLabel('Event');\n$structure-\u003eaddPrimaryField($primary);\n\n// Add secondary field\n$secondary = new Field('location', 'Moscone West');\n$secondary-\u003esetLabel('Location');\n$structure-\u003eaddSecondaryField($secondary);\n\n// Add auxiliary field\n$auxiliary = new Field('datetime', '2013-04-15 @10:25');\n$auxiliary-\u003esetLabel('Date \u0026 Time');\n$structure-\u003eaddAuxiliaryField($auxiliary);\n\n// Add icon image\n$icon = new Image(ICON_FILE, 'icon');\n$pass-\u003eaddImage($icon);\n\n// Set pass structure\n$pass-\u003esetStructure($structure);\n\n// Add barcode\n$barcode = new Barcode(Barcode::TYPE_QR, 'barcodeMessage');\n$pass-\u003esetBarcode($barcode);\n\n// Create pass factory instance\n$factory = new PassFactory(PASS_TYPE_IDENTIFIER, TEAM_IDENTIFIER, ORGANIZATION_NAME, P12_FILE, P12_PASSWORD, WWDR_FILE);\n$factory-\u003esetOutputPath(OUTPUT_PATH);\n$factory-\u003epackage($pass);\n```\n\n## Requirements\n* PHP 5.4+\n* [zip](http://php.net/manual/en/book.zip.php)\n* [OpenSSL](http://www.php.net/manual/en/book.openssl.php)\n\nVersion 1.2.0 is the last release to support PHP 5.3.\n\n## Obtaining the Pass Type Identifier and Team ID\n\nYou can find more information from Apple on [Setting the Pass Type Identifier and Team ID](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/PassKit_PG/YourFirst.html#//apple_ref/doc/uid/TP40012195-CH2-SW27).\n\n## Requesting Certificates\n\n### P12 Certificate\nOnce you have downloaded the Apple iPhone certificate from Apple, export it to the P12 certificate format.\n\n**To do this on Mac OS:**\n\n1. Open the Keychain Access application (in the Applications/Utilities folder).\n2. If you have not already added the certificate to Keychain, select File \u003e Import. Then navigate to the certificate file (the .cer file) you obtained from Apple.\n3. Select the Keys category in Keychain Access.\n4. Select the private key associated with your iPhone Development Certificate. The private key is identified by the iPhone Developer: \u003cFirst Name\u003e \u003cLast Name\u003e public certificate that is paired with it.\n5. Select File \u003e Export Items.\n6. Save your key in the Personal Information Exchange (.p12) file format.\n7. You will be prompted to create a password that is used when you attempt to import this key on another computer.\n\n**on Windows:**\n\n1. Convert the developer certificate file you receive from Apple into a PEM certificate file. Run the following command-line statement from the OpenSSL bin directory:\n\n```\nopenssl x509 -in developer_identity.cer -inform DER -out developer_identity.pem -outform PEM\n```\n\n2. If you are using the private key from the keychain on a Mac computer, convert it into a PEM key:\n\n```\nopenssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem\n```\n\n3. You can now generate a valid P12 file, based on the key and the PEM version of the iPhone developer certificate:\n\n```\nopenssl pkcs12 -export -inkey mykey.key -in developer_identity.pem -out iphone_dev.p12\n```\n\nIf you are using a key from the Mac OS keychain, use the PEM version you generated in the previous step. Otherwise, use the OpenSSL key you generated earlier (on Windows).\n\n### WWDR Certificate\nApple’s World Wide Developer Relations (WWDR) certificate is available from Apple at \u003chttp://developer.apple.com/certificationauthority/AppleWWDRCA.cer\u003e. You will have to add this to your Keychain Access and export it in .pem format to use it with the library. The WWDR certificate links your development certificate to Apple, completing the trust chain for your application.\n\n## Running Tests\nBefore submitting a patch for inclusion, you need to run the test suite to check that you have not broken anything.\n\nTo run the test suite, install PHPUnit 3.7 (or later) first.\n\n### Dependencies\nTo run the entire test suite, including tests that depend on external dependencies, php-passbook needs to be able to autoload them. By default, they are autoloaded from vendor/ under the main root directory (see vendor/autoload.php).\n\nTo install them all, use [Composer](http://getcomposer.org):\n\nStep 1: Get [Composer](http://getcomposer.org)\n```\ncurl -s http://getcomposer.org/installer | php\n```\nMake sure you download composer.phar in the same folder where the composer.json file is located.\n\nStep 2: Install vendors\n```\nphp composer.phar install\n```\n\n\u003e Note that the script takes some time to finish.\n\n### Running\nFirst, install the vendors (see above).\n\nThen, run the test suite from the package root directory with the following command:\n```\nphpunit\n```\n\nThe output should display OK. If not, you need to figure out what's going on and if the tests are broken because of your modifications.\n\n## Reporting an issue or a feature request\nIssues and feature requests related to this library are tracked in the Github issue tracker: https://github.com/eymengunay/php-passbook/issues\n\n## Contributing\n\nContributions are welcome and will be fully credited. We accept contributions via Pull Requests here on GitHub.\n\nPlease note that this project adhered to [PSR-12 Extended Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-12-extended-coding-style-guide.md), so your changes need to:\n- Have PHPUnit-test coverage and tests must pass with all supported PHP versions\n- Pass PHPStan \u0026 PHP_CodeSniffer static analysis checks\n- Be documented in `README.md` for any change in behaviour\n\n## Donating\n\nIf you want to support the project, please consider to donate a small amount using GitHub Sponsors button. Thank you for your support!\n\n## See also\n[PassbookBundle](https://github.com/eymengunay/PassbookBundle): PHP-Passbook library integration for Symfony2\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feymengunay%2Fphp-passbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feymengunay%2Fphp-passbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feymengunay%2Fphp-passbook/lists"}