MultiSafepay / magento2

MultiSafepay plugin for Magento 2
Open Software License 3.0
19 stars 8 forks source link

Sometimes error: IssuerListing::getIssuers(): Return value must be of type array, null returned #41

Closed JoostWan closed 1 year ago

JoostWan commented 1 year ago

Describe the bug Sometimes the checkout gives an error. This is the stack trace. We used the latest version 2.21.0 and Magento 2.4.4-2 with PHP 8.

It looks like the error is coming from the new payment method getIssuersByGatewayCode('mybank') but the method is disabled. Maybe the request to MSP gives sometimes no data for this method. It looks like it started at 22 oct.

[2022-10-23T11:39:30.586134+00:00] main.CRITICAL: TypeError: MultiSafepay\Api\Issuers\IssuerListing::getIssuers(): Return value must be of type array, null returned in /var/domains/domein.nl/releases/20221021081130/vendor/multisafepay/php-sdk/src/Api/Issuers/IssuerListing.php:34
Stack trace:
#0 /var/domains/domein.nl/releases/20221021081130/vendor/multisafepay/php-sdk/src/Api/IssuerManager.php(33): MultiSafepay\Api\Issuers\IssuerListing->getIssuers()
#1 /var/domains/domein.nl/releases/20221021081130/vendor/multisafepay/magento2-core/Model/Ui/GenericConfigProvider.php(324): MultiSafepay\Api\IssuerManager->getIssuersByGatewayCode('mybank')
#2 /var/domains/domein.nl/releases/20221021081130/vendor/multisafepay/magento2-core/Model/Ui/Gateway/MyBankConfigProvider.php(40): MultiSafepay\ConnectCore\Model\Ui\GenericConfigProvider->getIssuers()
#3 /var/domains/domein.nl/releases/20221021081130/vendor/multisafepay/magento2-frontend/Plugin/Checkout/Model/CompositeConfigProvider.php(51): MultiSafepay\ConnectCore\Model\Ui\Gateway\MyBankConfigProvider->getConfig()
#4 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(146): MultiSafepay\ConnectFrontend\Plugin\Checkout\Model\CompositeConfigProvider->afterGetConfig(Object(Magento\Checkout\Model\CompositeConfigProvider\Interceptor), Array)
#5 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->Magento\Framework\Interception\{closure}()
#6 /var/domains/domein.nl/releases/20221021081130/generated/code/Magento/Checkout/Model/CompositeConfigProvider/Interceptor.php(23): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->___callPlugins('getConfig', Array, Array)
#7 /var/domains/domein.nl/releases/20221021081130/vendor/magento/module-checkout/Block/Onepage.php(106): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->getConfig()
#8 /var/domains/domein.nl/releases/20221021081130/vendor/magento/module-checkout/Block/Onepage.php(128): Magento\Checkout\Block\Onepage->getCheckoutConfig()
#9 /var/domains/domein.nl/releases/20221021081130/var/view_preprocessed/pub/static/vendor/magento/module-checkout/view/frontend/templates/onepage.phtml(6): Magento\Checkout\Block\Onepage->getSerializedCheckoutConfig()
#10 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/TemplateEngine/Php.php(71): include('/var/domains/mi...')
#11 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Checkout\Block\Onepage), '/var/domains/mi...', Array)
#12 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\TemplateEngine\Php\Interceptor->___callParent('render', Array)
#13 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\TemplateEngine\Php\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Checkout\Block\Onepage), '/var/domains/mi...', Array)
#14 /var/domains/domein.nl/releases/20221021081130/generated/code/Magento/Framework/View/TemplateEngine/Php/Interceptor.php(23): Magento\Framework\View\TemplateEngine\Php\Interceptor->___callPlugins('render', Array, Array)
#15 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Element/Template.php(263): Magento\Framework\View\TemplateEngine\Php\Interceptor->render(Object(Magento\Checkout\Block\Onepage), '/var/domains/mi...', Array)
#16 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Element/Template.php(293): Magento\Framework\View\Element\Template->fetchView('/var/domains/mi...')
#17 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Element/AbstractBlock.php(1095): Magento\Framework\View\Element\Template->_toHtml()
#18 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Element/AbstractBlock.php(1099): Magento\Framework\View\Element\AbstractBlock->Magento\Framework\View\Element\{closure}()
#19 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Element/AbstractBlock.php(660): Magento\Framework\View\Element\AbstractBlock->_loadCache()
#20 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(578): Magento\Framework\View\Element\AbstractBlock->toHtml()
#21 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(555): Magento\Framework\View\Layout->_renderBlock('checkout.root')
#22 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement('checkout.root')
#23 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement('checkout.root', false)
#24 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('content', false)
#25 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement('content')
#26 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement('content', false)
#27 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('main', false)
#28 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement('main')
#29 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement('main', false)
#30 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('columns', false)
#31 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement('columns')
#32 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement('columns', false)
#33 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('main.content', false)
#34 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement('main.content')
#35 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement('main.content', false)
#36 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('page.wrapper', false)
#37 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement('page.wrapper')
#38 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(606): Magento\Framework\View\Layout->renderElement('page.wrapper', false)
#39 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(557): Magento\Framework\View\Layout->_renderContainer('root', false)
#40 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(510): Magento\Framework\View\Layout->renderNonCachedElement('root')
#41 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Layout.php(975): Magento\Framework\View\Layout->renderElement('root')
#42 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Layout->getOutput()
#43 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Layout\Interceptor->___callParent('getOutput', Array)
#44 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Layout\Interceptor->Magento\Framework\Interception\{closure}()
#45 /var/domains/domein.nl/releases/20221021081130/generated/code/Magento/Framework/View/Layout/Interceptor.php(41): Magento\Framework\View\Layout\Interceptor->___callPlugins('getOutput', Array, Array)
#46 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Result/Page.php(260): Magento\Framework\View\Layout\Interceptor->getOutput()
#47 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/View/Result/Layout.php(171): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor))
#48 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#49 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array)
#50 /var/domains/domein.nl/releases/20221021081130/app/code/Magezon/Core/Plugin/View/Result/Layout.php(24): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#51 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(135): Magezon\Core\Plugin\View\Result\Layout->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#52 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#53 /var/domains/domein.nl/releases/20221021081130/generated/code/Magento/Framework/View/Result/Page/Interceptor.php(23): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, NULL)
#54 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/App/Http.php(120): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#55 /var/domains/domein.nl/releases/20221021081130/vendor/magento/framework/App/Bootstrap.php(264): Magento\Framework\App\Http->launch()
#56 /var/domains/domein.nl/releases/20221021081130/pub/index.php(30): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#57 {main} [] []
emetik commented 1 year ago

Same issue for me using Magento 2.4.3-p3 / PHP 7.4 on a multistore instance. The error occurs only on a certain store (the second in my case) I solved this issue by running a downgrade of the module :
composer require multisafepay/magento2:2.20.1

main.CRITICAL: TypeError: explode() expects parameter 2 to be string, null given in /var/www/vhosts/mysite/src/vendor/multisafepay/magento2-core/Model/Ui/Gateway/EinvoicingConfigProvider.php:57 Stack trace:

0 /var/www/vhosts/mysite/src/vendor/multisafepay/magento2-core/Model/Ui/Gateway/EinvoicingConfigProvider.php(57): explode()

1 /var/www/vhosts/mysite/src/vendor/multisafepay/magento2-core/Model/Ui/Gateway/EinvoicingConfigProvider.php(42): MultiSafepay\ConnectCore\Model\Ui\Gateway\EinvoicingConfigProvider->getCheckoutFields()

2 /var/www/vhosts/mysite/src/vendor/multisafepay/magento2-frontend/Plugin/Checkout/Model/CompositeConfigProvider.php(51): MultiSafepay\ConnectCore\Model\Ui\Gateway\EinvoicingConfigProvider->getConfig()

3 /var/www/vhosts/mysite/src/vendor/magento/framework/Interception/Interceptor.php(146): MultiSafepay\ConnectFrontend\Plugin\Checkout\Model\CompositeConfigProvider->afterGetConfig()

4 /var/www/vhosts/mysite/src/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->Magento\Framework\Interception{closure}()

5 /var/www/vhosts/mysite/src/generated/code/Magento/Checkout/Model/CompositeConfigProvider/Interceptor.php(23): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->___callPlugins()

6 /var/www/vhosts/mysite/src/vendor/magento/module-checkout/Block/Onepage.php(106): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->getConfig()

atty31 commented 1 year ago

I can also confirm this issue. Getting the same on Magento 2.4.4 and MSP version: 2.21.0. Please prioritize this.

JoostWan commented 1 year ago

@atty31 for now you can use this patch

@package multisafepay/magento2-core

## See https://github.com/MultiSafepay/magento2/issues/41

diff --git a/Model/Ui/GenericConfigProvider.php b/Model/Ui/GenericConfigProvider.php
--- a/Model/Ui/GenericConfigProvider.php    
+++ b/Model/Ui/GenericConfigProvider.php    (date 1666525964235)
@@ -321,6 +321,11 @@

         if ($multiSafepaySdk = $this->getSdk()) {
             try {
+
+                if ($this->getGatewayCode() == 'MYBANK') {
+                    return $issuers;
+                }
+
                 $issuerListing = $multiSafepaySdk->getIssuerManager()->getIssuersByGatewayCode($this->getGatewayCode());
                 foreach ($issuerListing as $issuer) {
                     $issuers[] = [
atty31 commented 1 year ago

Thanks @JoostWan , i will let you know if it doesn't work

vinodsowdagar commented 1 year ago

Hi @JoostWan , @emetik and @atty31 ,

Thank you for the reports. First of all i would like to point out that the original issue which was addressed by @JoostWan was caused due to an unforeseen case in our API where retrieving the issuers can return an empty result, where our PHP SDK always expected something to be there. This issue has now been fixed as well in the API as in the PHP SDK.

Our Magento module has been updated accordingly as well: https://github.com/MultiSafepay/magento2/releases/tag/2.21.1

Secondly, we are aware that it is not an ideal situation where we are trying to retrieve issuers for the 'MyBank' payment method, even if the payment method has been turned off. I have created an internal ticket for this to be improved. The next release from here on will make sure to have a check first in the config if the payment method has been enabled, before retrieving issuers related to that specific payment method.

At last, i want to point out that the issue @emetik is experiencing is actually a different issue related with E-invoicing which was already addressed by someone else: https://github.com/MultiSafepay/magento2/issues/38

This issue has been fixed in the latest version as well.

For now i am closing this issue. If there are more questions in the future, please feel free to reopen this or create a new one.