Extensions issueshttps://lab.civicrm.org/groups/extensions/-/issues2024-03-29T15:05:21Zhttps://lab.civicrm.org/extensions/civirules/-/issues/1Backward compatibility of 2.x with 4.62024-03-29T15:05:21ZVangelisPBackward compatibility of 2.x with 4.6Hello !
It seems that version 2.0 breaks backward compatibility with 4.6 platforms on the 'Find rules' action.
Issue appears to be the call to function: **CRM_Utils_System::getUrlPath()** which doesn't exist on 4.6 versions.
File: CRM/...Hello !
It seems that version 2.0 breaks backward compatibility with 4.6 platforms on the 'Find rules' action.
Issue appears to be the call to function: **CRM_Utils_System::getUrlPath()** which doesn't exist on 4.6 versions.
File: CRM/Civirules/Form/Search/Rules.php
Line 22:
```PHP
$session = CRM_Core_Session::singleton();
$url = CRM_Utils_System::getUrlPath();
```
To fix this, I added a condition on that part:
```PHP
// Set the user context
$session = CRM_Core_Session::singleton();
if ($this->_domainversion <= 4.6) {
// Backwards compatible with 4.6 systems
$url = CRM_Utils_System::currentPath();
} else {
$url = CRM_Utils_System::getUrlPath();
}
```
I'm also attaching a patch for that.
[civirules-2.0-fix-compatibility-4.6.patch](/uploads/61929e9ea5675543028841e91e40dd01/civirules-2.0-fix-compatibility-4.6.patch)https://lab.civicrm.org/extensions/stripe/-/issues/465contribution fails when percentage field is enabled2024-03-29T12:40:04Zmtnpavlascontribution fails when percentage field is enabledAfter upgrading to the Civi and extension versions as listed below, contributions fail when the % field is configured and enabled in the price set.
- CiviCRM 5.69.2
- Stripe Payment Processor 6.10.2
- Payment Shared 1.2.20
- Percentage P...After upgrading to the Civi and extension versions as listed below, contributions fail when the % field is configured and enabled in the price set.
- CiviCRM 5.69.2
- Stripe Payment Processor 6.10.2
- Payment Shared 1.2.20
- Percentage Price Set Field 1.5.2
- Joomla 4.4.2
On the website (Civi contribution page) the user gets the following error message:
`Stripe An error occurred while processing the payment`
In Stripe I see the following:
```
Request parameters
{
"description": "Donate to Evergreen 8831X92675 #d973750916e515f092192009b6d48213",
"statement_descriptor_suffix": "8831X92675 D",
"statement_descriptor": "8831X92675 Donate to E",
"amount": "10350",
"customer": "cus_KbTE...."
}
Response body
{
"error": {
"code": "payment_intent_unexpected_state",
"doc_url": "https://stripe.com/docs/error-codes/payment-intent-unexpected-state",
"message": "This PaymentIntent's amount could not be updated because it has a status of requires_capture. You may only update the amount of a PaymentIntent with one of the following statuses: requires_payment_method, requires_confirmation, requires_action.",
"param": "amount",
"payment_intent": {
"id": "pi_3ObWZNLHe2ijJmBv1UzhEZ47",
"object": "payment_intent",
"amount": 10386,
"amount_capturable": 10386,
"amount_details": {
"tip": {
}
},
"amount_received": 0,
"application": null,
"application_fee_amount": null,
"automatic_payment_methods": null,
"canceled_at": null,
"cancellation_reason": null,
"capture_method": "manual",
"client_secret": "pi_3O**********************_******_*********************sk8p",
"confirmation_method": "manual",
"created": 1705964781,
"currency": "usd",
"customer": null,
"description": null,
"invoice": null,
"last_payment_error": null,
"latest_charge": "ch_3ObWZNLHe2ijJmBv17AUXXga",
"livemode": true,
"metadata": {
},
"next_action": null,
"on_behalf_of": null,
"payment_method": "pm_1ObWZLLHe2ijJmBvDkAWdhSh",
"payment_method_configuration_details": null,
"payment_method_options": {
"card": {
"installments": null,
"mandate_options": null,
"network": null,
"request_three_d_secure": "automatic"
}
},
"payment_method_types": [
"card"
],
"processing": null,
"receipt_email": null,
"review": null,
"setup_future_usage": "off_session",
"shipping": null,
"source": null,
"statement_descriptor": null,
"statement_descriptor_suffix": null,
"status": "requires_capture",
"transfer_data": null,
"transfer_group": null
},
"request_log_url": "https://dashboard.stripe.com/logs/req_H22ZX2zYJorHKW?t=1705964784",
"type": "invalid_request_error"
}
}
```
Please note the $103.86 vs. $103.50 amounts ($103.50 is the correct amount; we do not use tax in our config and price sets anywhere.)
Any thoughts on where this is coming from - Civi/% field/Stripe?
Thank you!https://lab.civicrm.org/extensions/stripe/-/issues/474What does the Stripe security requirements 'change' mean2024-03-28T21:26:04ZeileenWhat does the Stripe security requirements 'change' mean
Josh got this email from Stripe - what does it mean for us?
=================================================================================
Thanks again for taking the time to meet with us and discuss the CiviCRM plugin and ways tha...
Josh got this email from Stripe - what does it mean for us?
=================================================================================
Thanks again for taking the time to meet with us and discuss the CiviCRM plugin and ways that we can deepen our partnership. As we mentioned on the call, Stripe is heightening our security standards by requiring all plugin developers and merchants to use a Stripe Apps supported authentication method.
There are 2 ways CiviCRM can achieve these new security requirements: by implementing either OAuth or Restricted API key (RAK) authentication via a Stripe App, and/or migrating to standard Connect. Please review the [technical onboarding guide](https://stripe.com/docs/stripe-apps/onboarding-plugin) and documentation for [OAuth](https://stripe.com/docs/stripe-apps/api-authentication/oauth) Apps and [RAK](https://stripe.com/docs/stripe-apps/api-authentication/rak) Apps.
All plugin developers using unrestricted API keys must complete the security upgrade by June 2024 in order to avoid any impact to your plugin. Below is a high level timeline of this deprecation:
* April ‘24 - Stripe will send a security risk notification to all merchants using non-secure plugins and will add a security flag on all non-secure plugins in the Stripe Dashboard.
* August ‘24 - Stripe will begin to deprecate the use of non-secure plugins.
Upgrading to Stripe Apps will not only help you meet these security requirements, but can also help you increase your plugin’s distribution. As part of the update, we are offering all developers a Stripe App Marketplace listing, plugin analytics dashboards, and an invitation to [Stripe’s Partner Program](https://docs.stripe.com/partners#benefits).
In addition, the Stripe Apps marketplace and our new, more secure framework do not support legacy integrations. *As such, we will require all plugins in the Stripe Apps marketplace to be on non-legacy UIs (Card Element) in order to ensure the best user and merchant experience.* By implementing Stripe's Optimized Checkout Suite ([payment elements](https://stripe.com/docs/payments/payment-element/migration), [payment methods](https://stripe.com/docs/payments/elements/link-authentication-element), and [Link](https://stripe.com/docs/payments/elements/link-authentication-element)) CiviCRM can leverage our newest checkout products and drive revenue.
Please let us know once you've had a chance to review with your team. We would like to schedule a follow up call later this week or next to help you scope your upgrades, discuss Connect revshare opportunity, and answer any technical questions.https://lab.civicrm.org/extensions/dataprocessor/-/issues/141Creating Report Output causes "navigation_menu" dependency error (site goes d...2024-03-28T20:34:16ZpbarmakCreating Report Output causes "navigation_menu" dependency error (site goes down)On the latest version of dataprocessor, on WordPress with Civi 5.71.1, if I create a new data processor and I add an output of Search / Report, I get the following error and the whole site goes down (cannot navigate anywhere without that...On the latest version of dataprocessor, on WordPress with Civi 5.71.1, if I create a new data processor and I add an output of Search / Report, I get the following error and the whole site goes down (cannot navigate anywhere without that error and nothing else shows):
`The parameter "navigation_menu" has a dependency on a non-existent parameter "2Fdataprocessor_search".`
This happens on any type of data processor where I select Search / Report as an output. Other outputs I've tried (ex. dashlet) seem to work. And it's only happening on WordPress, my Drupal 7 site seems fine.https://lab.civicrm.org/extensions/stripe/-/issues/472Merchant code settings2024-03-28T20:07:02ZlcarterMerchant code settingsA client has asked about merchant category codes (see https://stripe.com/docs/connect/setting-mcc#mcc-automatic for documentation)... apparently their trxns are coming across as retail even though their code in Stripe is set to College/U...A client has asked about merchant category codes (see https://stripe.com/docs/connect/setting-mcc#mcc-automatic for documentation)... apparently their trxns are coming across as retail even though their code in Stripe is set to College/University. Is this something that's configurable in CiviCRM or is this solely controlled in Stripe itself?https://lab.civicrm.org/extensions/ukgiftaid/-/issues/42PHP 8 error on Remove from Gift Aid batch2024-03-28T17:01:05ZdavejPHP 8 error on Remove from Gift Aid batchOn PHP 8.1, we got a PHP error on the _Remove from Gift Aid batch_ task. This resulted in the remove from batch form being only partially rendered, unstyled and not usable. The PHP error:
```
TypeError: count(): Argument #1 ($value) must...On PHP 8.1, we got a PHP error on the _Remove from Gift Aid batch_ task. This resulted in the remove from batch form being only partially rendered, unstyled and not usable. The PHP error:
```
TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in include() (line 54 of .../files/civicrm/templates_c/en_GB/%%1D/1D7/1D7FFE0E%%RemoveFromBatch.tpl.php).
```
PR to follow.
**Versions**
- UK Gift Aid 3.5.3
- CiviCRM 5.65.2
- Drupal 10.2.2
- PHP 8.1.27https://lab.civicrm.org/extensions/theisland/-/issues/17Confirmation page is full screen with no border2024-03-28T16:06:52ZGuillaumeSorelConfirmation page is full screen with no borderIs there a way to override the /civicrm/ext/theisland/css/custom-civicrm.css? It's using a default #e8eef0 forced as important for the main wrapper or comes with tiny or no padding.
![image](/uploads/5f48b571bbaaf322a85e6db3fe9416a6/ima...Is there a way to override the /civicrm/ext/theisland/css/custom-civicrm.css? It's using a default #e8eef0 forced as important for the main wrapper or comes with tiny or no padding.
![image](/uploads/5f48b571bbaaf322a85e6db3fe9416a6/image.png)https://lab.civicrm.org/extensions/form-processor/-/issues/68Problem with autofill functionality of Caldera Forms2024-03-28T15:54:35Zsimon.hermannProblem with autofill functionality of Caldera FormsWith ver. 2.0.0 there seem to be a problem with the autofill functionality of Caldera Forms.
Expected behaviour: Defining an input field in the a form processor as an option group allows you to choose this option field in Caldera Form as...With ver. 2.0.0 there seem to be a problem with the autofill functionality of Caldera Forms.
Expected behaviour: Defining an input field in the a form processor as an option group allows you to choose this option field in Caldera Form as a source for autofill for an dropdown field, a checkbox field or a radiobutton field. Using the form this fields would then be autopopulated with the options of the option group within CiviCRM.
Current behaviour: Defining an input field as an option group in the form processor, you can still select this input in Caldera Forms. When the form is then loaded, no options are shown.
Maybe a duplicate with #67 first point?https://lab.civicrm.org/extensions/mosaicoextras/-/issues/2WP - Update permissions to non-deprecated format2024-03-28T07:46:07ZspeleoWP - Update permissions to non-deprecated formatRunning
- CiviCRM 5.71.1
- php 8.1.27
- version 1.99 of dataprocessor.php
This seems related to extensions/dataprocessor!125 which has been marked as fixed/closed.
https://lab.civicrm.org/extensions/dataprocessor/-/merge_requests/125...Running
- CiviCRM 5.71.1
- php 8.1.27
- version 1.99 of dataprocessor.php
This seems related to extensions/dataprocessor!125 which has been marked as fixed/closed.
https://lab.civicrm.org/extensions/dataprocessor/-/merge_requests/125?commit_id=c2e6a48725b05cd5f69d259194d1f3539a6395a4
I've checked and I'm already running this fix.
debug.log full of
PHP Deprecated: Permission 'xxxx' should be declared with 'label' and 'description' keys. See https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_permission/ Caller: CRM_Core_Permission::assembleBasicPermissions in /home/bertie/public_html/wp/wp-content/plugins/civicrm/civicrm/CRM/Core/Error.php on line 1129
The permissission xxxx above is one of
- CiviMobile backend access
- view Agenda
- see tags
- see groups
- CiviMobile backend access
- administer CiviDiscount
- can check in on event
If the calling method has been fixed, would the notices be caused by the extension code not passing the right arguments?https://lab.civicrm.org/extensions/mosaicoextras/-/issues/15.71 compatibility2024-03-28T07:46:06ZDetlev Sieber5.71 compatibilityThe cronjob is throwing a warning message:
> \[PHP User Deprecation\] Permission 'delete Mosaico templates' should be declared with 'label' and 'description' keys. See https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_permission...The cronjob is throwing a warning message:
> \[PHP User Deprecation\] Permission 'delete Mosaico templates' should be declared with 'label' and 'description' keys. See https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_permission/ Caller: CRM_Core_Permission::assembleBasicPermissions at /usr/www/users/crmxxxxx/sub.domain.tld/vendor/civicrm/civicrm-core/CRM/Core/Error.php:1129
In a Drupal environment, this is sending an email every time the cronjob is running.https://lab.civicrm.org/extensions/cividiscount/-/issues/308CiviDiscount 3.8.10 and Master (21/02/2024) - Discounts for events, option: "...2024-03-27T22:05:56Zjustinfreeman (Agileware)CiviDiscount 3.8.10 and Master (21/02/2024) - Discounts for events, option: "Any event" does not work - discount code is not recognised, does not apply any discountCiviDiscount 3.8.10 and Master (21/02/2024) - Discounts for events, option: "Any event" does not work - discount code is not recognised, does not apply any discount.
It also appears that none of the events selected in the "Discounts for...CiviDiscount 3.8.10 and Master (21/02/2024) - Discounts for events, option: "Any event" does not work - discount code is not recognised, does not apply any discount.
It also appears that none of the events selected in the "Discounts for events" field work either - so basically this field just doesn't work from my testing on dmaster, CiviCRM 5.72.alpha1
![image](/uploads/d80c7de48ac08fa7da9093852d843e4c/image.png)
![image](/uploads/f4e653234581ce8d5dace4f8e3b4d5da/image.png)
Agileware Ref: CIVIDISC-12https://lab.civicrm.org/extensions/theisland/-/issues/14Contact overview white on white label2024-03-27T09:06:17Zjofranzfranz@systopia.deContact overview white on white labelWe are experiencing another "white on white"-label with latest master: 2.3.1+2b3e3c58
![white-on-white](/uploads/f2d5a8f5e4cda6ea0cb19f803b07091e/white-on-white.png)
Path: `.../civicrm/contact/view?reset=1&cid=2&key=xxxx`
___
_SYSTOPI...We are experiencing another "white on white"-label with latest master: 2.3.1+2b3e3c58
![white-on-white](/uploads/f2d5a8f5e4cda6ea0cb19f803b07091e/white-on-white.png)
Path: `.../civicrm/contact/view?reset=1&cid=2&key=xxxx`
___
_SYSTOPIA ref: 23940_2.3.2https://lab.civicrm.org/extensions/civimobileapi/-/issues/73API wrappers cause massive performance hit2024-03-26T19:30:20ZJonGoldAPI wrappers cause massive performance hitA client site had very slow speeds when editing events, managing groups, etc. Simply loading the "Locations" tab on an event was taking 20 seconds.
XDebug Profiler tracked it down to the permissions check. After reviewing the permissi...A client site had very slow speeds when editing events, managing groups, etc. Simply loading the "Locations" tab on an event was taking 20 seconds.
XDebug Profiler tracked it down to the permissions check. After reviewing the permissions on various extensions, I removed the Event API wrapper, and the page loaded in 600ms.
I would need to do further profiling calling the API directly to determine the exact cause, and my client was only testing CiviMobile, but I thought I would pass it on.https://lab.civicrm.org/extensions/civimobileapi/-/issues/89Drupal 9/10 is not supported2024-03-26T18:37:56ZDetlev SieberDrupal 9/10 is not supportedDrupal 9 is using different paths, that are not supported by civimobile as is:
![grafik.png](/uploads/2e60832a6091334f3e383e62d3ee2473/grafik.png)
There is a workaround described here:
https://civihosting.com/blog/civimobile-and-drupa...Drupal 9 is using different paths, that are not supported by civimobile as is:
![grafik.png](/uploads/2e60832a6091334f3e383e62d3ee2473/grafik.png)
There is a workaround described here:
https://civihosting.com/blog/civimobile-and-drupal-9/
... but that "solution" is very hacky and will be destroyed with every "composer require".
Would it be possible to implement a sustaining solution into CiviMobile, in order to make it work "out of the box" for Drupal 10?
(this is a duplicate / wrapper for #66, #81 and #70 ).
By the way, #66 and #70 should not be marked closed, imo.https://lab.civicrm.org/extensions/imagecrop/-/issues/2Use civicrm-ext type instead?2024-03-26T17:25:43ZkenorbUse civicrm-ext type instead?In `composer.json` `type` is `civicrm-extension`, however in installers Composer plugin it's suggested to use `civicrm-ext` at <https://github.com/composer/installers?tab=readme-ov-file#current-supported-package-types>.
For example [ext...In `composer.json` `type` is `civicrm-extension`, however in installers Composer plugin it's suggested to use `civicrm-ext` at <https://github.com/composer/installers?tab=readme-ov-file#current-supported-package-types>.
For example [extendedreport extension is using `civicrm-ext`](https://github.com/eileenmcnaughton/nz.co.fuzion.extendedreport/blob/master/composer.json).
Related:
- https://lab.civicrm.org/extensions/firewall/-/issues/33
- https://lab.civicrm.org/extensions/civirules/-/issues/212 & https://lab.civicrm.org/extensions/civirules/-/merge_requests/226
- https://github.com/totten/civix/issues/234https://lab.civicrm.org/extensions/reporterror/-/issues/6After install on d10 site civicrm was unavailable (500 response)2024-03-26T17:08:36Zkiwi_BrogrammerAfter install on d10 site civicrm was unavailable (500 response)with 3.6 release, installed into site running drupal v10.0.9 with civicrm v5.61.4.
post install was unable to access civicrm admin, all pages returning 500 state with some access to drupal cms admin pages.
when trying to disable exte...with 3.6 release, installed into site running drupal v10.0.9 with civicrm v5.61.4.
post install was unable to access civicrm admin, all pages returning 500 state with some access to drupal cms admin pages.
when trying to disable extension with CV this response was given.
```
cv ext:disable reporterror
PHP Fatal error: Declaration of Psr\Log\AbstractLogger::emergency($message, array $context = []) must be compatible with Psr\Log\LoggerInterface::emergency(Stringable|string $message, array $context = []): void in /srv/www/../web/sites/default/civicrm/ext/reporterror/vendor/psr/log/Psr/Log/AbstractLogger.php on line 22
Fatal error: Declaration of Psr\Log\AbstractLogger::emergency($message, array $context = []) must be compatible with Psr\Log\LoggerInterface::emergency(Stringable|string $message, array $context = []): void in /srv/www/../web/sites/default/civicrm/ext/reporterror/vendor/psr/log/Psr/Log/AbstractLogger.php on line 22
```
was able to recover the site by commenting out include statement at https://lab.civicrm.org/extensions/reporterror/-/blob/master/reporterror.php#L8bgmbgmhttps://lab.civicrm.org/extensions/civimobileapi/-/issues/94Does the extension work ???2024-03-26T12:06:34ZGuillaumeSorelDoes the extension work ???{DISCLAIMER} I know it's war in Ukraine and that you might have better things to do. So it's ok if you don't have time and energy to work on it.
As an admin I updated to version6.3.0 on CiviCRM 5.67.3 (WP) with the Rest Api extension a...{DISCLAIMER} I know it's war in Ukraine and that you might have better things to do. So it's ok if you don't have time and energy to work on it.
As an admin I updated to version6.3.0 on CiviCRM 5.67.3 (WP) with the Rest Api extension add-on also installed.
On the backoffice, I can see that my settings are ok but I can't connect if I uncheck the 'Show Public area' checkbox and if I check it then I just have access to petitions.
I've controlled all my settings and just can't succeed to make it work properly to access contacts and activities.
Is there an updated documentation maybe?https://lab.civicrm.org/extensions/civimobileapi/-/issues/91Error on civimobile2024-03-26T09:52:13ZyashodhaError on civimobile
When launching the app and trying to scan the QR code on the wbesite, or entering directly the URL, we get this error message
Sorry, we could not connect to your server, CiviMobile API extension is not installed properly.
It usually ha...
When launching the app and trying to scan the QR code on the wbesite, or entering directly the URL, we get this error message
Sorry, we could not connect to your server, CiviMobile API extension is not installed properly.
It usually happens when CiviMobile API extension is not installed properly on your [missing {{crmName}} value] server. Check if CiviMobile API extension has the correct folder name.
The folder name seems to be correct _com.agiliway.civimobileapi_. Can you please point to what could be the issue here?https://lab.civicrm.org/extensions/gdpr/-/issues/343Missing translation for Terms & Conditions2024-03-26T09:38:18ZGuillaumeSorelMissing translation for Terms & ConditionsIn French but I guess in other languages it's not possible de get the translated chain for 'Terms & Conditions'.
I had to hard translate in ./templates/CRM/Gdpr/TermsConditionsField.tpl to get it in French.
It looks like it's related to...In French but I guess in other languages it's not possible de get the translated chain for 'Terms & Conditions'.
I had to hard translate in ./templates/CRM/Gdpr/TermsConditionsField.tpl to get it in French.
It looks like it's related to the '&' here https://lab.civicrm.org/extensions/gdpr/-/blame/master/templates/CRM/Gdpr/TermsConditionsField.tpl?ref_type=heads#L5
![image](/uploads/fd3caa423f4e940e4c685bec729b7255/image.png)https://lab.civicrm.org/extensions/firewall/-/issues/34Payment fails on Drupal 9.2+ webforms for anonymous users2024-03-26T00:03:43ZBobSPayment fails on Drupal 9.2+ webforms for anonymous usersDrupal 9.2+ does not by default create a [session for anonymous users](https://www.drupal.org/node/3006306). This results in a CSRF failure when submitting webforms which include a payment section.
CiviCRM ensures that a session is crea...Drupal 9.2+ does not by default create a [session for anonymous users](https://www.drupal.org/node/3006306). This results in a CSRF failure when submitting webforms which include a payment section.
CiviCRM ensures that a session is created for all form requests that it handles, but this does not include webform requests.
When responding to Ajax requests to /drupal/civicrm/payment/form initiated from a Drupal Webform,
`Firewall::generateCSRFToken()` calls `\CRM_Core_Config::singleton()->userSystem->getSessionId()` which in turn initializes the `civicrm.tempstore.sessionid` $_SESSION array element. Normally, this would cause Drupal to save the session. However, the Ajax request is terminated by CiviCRM before the normal Drupal request flow is completed, and thus, the session is not saved and no session cookie is emitted.
One solution would be to modify CiviCRM core to save the session before terminating Ajax requests. But, since this failure is specific to the CSRF token generated by the Firewall extension, I think it is more appropriate to fix it there.
The following patch to Firewall::generateCSRFToken() (v1.5.9) resolves the problem. It was tested on Drupal 10.2.3 for both anonymous and logged-in users, and is believed to be compatible with earlier Drupal versions.
```
*** firewall/Civi/Firewall/Firewall_v1.5.9.php Mon Mar 25 09:18:23 2024
--- firewall/Civi/Firewall/Firewall.php Mon Mar 25 17:01:36 2024
***************
*** 277,282 ****
--- 277,294 ----
if (!empty($context)) {
\CRM_Core_Session::singleton()->set('csrf.' . $publicToken, $context, 'civi.firewall');
}
+
+ //Drupal 9.2+ does not by default create a session for anonymous users.
+ //While processing an Ajax request to /drupal/civicrm/payment/form initiated
+ //from a Drupal Webform, we therefore save the session to ensure that anonymous
+ //users receive a session cookie.
+ if (($_REQUEST["is_drupal_webform"] ?? '') == '1' &&
+ method_exists('\Drupal', 'request') &&
+ method_exists(\Drupal::request(), 'getSession') &&
+ method_exists(\Drupal::request()->getSession(), 'save')) {
+ \Drupal::request()->getSession()->save();
+ }
+
return $publicToken;
}
```
See duplicate issue https://lab.civicrm.org/extensions/stripe/-/issues/473.