OJS 3.5 upgrade fails on ORCiD migration

Describe the issue or problem
During an upgrade from OJS 3.4.0-10 o 3.5.0-5 the upgrade script fails on ORCiD migration.

Steps I took leading up to the issue

I followed the upgrade instructions up until “9. Run the upgrade”, when it failed.

What application are you using?
OJS 3.4.0-10

Additional information

Running php tools/upgrade.php upgrade fails with the following error:

2026-07-14 14:35:10 [migration: PKP\migration\upgrade\v3_5_0\I9771_OrcidMigration]
PHP Fatal error:  Uncaught UnhandledMatchError: Unhandled match case of type string in /var/www/html/lib/pkp/classes/migration/upgrade/v3_5_0/I9771_OrcidMigration.php:224
Stack trace:
#0 /var/www/html/lib/pkp/classes/migration/upgrade/v3_5_0/I9771_OrcidMigration.php(87): PKP\migration\upgrade\v3_5_0\I9771_OrcidMigration->apiUrlToApiType()
#1 [internal function]: PKP\migration\upgrade\v3_5_0\I9771_OrcidMigration->PKP\migration\upgrade\v3_5_0\{closure}()
#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(841): array_map()
#3 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(829): Illuminate\Support\Arr::map()
#4 /var/www/html/lib/pkp/classes/migration/upgrade/v3_5_0/I9771_OrcidMigration.php(78): Illuminate\Support\Collection->map()
#5 /var/www/html/lib/pkp/classes/migration/upgrade/v3_5_0/I9771_OrcidMigration.php(51): PKP\migration\upgrade\v3_5_0\I9771_OrcidMigration->movePluginSettings()
#6 /var/www/html/lib/pkp/classes/install/Installer.php(445): PKP\migration\upgrade\v3_5_0\I9771_OrcidMigration->up()
#7 /var/www/html/lib/pkp/classes/install/Installer.php(298): PKP\install\Installer->executeAction()
#8 /var/www/html/lib/pkp/classes/install/Installer.php(207): PKP\install\Installer->executeInstaller()
#9 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.php(97): PKP\install\Installer->execute()
#10 /var/www/html/lib/pkp/classes/cliTool/UpgradeTool.php(70): PKP\cliTool\UpgradeTool->upgrade()
#11 /var/www/html/tools/upgrade.php(22): PKP\cliTool\UpgradeTool->execute()
#12 {main}
  thrown in /var/www/html/lib/pkp/classes/migration/upgrade/v3_5_0/I9771_OrcidMigration.php on line 224

Right now I have the ORCiD plugin configured in config.inc.php site-wide like this:

;;;;;;;;;
; ORCID ;
;;;;;;;;;

[orcid]

api_url = https://orcid.org/
client_id = APP-myappid
client_secret = mysecret

It works correctly, although I had to manually disable it on the “main” site, and then enable it on each journal page, as it would otherwise break the site-wide registration page.

Hi @SquishyLeaf,

The api_url setting needs to be one of the following (exactly):

  • https://pub.orcid.org/ (public API, production)
  • https://orcid.org/ (public API, production)
  • https://pub.sandbox.orcid.org/ (public API, sandbox)
  • https://sandbox.orcid.org/ (public API, sandbox)
  • https://api.orcid.org/ (member API, production)
  • https://api.sandbox.orcid.org/ (member API, sandbox)

Regards,
Alec Smecher
Public Knowledge Project Team

Hi Alec,

Thanks. I tried both https://orcid.org/ (as mentioned in my original post), and https://pub.orcid.org/ and both resulted in the same error.

I looked at the apiUrlToApiType(string $apiUrl): string function mentioned in the error, and when it’s called, the $apiUrl is an empty string. I could hardwire it to return 'publicProduction', but I’m not sure if this wouldn’t cause some issues later.