An uncaught exception in the middle of generating checkoutConfig causes the block to not render and therefore the checkout frontend displays a blank screen. Adyen causes an exception like this by trying to load icon names dynamically. Missing icons include applepay, googlepay and sub-variants like mc_googlepay, mc_applepay, visa_googlepay, etc. Semi-related to another issue I raised https://github.com/Adyen/adyen-php-api-library/issues/438 - I would suggest a proper fix for this involves a CI job which for each build pulls a list of all possible card types directly from the Adyen API and checks these files / functions, instead of waiting for users who use those payment methods to get in touch!
Magento\Framework\View\Asset\File\NotFoundException: Unable to resolve the source file for Adyen_Payment::images/logos/mc_googlepay_small.png'
#0 vendor/adyen/module-payment/Helper/Data.php(1660): Magento\Framework\View\Asset\File->getSourceFile()
#1 vendor/adyen/module-payment/Model/Ui/PaymentMethodUiComponentProvider.php(68): Adyen\Payment\Helper\Data->getVariantIcon()
I suppose it will be practically quite difficult for you to cut a release every time the adyen backend implements a new payment type, and users might not upgrade anyway; breaking the checkout is a bad way to handle this. Here's a fix, with apologies that I don't have time to mess about cloning and applying it to raise a PR properly:
--- Helper/Data.php
+++ Helper/Data.php
@@ -34,6 +34,7 @@
use Magento\Framework\Locale\ResolverInterface;
use Magento\Framework\Module\ModuleListInterface;
use Magento\Framework\Serialize\SerializerInterface;
+use Magento\Framework\View\Asset\File\NotFoundException;
use Magento\Framework\View\Asset\Repository;
use Magento\Framework\View\Asset\Source;
use Magento\Sales\Api\OrderManagementInterface;
@@ -1656,7 +1657,13 @@
*/
public function getVariantIcon($variant)
{
- $asset = $this->createAsset(sprintf("Adyen_Payment::images/logos/%s_small.png", $variant));
- list($width, $height) = getimagesize($asset->getSourceFile());
+ try {
+ $asset = $this->createAsset(sprintf("Adyen_Payment::images/logos/%s_small.png", $variant));
+ $sourceFile = $asset->getSourceFile();
+ } catch (NotFoundException $exception) {
+ $asset = $this->createAsset("Adyen_Payment::images/logos/unknown_small.png");
+ $sourceFile = $asset->getSourceFile();
+ }
+ list($width, $height) = getimagesize($sourceFile);
$icon = [
'url' => $asset->getUrl(),
Thank you for raising this issue and creating a patch for it. We will try to reproduce the issue and apply your patch with a PR. Afterwards, we will update you.
An uncaught exception in the middle of generating
checkoutConfig
causes the block to not render and therefore the checkout frontend displays a blank screen. Adyen causes an exception like this by trying to load icon names dynamically. Missing icons includeapplepay
,googlepay
and sub-variants likemc_googlepay
,mc_applepay
,visa_googlepay
, etc. Semi-related to another issue I raised https://github.com/Adyen/adyen-php-api-library/issues/438 - I would suggest a proper fix for this involves a CI job which for each build pulls a list of all possible card types directly from the Adyen API and checks these files / functions, instead of waiting for users who use those payment methods to get in touch!I suppose it will be practically quite difficult for you to cut a release every time the adyen backend implements a new payment type, and users might not upgrade anyway; breaking the checkout is a bad way to handle this. Here's a fix, with apologies that I don't have time to mess about cloning and applying it to raise a PR properly: