Tickera Wallet Passes
WordPress plugin: Apple Wallet and Google Wallet pass generation for Tickera event tickets
by GitHub Copilot guided by Jens Hoevelmann · github.com/tripmaster7/tickera-wallet-passes · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/tripmaster7/tickera-wallet-passes/archive/refs/heads/master.zipWordPress plugin that integrates with Tickera to generate Apple Wallet (.pkpass) and Google Wallet passes for event tickets.
Features
- Apple Wallet (.pkpass) — generates downloadable
.pkpassfiles signed with your Apple Developer certificate - Google Wallet — generates "Save to Google Wallet" links using the Google Wallet API
- Barcode/QR Code — includes the correct ticket barcode from Tickera
- Event Logo — uses the configured event logo (or a default fallback logo)
- Attendee Name — displays the full name of the ticket holder
- Membership Number — includes a configurable custom field for membership numbers
- Custom Field — maps any additional Tickera checkout form field to the pass
- Automatic Integration — buttons appear on order confirmation, order details pages, and in confirmation emails
- Shortcodes —
[tcwp_wallet_passes]and[tcwp_order_passes]for manual placement
Requirements
| Requirement | Details |
|---|---|
| WordPress | 5.8+ |
| PHP | 7.4+ |
| PHP Extensions | OpenSSL, ZipArchive, GD (recommended) |
| Tickera | 3.x+ (must be installed and active) |
For Apple Wallet
- Apple Developer account ($99/year)
- Pass Type ID Certificate (
.p12or.pem) - Apple WWDR intermediate certificate
For Google Wallet
- Google Cloud project with Google Wallet API enabled
- Service account JSON key file
- Issuer ID from Google Pay & Wallet Console
Installation
- Upload the
tickera-wallet-passesfolder to/wp-content/plugins/ - Activate the plugin via Plugins in WordPress admin
- Navigate to Tickera → Wallet Passes to configure
Configuration
Apple Wallet Setup
- Visit Apple Developer Portal → Certificates, Identifiers & Profiles
- Create a Pass Type ID (e.g.,
pass.com.yourorg.events) - Create a certificate for that Pass Type ID and export as
.p12 - Download the Apple WWDR Certificate (G4) —
AppleWWDRCAG4.cer, convert to PEM:openssl x509 -inform DER -in AppleWWDRCAG4.cer -out AppleWWDRCAG4.pem - Place both files in the
certificates/folder of the plugin - Fill in settings: Pass Type ID, Team ID, certificate filename, password, WWDR filename
Google Wallet Setup
- Go to Google Pay & Wallet Console
- Create an Issuer account and note your Issuer ID
- In Google Cloud Console, enable the Google Wallet API
- Create a Service Account and download the JSON key
- Grant the service account access in the Google Wallet Console
- Place the JSON key file in the
certificates/folder - Fill in settings: Issuer ID, JSON filename
Custom Field Mapping
The plugin can display additional data fields on wallet passes:
- Membership Number Field — enter the meta key/form field slug from Tickera
- Custom Field — any other Tickera checkout form field slug + label
Fields are resolved in this order:
- Ticket instance post meta (attendee-level)
- Order
tc_cart_info→owner_data(checkout form data) - Order
tc_cart_info→buyer_data(buyer form data) - WordPress user meta (for registered users)
Adding Custom Fields to Tickera Checkout
In your theme's functions.php or a custom plugin:
// Add a membership number field to the attendee (owner) checkout form
add_filter('tc_owner_info_fields', function($fields, $ticket_type_id) {
$fields[] = array(
'field_name' => 'membership_number',
'field_title' => 'Membership Number',
'field_type' => 'text',
'post_field_type' => 'post_meta',
'required' => false,
'placeholder' => 'Enter your membership number',
);
return $fields;
}, 10, 2);
Then set membership_number as the Membership Number Field slug in the plugin settings.
Shortcodes
Single Ticket Pass Buttons
[tcwp_wallet_passes ticket_instance_id="123"]
All Passes for an Order
[tcwp_order_passes order_id="456"]
If order_id is omitted, it reads from the ?order_id= or ?order= URL parameter.
Hooks & Filters
Filters
| Filter | Description | Parameters |
|---|---|---|
tcwp_ticket_data |
Modify ticket data before pass generation | $data, $ticket_instance_id |
tcwp_apple_pass_json |
Modify the Apple pass.json structure | $pass, $ticket_data |
tcwp_google_class_payload |
Modify Google Wallet class payload | $class, $ticket_data |
tcwp_google_object_payload |
Modify Google Wallet object payload | $object, $ticket_data |
tcwp_google_pass_url |
Modify the final Google Wallet save URL | $url, $ticket_data |
Actions
| Action | Description | Parameters |
|---|---|---|
tcwp_order_created |
Fired when Tickera creates an order | $order_id, $status, $cart_contents, $cart_info, $payment_info |
Example: Add Custom Data to a Pass
add_filter('tcwp_ticket_data', function($data, $ticket_instance_id) {
// Add a VIP badge indicator
$data['custom_field_label'] = 'Status';
$data['custom_field_value'] = 'VIP';
return $data;
}, 10, 2);
Example: Customize Apple Wallet Pass Colors Per Event
add_filter('tcwp_apple_pass_json', function($pass, $ticket_data) {
if ($ticket_data['event_id'] == 123) {
$pass['backgroundColor'] = '#FF0000';
$pass['foregroundColor'] = '#FFFFFF';
}
return $pass;
}, 10, 2);
File Structure
tickera-wallet-passes/
├── tickera-wallet-passes.php # Main plugin file
├── admin/
│ └── class-tcwp-admin.php # Admin settings page
├── includes/
│ ├── class-tcwp-helper.php # Data extraction & utilities
│ ├── class-tcwp-apple-pass.php # Apple Wallet .pkpass generator
│ ├── class-tcwp-google-pass.php # Google Wallet pass generator
│ └── class-tcwp-frontend.php # Frontend buttons & hooks
├── assets/
│ ├── css/
│ │ ├── admin.css
│ │ └── front.css
│ ├── js/
│ │ └── admin.js
│ └── images/
├── certificates/ # Place certificates here (protected)
│ ├── .htaccess
│ └── index.php
├── tmp/ # Temp files (auto-cleaned)
│ ├── .htaccess
│ └── index.php
├── languages/
└── README.md
Security Notes
- Certificate files in
certificates/are protected by.htaccessrules - Temporary files are auto-cleaned after 1 hour
- All download URLs use WordPress nonces for CSRF protection
- Only paid orders (
order_paidstatus) can generate passes - Certificate passwords are stored in the WordPress options table (consider using
wp-config.phpconstants for production)
Troubleshooting
| Issue | Solution |
|---|---|
| "PHP OpenSSL extension is required" | Enable ext-openssl in your PHP configuration |
| "Could not parse .p12 certificate" | Verify the certificate password is correct |
| "Apple WWDR certificate not found" | Download from Apple and convert to PEM format |
| "Google service account JSON file not found" | Ensure the file is in /certificates/ and the filename matches |
| Pass doesn't appear in Apple Wallet | Verify Pass Type ID and Team ID match your Apple Developer account |
| Images missing on pass | Ensure PHP GD extension is loaded; check event has a logo configured |
License
GPLv2 or later