{"id":376291,"date":"2026-09-29T05:21:47","date_gmt":"2026-09-29T05:21:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wallet-pass-for-amelia\/"},"modified":"2026-09-29T22:53:01","modified_gmt":"2026-09-29T22:53:01","slug":"wallet-pass-for-amelia","status":"publish","type":"plugin","link":"https:\/\/fa.wordpress.org\/plugins\/wallet-pass-for-amelia\/","author":23568080,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.6","stable_tag":"1.0.6","tested":"7.1.2","requires":"6.5","requires_php":"8.1","requires_plugins":null,"header_name":"Wallet Pass for Amelia","header_author":"Blue Brain Media","header_description":"Adds Google Wallet passes for appointments booked through Amelia. Passes are generated and signed on your own server.","assets_banners_color":"092344","last_updated":"2026-09-29 22:53:01","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/bluebrainmedia.ca\/wallet-pass-for-amelia\/","header_author_uri":"https:\/\/bluebrainmedia.ca","rating":0,"author_block_rating":0,"active_installs":0,"downloads":72,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.5":{"tag":"1.0.5","author":"bluebrainmedia","date":"2026-09-29 05:31:52","revision":3718290},"1.0.6":{"tag":"1.0.6","author":"bluebrainmedia","date":"2026-09-29 22:53:01","revision":3719976}},"upgrade_notice":{"1.0.6":"<p>Worth taking. If a pass ever fails, the settings screen now tells you why instead of leaving you to guess \u2014 including the common case where Google cannot reach your logo, which until now looked like a credentials problem and is not one.<\/p>","1.0.5":"<p>Corrects a misleading note beside the logo setting on sites that are not on https. Wording only, but worth taking if you have uploaded a logo.<\/p>","1.0.4":"<p>Nothing changes in the free edition. Safe to skip.<\/p>","1.0.3":"<p>The Google Wallet settings check no longer leaves a new item on your issuer account each time you run it. Worth taking if you use that check.<\/p>","1.0.2":"<p>The shortcode has been renamed to [bbmawp_wallet_passes]. If you have [wallet_passes] on a page, update it after upgrading or the list will not appear.<\/p>","1.0.1":"<p>Maintenance only. Nothing changes in the free edition.<\/p>","1.0.0":"<p>First WordPress.org release of the free, Google Wallet only edition.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3718279,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3718279,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3718279,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3718279,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.5","1.0.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3718279,"resolution":"1","location":"assets","locale":"","width":1698,"height":1321},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3718279,"resolution":"2","location":"assets","locale":"","width":838,"height":714}},"screenshots":{"1":"Wallet Pass settings: Issuer ID, service-account key upload, pass styling, and the diagnostics panel.","2":"The \"Add to Google Wallet\" button on the Amelia booking confirmation screen."}},"plugin_section":[],"plugin_tags":[169414,8132,269,17694,270577],"plugin_category":[40],"plugin_contributors":[281870],"plugin_business_model":[],"class_list":["post-376291","plugin","type-plugin","status-publish","hentry","plugin_tags-amelia","plugin_tags-appointments","plugin_tags-booking","plugin_tags-google-wallet","plugin_tags-wallet-pass","plugin_category-calendar-and-events","plugin_contributors-bluebrainmedia","plugin_committers-bluebrainmedia"],"banners":{"banner":"https:\/\/ps.w.org\/wallet-pass-for-amelia\/assets\/banner-772x250.png?rev=3718279","banner_2x":"https:\/\/ps.w.org\/wallet-pass-for-amelia\/assets\/banner-1544x500.png?rev=3718279","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wallet-pass-for-amelia\/assets\/icon-128x128.png?rev=3718279","icon_2x":"https:\/\/ps.w.org\/wallet-pass-for-amelia\/assets\/icon-256x256.png?rev=3718279","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wallet-pass-for-amelia\/assets\/screenshot-1.png?rev=3718279","caption":"Wallet Pass settings: Issuer ID, service-account key upload, pass styling, and the diagnostics panel."},{"src":"https:\/\/ps.w.org\/wallet-pass-for-amelia\/assets\/screenshot-2.png?rev=3718279","caption":"The \"Add to Google Wallet\" button on the Amelia booking confirmation screen."}],"raw_content":"<!--section=description-->\n<p>Wallet Pass for Amelia turns each appointment booked through Amelia into a Google Wallet pass. The customer gets an \"Add to Google Wallet\" button on the booking confirmation screen and in the booking email. Add the <code>[bbmawp_wallet_passes]<\/code> shortcode to any page and signed-in customers can also come back later for a list of their upcoming appointments, each with its own button.<\/p>\n\n<p>The pass shows the service, the provider, the date and time, the location, and a QR code. The customer's phone then reminds them before the appointment, without you paying for an SMS.<\/p>\n\n<p>There is no third-party pass-hosting service and no subscription. Passes are built using your own Google Wallet Issuer account and a service-account key you upload on the plugin's settings screen. The service name, the provider, the appointment date and time, the location, the booking reference, and the customer's name are the only data placed on a pass.<\/p>\n\n<p>Passes are generated when the customer taps the button, from the booking's current state. If the appointment is later rescheduled or cancelled, the pass already in the customer's phone is updated or voided automatically.<\/p>\n\n<p>This edition issues Google Wallet passes for Amelia's appointments. A <a href=\"https:\/\/bluebrainmedia.ca\/wallet-pass-for-amelia\/\">premium edition<\/a> is a separate plugin that also covers Amelia's events, with one pass per ticket, and adds Apple Wallet passes for iPhone and iPad, plus email support.<\/p>\n\n<p>Wallet Pass for Amelia is an independent, third-party plugin built by Blue Brain Media. It is not affiliated with, endorsed by, or sponsored by the makers of Amelia.<\/p>\n\n<h4>Features<\/h4>\n\n<ol>\n<li>Google Wallet pass generation via your own Google Wallet Issuer account<\/li>\n<li>\"Add to Google Wallet\" buttons on the booking confirmation screen and in the booking email<\/li>\n<li>A <code>[bbmawp_wallet_passes]<\/code> shortcode listing a signed-in customer's upcoming appointments, each with its own button<\/li>\n<li>A staff lookup on the settings screen for copying any upcoming appointment's pass link<\/li>\n<li>Passes update automatically when an appointment is rescheduled, and void when it is cancelled<\/li>\n<li>Pass styling: organisation name, background colour, barcode format<\/li>\n<li>A settings-screen diagnostics panel, and a <code>wp amelia-wallet verify<\/code> command, that check your credentials and say exactly what is wrong<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>Amelia - the free edition (Amelia Lite) is enough; nothing here needs a paid Amelia licence<\/li>\n<li>PHP 8.1+ with the OpenSSL extension<\/li>\n<li>A Google Cloud project with the Google Wallet API enabled, and a Google Wallet Issuer account<\/li>\n<\/ul>\n\n<h4>A note on Amelia's free edition<\/h4>\n\n<p>This plugin works on Amelia Lite. Two things behave differently there, because Amelia itself gates them:<\/p>\n\n<ul>\n<li><strong>Locations<\/strong> are a paid Amelia feature. On Lite the pass falls back to the company address from Amelia's own settings, and omits the venue entirely if that is empty too.<\/li>\n<li><strong>Per-customer timezones<\/strong> are a paid Amelia feature. On Lite every appointment is shown in your site's WordPress timezone.<\/li>\n<\/ul>\n\n<p>Neither stops passes from working.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the Google Wallet API to create the pass that a customer saves to Google Wallet. Creating the pass has to happen on Google's servers, because Google Wallet only accepts passes issued through its own API.<\/p>\n\n<ul>\n<li><strong>What it is used for:<\/strong> authenticating with your Google Cloud service account (https:\/\/oauth2.googleapis.com\/token), then creating and updating a pass class and object (https:\/\/walletobjects.googleapis.com\/walletobjects\/v1). The customer's \"Add to Google Wallet\" button opens a link on https:\/\/pay.google.com\/gp\/v\/save\/.<\/li>\n<li><strong>What is sent, and when:<\/strong> the first time a customer taps the button for a booking, and again whenever that appointment is rescheduled or cancelled, the plugin sends the service name, the provider's name, the appointment date and time, the location, your pass styling (organisation name, background colour, barcode format), the booking reference and barcode value, and the customer's name. Your service-account credentials are used to sign the requests and are sent only to Google's OAuth endpoint. Nothing is sent when the plugin is idle, and nothing is sent for customers who never tap the button.<\/li>\n<li><strong>Provider:<\/strong> Google LLC. <a href=\"https:\/\/policies.google.com\/terms\">Google Terms of Service<\/a>, <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a> and <a href=\"https:\/\/developers.google.com\/terms\">Google APIs Terms of Service<\/a>.<\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>The pass engine in this plugin descends from <strong>CommerceBird - Wallet Pass for Tickera<\/strong> (https:\/\/github.com\/RoadmapStudios\/commercebird-wallet-pass), originally written by Roadmap Studios \/ CommerceBird and released under GPL-3.0. The CommerceBird SaaS account layer (subscription check, the app.commercebird.com connection, the remote pass-generation API, and the CommerceBird application-password requirement) has been removed; Google Wallet passes are generated and cryptographically signed directly on the site's own server, using credentials the site owner supplies on the plugin's own settings screen. The GPL-3.0 obligations from the upstream project carry forward unchanged: source is available and the licence text is distributed verbatim in LICENSE.<\/p>\n\n<p>The Google Wallet JWT (used for the OAuth2 service-account assertion and the \"Add to Google Wallet\" link) is RS256-signed with PHP's own OpenSSL extension; this edition does not bundle any third-party libraries.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>wp-content\/plugins\/<\/code> and activate it.<\/li>\n<li>Go to Amelia &gt; Wallet Pass.<\/li>\n<li>Enter your Google Wallet Issuer ID and upload your Google Cloud service-account JSON key.<\/li>\n<li>Click <strong>Check configuration<\/strong>. It will tell you if the key, the issuer, or the link between them is wrong, and what to do about it.<\/li>\n<li>Set the pass styling (organisation name, background colour, barcode format).<\/li>\n<li>Book a test appointment and save the pass to Google Wallet.<\/li>\n<li><strong>Before going live:<\/strong> request Google Wallet publishing access for your Issuer account (free, one-time, see FAQ below) - until Google approves it, every pass shows a \"[TEST ONLY]\" banner and can only be added by accounts on your own tester list.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20paid%20amelia%20licence%3F\"><h3>Do I need a paid Amelia licence?<\/h3><\/dt>\n<dd><p>No. Everything this plugin depends on is present in Amelia's free edition. See the note above for the two places a paid Amelia tier changes what appears on the pass.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20paid%20third-party%20plan%3F\"><h3>Do I need a paid third-party plan?<\/h3><\/dt>\n<dd><p>No. The plugin runs entirely on your server. You do need a free Google Cloud project and a Google Wallet Issuer account to obtain the credentials the plugin uses to sign passes.<\/p><\/dd>\n<dt id=\"why%20do%20my%20google%20wallet%20passes%20show%20a%20%22%5Btest%20only%5D%22%20banner%3F\"><h3>Why do my Google Wallet passes show a \"[TEST ONLY]\" banner?<\/h3><\/dt>\n<dd><p>Every Google Wallet Issuer account starts in Google's own demo mode, and Google adds this banner to every pass - and blocks anyone not on your tester list from adding one - until you request and receive publishing access for that account. This is a one-time approval from Google, free of charge, and applies to every Google Wallet integration; the plugin has no setting to skip it. To remove it:<\/p>\n\n<ol>\n<li>Sign in to the <a href=\"https:\/\/pay.google.com\/business\/console\/\">Google Pay &amp; Wallet Console<\/a> with the Google account tied to your Wallet Issuer ID.<\/li>\n<li>Under Business profile, complete both the Business identity (payments profile) and Business information sections.<\/li>\n<li>Have at least one pass on file, so there is a class for Google to review.<\/li>\n<li>Under Google Wallet API, click \"Request publishing access\" and submit for review.<\/li>\n<\/ol>\n\n<p>Approval isn't instant, so do this well before you need real customers to add passes. Once approved, the banner disappears automatically from all your passes - no plugin update or setting change is needed.<\/p><\/dd>\n<dt id=\"does%20this%20include%20apple%20wallet%3F\"><h3>Does this include Apple Wallet?<\/h3><\/dt>\n<dd><p>No. This edition generates Google Wallet passes only. Apple Wallet passes, for iPhone and iPad customers, are part of the <a href=\"https:\/\/bluebrainmedia.ca\/wallet-pass-for-amelia\/\">premium edition<\/a>.<\/p>\n\n<p>One difference worth knowing before you buy: Google Wallet passes update themselves on the customer's phone when an appointment moves, and Apple Wallet passes in the current premium release do not. The customer's remedy is one tap - opening the same pass link again rebuilds the pass from today's booking - and the emails say so. Automatic Apple updates need Apple's push service, which the current release does not include.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20amelia%27s%20events%3F\"><h3>Does this work with Amelia's events?<\/h3><\/dt>\n<dd><p>No. This edition issues passes for appointments. Event bookings are left alone: no button appears on the confirmation screen or in the email, and nothing is added to the customer's phone. Event passes, one per ticket, are part of the <a href=\"https:\/\/bluebrainmedia.ca\/wallet-pass-for-amelia\/\">premium edition<\/a>. Your appointment passes are unaffected either way.<\/p><\/dd>\n<dt id=\"can%20i%20choose%20where%20the%20button%20appears%20in%20my%20booking%20emails%3F\"><h3>Can I choose where the button appears in my booking emails?<\/h3><\/dt>\n<dd><p>Yes. By default the button is added to the end of Amelia's own notification, which needs no setup. If you would rather place it yourself, put <code>%wallet_pass%<\/code> anywhere in the notification template under Amelia &gt; Notifications, and the button appears there instead. The token is removed automatically whenever no button applies, so it never shows up as raw text in a customer's inbox.<\/p><\/dd>\n<dt id=\"can%20customers%20get%20their%20pass%20again%20later%3F\"><h3>Can customers get their pass again later?<\/h3><\/dt>\n<dd><p>Yes. Put the <code>[bbmawp_wallet_passes]<\/code> shortcode on any page - the same page as Amelia's customer panel is the natural home for it - and a signed-in customer sees their upcoming appointments there, each with its own button. It works for customers signed in through Amelia's own customer panel and for customers signed in to WordPress.<\/p>\n\n<p>The list only ever shows the appointments of the person actually signed in. There is no way to ask it for somebody else's: it takes no email address, either as a shortcode attribute or in the URL. Visitors who are not signed in are simply told to sign in.<\/p><\/dd>\n<dt id=\"a%20customer%20says%20they%20never%20got%20the%20link.%20can%20i%20send%20it%20to%20them%3F\"><h3>A customer says they never got the link. Can I send it to them?<\/h3><\/dt>\n<dd><p>Yes. Go to Amelia &gt; Wallet Pass and scroll to \"Pass links\". It lists your upcoming appointments, and you can search by customer name, email, service or booking ID. Click Copy next to the right one and paste it into your reply.<\/p>\n\n<p>Only upcoming appointments that have not been cancelled are listed, because those are the only ones a pass link works for.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20an%20appointment%20is%20rescheduled%20or%20cancelled%3F\"><h3>What happens if an appointment is rescheduled or cancelled?<\/h3><\/dt>\n<dd><p>The pass already saved on the customer's phone is updated to the new time, or marked void if the appointment is cancelled. This happens in the free edition too.<\/p><\/dd>\n<dt id=\"where%20are%20the%20passes%20stored%3F\"><h3>Where are the passes stored?<\/h3><\/dt>\n<dd><p>Generated pass data is served directly from Google's own save link (<code>https:\/\/pay.google.com\/gp\/v\/save\/...<\/code>); nothing is stored on your server long-term.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20change%20anything%20in%20my%20caching%20plugin%20or%20cdn%3F\"><h3>Do I need to change anything in my caching plugin or CDN?<\/h3><\/dt>\n<dd><p>Usually not, but it is worth two minutes to check. Pass links are ordinary URLs on your site carrying an <code>awp_pass<\/code> parameter, and each one is personal to a single customer's booking. The plugin marks those responses as never-cache, using both the standard WordPress headers and the <code>DONOTCACHEPAGE<\/code> flag that WP Rocket, W3 Total Cache, WP Super Cache and LiteSpeed all read, so in a normal setup the right thing happens on its own.<\/p>\n\n<p>What that cannot reach is a cache running in front of WordPress -- a CDN set to cache whole pages, or Varnish or nginx caching configured by your host. If you run one of those, exclude any URL containing <code>awp_pass<\/code> from it. The reason to bother: if such a cache did store one of these responses, the next person to open a pass link would be handed the pass belonging to whoever came before them, complete with their name and appointment.<\/p><\/dd>\n<dt id=\"is%20any%20personal%20data%20sent%20anywhere%3F\"><h3>Is any personal data sent anywhere?<\/h3><\/dt>\n<dd><p>Only to Google, as described under External services below. No data is sent to Blue Brain Media or any other third party.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20support%3F\"><h3>Where do I get support?<\/h3><\/dt>\n<dd><p>Ask in the support forum on this plugin\u2019s WordPress.org page, or use the form at https:\/\/bluebrainmedia.ca\/support\/ if you would rather write to us directly. Either way, saying which versions of WordPress, this plugin and Amelia you are running saves a round of follow-up questions.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.6<\/h4>\n\n<p>When a pass cannot be created, the reason is now kept and shown on the Wallet Pass settings screen, under the verify button: the last five failures, each with the booking and what went wrong, and a button to clear the list. Until now that reason was written only when WP_DEBUG was switched on, so on most sites it was thrown away, and a customer telling you their pass would not open left you with nothing to go on. One reason in particular is now written in plain English: Google downloads your logo from your site rather than being handed it, so if anything stands in the way \u2014 a password on a staging site, an IP allowlist, hotlink protection \u2014 it refuses the pass. That now says so, and names the address it could not reach, instead of reading like a problem with your Google credentials.<\/p>\n\n<h4>1.0.5<\/h4>\n\n<p>The settings screen no longer says your logo is \u201cApple only\u201d when your site is not on https. The free edition makes Google Wallet passes, so there was no Apple pass for the logo to be on, and the note now says plainly that the logo is not being used and that Google needs the site to be on https to fetch it. Wording only \u2014 nothing about your passes or your settings changes.<\/p>\n\n<h4>1.0.4<\/h4>\n\n<p>Maintenance release, keeping the free and premium editions on one version number. The fix in this release is to Apple Wallet pass colours, which the free edition does not generate, so nothing changes for you.<\/p>\n\n<h4>1.0.3<\/h4>\n\n<p>Checking your Google Wallet settings no longer adds a new item to your Google Wallet issuer account every time you run it. Google has no way to delete one of these once it exists, so a diagnostic you ran twenty times while setting up your credentials left twenty of them behind for good. It now reuses the same one. Nothing about the passes your customers receive has changed.<\/p>\n\n<h4>1.0.2<\/h4>\n\n<p>The shortcode is now [bbmawp_wallet_passes]. The old [wallet_passes] name no longer works, so if you have it on a page, edit that page and change the tag. WordPress.org asks that every shortcode carry its plugin prefix, which is what stops two plugins claiming the same tag as each other. Nothing else about the list has changed.<\/p>\n\n<h4>1.0.1<\/h4>\n\n<p>Maintenance release, keeping the free and premium editions on one version number. No functional change to the free edition.<\/p>\n\n<h4>1.0.0<\/h4>\n\n<p>First release of the free, Google Wallet only edition. The pass engine is shared with Bluebrain Wallet Pass for Tickera, itself forked from CommerceBird - Wallet Pass for Tickera (GPL-3.0); see Credits below.<\/p>","raw_excerpt":"Add Google Wallet passes to appointments booked through Amelia, generated and signed on your own server.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/376291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=376291"}],"author":[{"embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bluebrainmedia"}],"wp:attachment":[{"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=376291"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=376291"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=376291"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=376291"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=376291"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fa.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=376291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}