Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mollie module breaks the checkout after installation if the API Keys are not configured. #829

Closed
xylodev opened this issue Nov 27, 2024 · 3 comments
Assignees
Labels
Fixed and planned for next release Fix will be included in the next release.

Comments

@xylodev
Copy link

xylodev commented Nov 27, 2024

Describe the bug
After installing Mollie payment module on Magento it breaks rendering checkout JSON configuration when the API key is not provided, even though the module is disabled in admin.

Used versions

  • Magento Version number(eg 2.3.5): 2.4.7-p3
  • Open source/Enterprise/B2b: Open Source
  • Mollie version number (Check configuration): 2.42.0

To Reproduce
Prerequisites:

  1. Make sure that Mollie is disabled (Stores > Configuration > Mollie > General > Version > Enabled set to No).
  2. Make sure the API keys are empty (Stores > Configuration > Mollie > General > API Details > Test API Key and Live API Key). The admin configuration form implements validation for those fields, so in case they are not empty, they have to be removed from the database directly: DELETE FROM core_config_data WHERE path in ('payment/mollie_general/apikey_test', 'payment/mollie_general/apikey_live'); to mimic vanilla installation.

Steps to reproduce the behavior:

  1. Put any product to the cart.
  2. Go to the checkout.

Expected behavior
The checkout page is rendered and the customer can proceed to the next step.

Actual behavior
The checkout page doesn't render correctly, there's only header and footer, but no content.

Additional context
During rendering the checkout config by Magento\Checkout\Model\CompositeConfigProvider->getConfig() method Mollie module throws an exception, which breaks the whole process. Stack trace:

Exception #0 (Mollie\Api\Exceptions\ApiException): [2024-11-27T10:49:55+0000] Invalid API key: ''. An API key must start with 'test_' or 'live_' and must be at least 30 characters long.

#1 Mollie\Payment\Service\Mollie\MollieApiClient->loadByApiKey() called at [vendor/mollie/magento2/Service/Mollie/MollieApiClient.php:60]
#2 Mollie\Payment\Service\Mollie\MollieApiClient->loadByStore() called at [vendor/mollie/magento2/Model/MollieConfigProvider.php:226]
#3 Mollie\Payment\Model\MollieConfigProvider->getIssuers() called at [vendor/mollie/magento2/Model/MollieConfigProvider.php:180]
#4 Mollie\Payment\Model\MollieConfigProvider->getConfig() called at [vendor/magento/module-checkout/Model/CompositeConfigProvider.php:39]
#5 Magento\Checkout\Model\CompositeConfigProvider->getConfig() called at [vendor/magento/module-checkout/Block/Onepage.php:106]
#6 Magento\Checkout\Block\Onepage->getCheckoutConfig() called at [generated/code/Magento/Checkout/Block/Onepage/Interceptor.php:41]
#7 Magento\Checkout\Block\Onepage\Interceptor->getCheckoutConfig() called at [vendor/magento/module-checkout/Block/Onepage.php:128]
#8 Magento\Checkout\Block\Onepage->getSerializedCheckoutConfig() called at [generated/code/Magento/Checkout/Block/Onepage/Interceptor.php:59]
#9 Magento\Checkout\Block\Onepage\Interceptor->getSerializedCheckoutConfig() called at [vendor/magento/module-checkout/view/frontend/templates/onepage.phtml:27]
#10 include() called at [vendor/magento/framework/View/TemplateEngine/Php.php:67]
#11 Magento\Framework\View\TemplateEngine\Php->render() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#12 Magento\Framework\View\TemplateEngine\Php\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#13 Magento\Framework\View\TemplateEngine\Php\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#14 Magento\Framework\View\TemplateEngine\Php\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/View/TemplateEngine/Php/Interceptor.php:23]
#15 Magento\Framework\View\TemplateEngine\Php\Interceptor->render() called at [vendor/magento/framework/View/Element/Template.php:263]
#16 Magento\Framework\View\Element\Template->fetchView() called at [generated/code/Magento/Checkout/Block/Onepage/Interceptor.php:122]
#17 Magento\Checkout\Block\Onepage\Interceptor->fetchView() called at [vendor/magento/framework/View/Element/Template.php:293]
#18 Magento\Framework\View\Element\Template->_toHtml() called at [vendor/magento/framework/View/Element/AbstractBlock.php:1128]
#19 Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element\{closure}() called at [vendor/magento/framework/View/Element/AbstractBlock.php:1132]
#20 Magento\Framework\View\Element\AbstractBlock->_loadCache() called at [vendor/magento/framework/View/Element/AbstractBlock.php:676]
#21 Magento\Framework\View\Element\AbstractBlock->toHtml() called at [generated/code/Magento/Checkout/Block/Onepage/Interceptor.php:329]
#22 Magento\Checkout\Block\Onepage\Interceptor->toHtml() called at [vendor/magento/framework/View/Layout.php:578]
#23 Magento\Framework\View\Layout->_renderBlock() called at [vendor/magento/framework/View/Layout.php:555]
#24 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#25 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#26 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#27 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:606]
#28 Magento\Framework\View\Layout->_renderContainer() called at [vendor/magento/framework/View/Layout.php:557]
#29 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#30 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#31 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#32 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:606]
#33 Magento\Framework\View\Layout->_renderContainer() called at [vendor/magento/framework/View/Layout.php:557]
#34 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#35 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#36 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#37 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:606]
#38 Magento\Framework\View\Layout->_renderContainer() called at [vendor/magento/framework/View/Layout.php:557]
#39 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#40 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#41 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#42 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:606]
#43 Magento\Framework\View\Layout->_renderContainer() called at [vendor/magento/framework/View/Layout.php:557]
#44 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#45 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#46 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#47 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:606]
#48 Magento\Framework\View\Layout->_renderContainer() called at [vendor/magento/framework/View/Layout.php:557]
#49 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#50 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#51 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#52 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:606]
#53 Magento\Framework\View\Layout->_renderContainer() called at [vendor/magento/framework/View/Layout.php:557]
#54 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#55 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#56 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#57 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:606]
#58 Magento\Framework\View\Layout->_renderContainer() called at [vendor/magento/framework/View/Layout.php:557]
#59 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:149]
#60 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [vendor/magento/framework/View/Layout.php:510]
#61 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:140]
#62 Magento\Framework\View\Layout\Interceptor->renderElement() called at [vendor/magento/framework/View/Layout.php:975]
#63 Magento\Framework\View\Layout->getOutput() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#64 Magento\Framework\View\Layout\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#65 Magento\Framework\View\Layout\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#66 Magento\Framework\View\Layout\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:347]
#67 Magento\Framework\View\Layout\Interceptor->getOutput() called at [vendor/magento/framework/View/Result/Page.php:260]
#68 Magento\Framework\View\Result\Page->render() called at [vendor/magento/framework/View/Result/Layout.php:171]
#69 Magento\Framework\View\Result\Layout->renderResult() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#70 Magento\Framework\View\Result\Page\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#71 Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#72 Magento\Framework\View\Result\Page\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/View/Result/Page/Interceptor.php:95]
#73 Magento\Framework\View\Result\Page\Interceptor->renderResult() called at [vendor/magento/framework/App/Http.php:120]
#74 Magento\Framework\App\Http->launch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#75 Magento\Framework\App\Http\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#76 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/module-application-performance-monitor/Plugin/ApplicationPerformanceMonitor.php:38]
#77 Magento\ApplicationPerformanceMonitor\Plugin\ApplicationPerformanceMonitor->aroundLaunch() called at [vendor/magento/framework/Interception/Interceptor.php:135]
#78 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/msp/adminrestriction/Plugin/AppInterfacePlugin.php:138]
#79 MSP\AdminRestriction\Plugin\AppInterfacePlugin->aroundLaunch() called at [vendor/magento/framework/Interception/Interceptor.php:135]
#80 Magento\Framework\App\Http\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#81 Magento\Framework\App\Http\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:23]
#82 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:264]
#83 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:107]
@Frank-Magmodules Frank-Magmodules changed the title Mollie module breaks the checkout after installation Mollie module breaks the checkout after installation if the API Keys are not configured. Nov 28, 2024
@Frank-Magmodules Frank-Magmodules added the Fixed and planned for next release Fix will be included in the next release. label Nov 28, 2024
@Frank-Magmodules
Copy link
Collaborator

Hi @xylodev,

Thank you for opening this issue! We’ve already prepared a solution that will be included in the upcoming release on Monday. I’ll follow up on this ticket as soon as the plugin is released.

Looking ahead, we’re adjusting our release process slightly. Starting next week, we’ll push Pull Requests to this repository immediately after they’re finalized on our end. This way, if needed, you’ll have the option to grab the PR directly without waiting for the official release.

I’ll keep this issue open for now and update you once the version with the fix is available.
Thanks again for bringing this to our attention!

@Frank-Magmodules Frank-Magmodules self-assigned this Nov 28, 2024
@jakwinkler
Copy link

I've run into the same issue, lucky we have staging sites before release anything to production.
Imho, you should fix your integration tests, as it seems they do not test if the API keys are not defined

@Frank-Magmodules
Copy link
Collaborator

Hi @xylodev,

As you may have noticed, we addressed this issue in the latest release.
Thank you for bringing it to our attention and for sharing the detailed debug report—it was a big help!

We also took @jakwinkler’s feedback into account and added an integration test to prevent similar issues in the future.

I’ll go ahead and close this issue for now, but feel free to comment or reopen it if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Fixed and planned for next release Fix will be included in the next release.
Projects
None yet
Development

No branches or pull requests

3 participants