Giter VIP home page Giter VIP logo

magento2's People

Contributors

danielcivit avatar jissereitsma avatar ronald-multisafepay avatar stanislau-multisafepay avatar vinodsowdagar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

magento2's Issues

Add fetch transaction info button back

Describe the bug
See: MultiSafepay/magento2-core#7

This adds back the 'Fetch' button the previous plugin did have on transaction screen in Magento.

To Reproduce

  • Open an order
  • Click transactions tab
  • See that the fetch button is missing

Expected behavior

  • Open an order
  • Click transactions tab
  • The fetch button is present

Screenshots
133225117-66fd771d-2984-4d37-9d5a-cfcba0696128

Explode on NULL -> EinvoicingConfigProvider->getCheckoutFields()

Describe the bug
Cart / checkout error after updating plugin v2.5 -> 2.21

Cart just shows blank screen
Checkout shows: An error has happened during application run. See exception log for details.

[2022-10-11 09:00:37] main.CRITICAL: TypeError: explode() expects parameter 2 to be string, null given in /var/domains/X.com/application/vendor/multisafepay/magento2-core/Model/Ui/Gateway/EinvoicingConfigProvider.php:57
Stack trace:
#0 /var/domains/X.com/application/vendor/multisafepay/magento2-core/Model/Ui/Gateway/EinvoicingConfigProvider.php(57): explode(',', NULL)
#1 /var/domains/X.com/application/vendor/multisafepay/magento2-core/Model/Ui/Gateway/EinvoicingConfigProvider.php(42): MultiSafepay\ConnectCore\Model\Ui\Gateway\EinvoicingConfigProvider->getCheckoutFields()
#2 /var/domains/X.com/application/vendor/multisafepay/magento2-frontend/Plugin/Checkout/Model/CompositeConfigProvider.php(51): MultiSafepay\ConnectCore\Model\Ui\Gateway\EinvoicingConfigProvider->getConfig()
#3 /var/domains/X.com/application/vendor/magento/framework/Interception/Interceptor.php(146): MultiSafepay\ConnectFrontend\Plugin\Checkout\Model\CompositeConfigProvider->afterGetConfig(Object(Magento\Checkout\Model\CompositeConfigProvider\Interceptor), Array)
#4 /var/domains/X.com/application/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->Magento\Framework\Interception\{closure}()
#5 /var/domains/X.com/application/generated/code/Magento/Checkout/Model/CompositeConfigProvider/Interceptor.php(23): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->___callPlugins('getConfig', Array, Array)
#6 /var/domains/X.com/application/vendor/magento/module-checkout/Block/Onepage.php(106): Magento\Checkout\Model\CompositeConfigProvider\Interceptor->getConfig()
#7 /var/domains/X.com/application/vendor/magento/module-checkout/Block/Onepage.php(128): Magento\Checkout\Block\Onepage->getCheckoutConfig()
#8 /var/domains/X.com/application/vendor/magento/module-checkout/view/frontend/templates/onepage.phtml(27): Magento\Checkout\Block\Onepage->getSerializedCheckoutConfig()

To Reproduce
Steps to reproduce the behavior:

  1. Magento 2.4.2, MSP plugin v2.5
  2. Update to v2.2.1
  3. Visit cart or checkout page

Additional context
Updated the plugin on a system with an old version of the plugin 2.5:
composer update multisafepay/magento2 --with-dependencies
Updated without any errors.

Compile error Impossible to process constructor argument Parameter

When we run bin/magento setup:di:compile on a 2.4.1 install we get the following error when MSI is disabled (Composer replace all the MSI packages).

Compilation was started.
Area configuration aggregation... 5/9 [===============>------------]  55% 1 min 206.0 MiB
In ClassReader.php line 45:
                                                                                                                                                                                                               
  Impossible to process constructor argument Parameter #0 [ <required> Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory $itemToSellFactory ] of MultiSafepay\ConnectMSI\Model\StockReducer class  
                                                                                                                                                                                                               

In ClassReader.php line 34:
                                                                                      
  Class Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory does not exist  
                                                                                      

setup:di:compile

Allow setting a separate order status for partially refunded orders, just like in Magento 1

Is your feature request related to a problem? Please describe.
When an order is partially refunded, it would be nice to be able to display a separate order status which shows that an order is partially refunded. This also works better for accounting software used by webshops, plus the merchant can easily see that an order is partially refunded.

Describe the solution you'd like
Create configuration settings which allow specifying a separate order status for partially refunded orders, just like the way it used to be in Magento 1.

Describe alternatives you've considered
N/A

Additional context
In Magento 1 this was available in the configuration:
image

Order stays on pending payment

Describe the bug
Order stays on Pending Payment in local dev environment.

To Reproduce
Steps to reproduce the behavior:

  1. Entered test api key
  2. Enabled iDeal
  3. Order a product
  4. After submit it forwards to the MSP testmerchant environment.
  5. Select 'Complete'
  6. It returns to the success page.

Expected behavior
Order should be on 'processing' instead of 'pending payment'. Full amount is still due.

Desktop (please complete the following information):
Magento 2.3.5-p1.
MSP 2.14.2

Additional context
MSI is disabled. I have installed the full package through composer. ConnectMSI is disabled.
I have tried enabling/disabling ConnectCatalogInventory. Does not seem to make a difference.

MSP log entry:
[2021-11-04 15:25:29] MultiSafepay.DEBUG: (Order ID: 2000000380) User redirected to the following page: https://testpayv2.multisafepay.com/simulator/ideal?trxid=4442569319105622&ideal=prob&issuerid=0021&merchantReturnURL=https%3A%2F%2Ftestpay%2Emultisafepay%2Ecom%2Fdirect%2Fcomplete%2F%3Fmspid%3D5087765 [] []
[2021-11-04 15:25:34] MultiSafepay.DEBUG: (Order ID: 2000000380) User redirected to the success page. [] []

Am I missing something? If not, where can I start to debug this?

Cannot create online refunds

Describe the bug
Getting Error: Call to a member function setMethodCode(), while creating a refund
Magento: 2.4.4
MSP version: 2.21.0

To Reproduce

  1. Go to Order -> Invoices
  2. Press the credit memo button
  3. Make sure the return to stock is checked
  4. Press the refund button
  5. Exception is thrown

Expected behavior
Credit memo should be created

Additional context
main.CRITICAL: Error: Call to a member function setMethodCode() on null in /data/web/magento2/vendor/multisafepay/magento2-core/Gateway/Http/Client/GenericGatewayRefundClient.php:62 Stack trace: #0 /data/web/magento2/vendor/magento/module-payment/Gateway/Command/GatewayCommand.php(106): MultiSafepay\ConnectCore\Gateway\Http\Client\GenericGatewayRefundClient->placeRequest() #1 /data/web/magento2/vendor/multisafepay/magento2-core/Model/Method/GenericAdapter.php(527): Magento\Payment\Gateway\Command\GatewayCommand->execute() #2 /data/web/magento2/vendor/multisafepay/magento2-core/Model/Method/GenericAdapter.php(451): MultiSafepay\ConnectCore\Model\Method\GenericAdapter->executeCommand() #3 /data/web/magento2/vendor/magento/module-sales/Model/Order/Payment.php(699): MultiSafepay\ConnectCore\Model\Method\GenericAdapter->refund() #4 /data/web/magento2/generated/code/Magento/Sales/Model/Order/Payment/Interceptor.php(221): Magento\Sales\Model\Order\Payment->refund() #5 /data/web/magento2/vendor/magento/module-sales/Model/Order/Creditmemo/RefundOperation.php(118): Magento\Sales\Model\Order\Payment\Interceptor->refund() #6 /data/web/magento2/vendor/magento/module-sales/Model/Order/RefundAdapter.php(39): Magento\Sales\Model\Order\Creditmemo\RefundOperation->execute() #7 /data/web/magento2/vendor/magento/module-sales/Model/Service/CreditmemoService.php(167): Magento\Sales\Model\Order\RefundAdapter->refund() #8 /data/web/magento2/vendor/magento/module-sales/Controller/Adminhtml/Order/Creditmemo/Save.php(119): Magento\Sales\Model\Service\CreditmemoService->refund() #9 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save->execute() #10 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->___callParent() #11 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->Magento\Framework\Interception\{closure}() #12 /data/web/magento2/generated/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save/Interceptor.php(23): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->___callPlugins() #13 /data/web/magento2/vendor/magento/framework/App/Action/Action.php(111): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->execute() #14 /data/web/magento2/vendor/magento/module-backend/App/AbstractAction.php(151): Magento\Framework\App\Action\Action->dispatch() #15 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Backend\App\AbstractAction->dispatch() #16 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->___callParent() #17 /data/web/magento2/vendor/magento/module-backend/App/Action/Plugin/Authentication.php(145): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->Magento\Framework\Interception\{closure}() #18 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch() #19 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->Magento\Framework\Interception\{closure}() #20 /data/web/magento2/generated/code/Magento/Sales/Controller/Adminhtml/Order/Creditmemo/Save/Interceptor.php(32): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->___callPlugins() #21 /data/web/magento2/vendor/magento/framework/App/FrontController.php(245): Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Save\Interceptor->dispatch() #22 /data/web/magento2/vendor/magento/framework/App/FrontController.php(212): Magento\Framework\App\FrontController->getActionResponse() #23 /data/web/magento2/vendor/magento/framework/App/FrontController.php(147): Magento\Framework\App\FrontController->processRequest() #24 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch() #25 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent() #26 /data/web/magento2/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() #27 /data/web/magento2/generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins() #28 /data/web/magento2/vendor/magento/framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch() #29 /data/web/magento2/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch() #30 /data/web/magento2/vendor/magento/framework/App/Bootstrap.php(264): Magento\Framework\App\Http\Interceptor->launch() #31 /data/web/magento2/pub/index.php(89): Magento\Framework\App\Bootstrap->run() #32 {main} [] []

Validate API key button uses default store view always

Describe the bug
Pressing validate API key always yields a check for store id = 0 instead of the storeview of the current selected scope

To Reproduce
Steps to reproduce the behavior:

  1. Leave API key on default store view empty
  2. Go to a non default storeview configuration
  3. Enter a valid API key
  4. Click validate API key
  5. Error is shown stating the API key is invalid

Expected behavior
The API key is shown as valid

Cause
https://github.com/MultiSafepay/magento2-adminhtml/blob/master/Controller/Adminhtml/Api/Validate.php#L87 is using a store_id parameter, but that parameter is not passed here:
https://github.com/MultiSafepay/magento2-adminhtml/blob/master/Block/Adminhtml/Config/ValidateApiKeyButton.php#L72

Payment methods missing after cancelled order

Describe the bug
When customers as guest return during checkout without a successful payment, we see that various payment methods are no longer visible at the checkout. Payment methods that are available for all customer groups will remain visible, but payment methods for specific customer groups will no longer be visible.

To Reproduce
Steps to reproduce the behavior:

  1. Enable different MSP Payment methods
  2. Set 'Guest' and 'General' for 'Specific Customer Groups' for one or multiple methods
  3. Add a product to the cart as a guest
  4. Go to the checkout
  5. You see all payment methods
  6. On the MSP payment page select 'Cancelled' as status
  7. Return to the shop
  8. Go back to the checkout

Expected behavior
Payment methods that are visible for guests are still visible the second time.

Desktop (please complete the following information):

  • OS: iOS

  • Browser: Chrome

  • Version: 109.0.5414.87

  • Magento version: 2.4.4-p2

  • PHP: 8.1

  • MultiSafepay version: 2.22.0

Additional context
There is a difference inside \MultiSafepay\ConnectCore\Gateway\Validator\CustomerGroupValidator::validate when visiting the checkout for the second time. The value from $quote->getCustomerGroupId() is different.

First time visiting the checkout I see that the quote field 'customer_group_id' = '0'. But the second time the value is different ('customer_group_id' = 'null).

Translation not working for error messages

Describe the bug
Due to line wrapping, there are now multiple spaces/tabs in translatable strings, causing the translation to fail. Following is one example, but there could be more

To Reproduce
See for example vendor/multisafepay/magento2-core/Observer/OrderPlaceAfterObserver.php:

  • Line 88/89
  • Line 93/94
  • Line 99/100
  • Line 104/105

Expected behavior
A correctly translatable string

Screenshots
Schermafbeelding 2022-12-21 om 14 48 44

Desktop (please complete the following information):

  • OS: N/A
  • Browser N/A
  • Version N/A

Smartphone (please complete the following information):

  • Device: N/A
  • OS: N/A
  • Browser N/A
  • Version N/A

Additional context
N/A

multisafepay/connect/notification request is returning 302 error

Describe the bug
Request "multisafepay/connect/notification" is returning 302 error

To Reproduce
Steps to reproduce the behavior:

  1. Place an order
  2. I see this log on access.log: 185.99.129.254 - - [18/May/2023:14:09:12 +0200] "POST /fr/multisafepay/connect/notification?transactionid=2000029590&timestamp=1684411752 HTTP/1.1" 302 0 "-" "Mozilla/5.0 (X11; Debian; Linux x86_64; rv:33.0) Gecko/20100101\x22)" "-"
  3. Order keeps in pending payment

Expected behavior
Order would pass to processing status

Desktop (please complete the following information):

  • OS: Mac
  • Browser: Chrome
  • Magento 2.4.5-p2
  • multisafepay/magento2: 2.1.0

Payment link for this transaction

Magento version: 2.3.7
MultiSafepay version: 2.10.1

If a order is created or edited via the admin the "Payment link for this transaction" that is made does not specify the store front in the "multisafepay/connect/notificatio" url for the successful payment notification.

Back-end order:
https://test.com/multisafepay/connect/notification?transactionid=000000207&timestamp=1624972999

front-end order:
https://test.com/nl/multisafepay/connect/notification?transactionid=000000199&timestamp=1624891497

Order status cancelled due to tax rounding

When an order is placed with cart items the tax is rounded different in Magento / Multisafepay. The totals do not sum up. When this occurs the invoice is not created in Magento.
I suspect this is because we have 9% and 21% items in one order. This only happens for a few specific amounts where the rounding is one cent off.

Steps to reproduce the behavior:

  1. Enable shopping cart items setting in Multisafepay module (with multisafepay/advanced/disable_shopping_cart = 0)
  2. Make shipping 3.95 incl. 21% VAT
  3. Make product 5.95 incl 9% VAT
  4. Put the item 2x in cart ( = 11.90 )
  5. With shipping the cart total is 11.90 + 3.95 = 15.85
  6. When the items are send to Multisafepay the total becomes 15.84 in on the payment page.
  7. Magento can't set the order to processing.

Expected behavior
The right amount is sent to Multisafepay for the cart items.

Screenshots
Right amount in Magento (15.85):
totalsincart

Wrong amount in Multisafepay (15.84):
totalsinmultisafepay

Additional context
I am using Magento 2.4.1 with Multisafepay module 2.11.0. We have had this problem with the missing invoices for a while but I just discovered the rounding difference with the cart items being sent to Multisafepay.
EDIT: I just tested MSP module 2.12.4 - same problem

Multisafepay not enabled but still visible

Describe the bug
We have a Magento 2.4.3 with 2 stores. One where we do use multisafepay and one that is for B2B that should not have these payments available. Version used Multisafepay 2.21.1

To Reproduce
Steps to reproduce the behavior:

  1. Have one Magento 2.4.3, create 2 stores, install Multisafepay
  2. In general you can set Live mode to yes (which works fine) and then when you choose scope -> second store you can can set live mode to No:
    image

Expected behavior
No mutlisafepay payment methods in second store...

Screenshots
If applicable, add screenshots to help explain your problem.

image

The above should not be visible.

Magento 2.4.3 (both p1 and p2) tested with Multisafepay 2.21.1 (will test with 2.22)

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Since this store is quite new to me I'm still investigating if there have been alterations in checkout that could cause this behavior (so far I have found none). But mainly I would expect some enable disable setting maybe so you can have it working for one store and not for the other.

Order status not set on processing for every paid order

A customer is experiencing an issue where for some orders the order status does not get switched to processing after an order is paid, but stays on pending. Setting the order states in the MSP config does not make a difference.

Magento 2.3.6 with:

  •    "multisafepay/magento2-core": "^2.0",
    
  •    "multisafepay/magento2-frontend": "^1.1",
    
  •    "multisafepay/magento2-catalog-inventory": "^1.0",
    
  •    "multisafepay/magento2-adminhtml": "^1.1"
    

Comparing two orders where the status has been changed / not changed, the multisafepay log does not show any difference. Is this a known issue that has been fixed in later versions? Because I have updated the modules, but I am encountering a different (and with more impact) issue there, which I will post in a separate issue.

Order confirmation email is ignoring the gateway override setting.

Describe the bug
Order confirmation gateway override setting "After paid transaction" is ignored if the default is set to after transaction

To Reproduce
Steps to reproduce the behavior:

  1. set the default to after transaction in general settings in de module:
    CleanShot 2022-10-11 at 10 53 44
  2. set override to after paid transaction for the Klarna gateway in this example:
    CleanShot 2022-10-11 at 10 54 57
  3. Place an order on the frontend of the shop and submit the order
  4. You will be redirected to multisafepay but the order confirmation email is already send because of this code:

Service/OrderService.php:

if (in_array($transactionStatus, [
                TransactionStatus::COMPLETED,
                TransactionStatus::INITIALIZED,
                TransactionStatus::RESERVED,
                TransactionStatus::SHIPPED,
            ], true)
            && $this->emailSender->sendOrderConfirmationEmail($order)) {
            $this->logger->logInfoForOrder(
                $orderId,
                __('Order confirmation email after transaction has been sent')->render(),
                Logger::DEBUG
            );
        }

After the order is placed it is pending payment with gateway status Initialised

$this->emailSender->sendOrderConfirmationEmail($order)) is called

Referenced to this file Service/EmailSender.php

$emailTypes = [
      $this->config->getOrderConfirmationEmail()
];

The default setting after transaction is pushed in the array.

then if a gateway override is defined it also pushed in the same array here:

if ($this->gatewayConfig->getValue(Config::OVERRIDE_ORDER_CONFIRMATION_EMAIL)) {
      $emailTypes[] = $this->gatewayConfig->getValue(Config::ORDER_CONFIRMATION_EMAIL) ?? '';
}

Then it checks if the order can be send here:

if (in_array($emailType, $emailTypes, true)) {
       $this->orderSender->send($order);

       return true;
}

An $emailType is not given in the Service/OrderService.php#L174
So after_transaction is used as default for this check en its true in this case when the transaction is placed not paid.

In the log files it shows

[2022-10-11 08:28:23] MultiSafepay.INFO: (Order ID: #############): Payment URL is: https://payv2.multisafepay.com/connect/#############/?lang=nl_NL [] []
[2022-10-11 08:28:23] MultiSafepay.DEBUG: (Order ID: #############) User redirected to the following page: https://payv2.multisafepay.com/connect/#############/?lang=nl_NL [] []
[2022-10-11 08:28:26] MultiSafepay.DEBUG: (Order ID: #############): Order ID has been retrieved from the order [] []
[2022-10-11 08:28:26] MultiSafepay.DEBUG: (Order ID: #############): Transaction data was retrieved: {
    "description": "Bestelling ##############",
    "order_id": "#############",
[2022-10-11 08:28:27] MultiSafepay.DEBUG: (Order ID: #############): Order confirmation email after transaction has been sent [] []

Where the last line is 'Order confirmation email after transaction has been sent' not the one that needs to be logged is: 'Order confirmation email after paid transaction has been sent' in Service/Order/ProcessOrderByTransactionStatus.php#L197

Expected behavior
The override setting that is configured is used instead the default, so the email is send after the order is paid in this case.

Custom fee not being added to the final totals

The total on the Multisafepay page is incorrect because it does not take into account the additional fees introduced by the 3rd party module even if on the website the totals are calculated and displayed correctly.

In cart:
Screenshot 2021-01-27 at 12 50 07

The totals segments:
Screenshot 2021-01-27 at 12 50 48

The total as seen on the Multisafepay page:
Screenshot 2021-01-27 at 12 51 33

Using multisafepay/magento2: 2.3.0 and prince/magento2-extrafeepro 1.0.7.
This was reproduced on a clean Magento 2.3.2 and on a Magento 2.3.6 that contains multiple modules.

Thank you!

Divided by zero error: payment not possible

After upgrading all MSP packages to their newest version I am running into the following error when trying to submit an order.

2021-04-02 08:25:46] MultiSafepay.ERROR: (Order ID: 1000071989) ERROR: Warning: Division by zero in /data/web/magento2/vendor/multisafepay/magento2-core/Model/Api/Builder/OrderRequestBuilder/ShoppingCartBuilder/CustomTotalBuilder.php on line 156 (code: 0, line: 61, file: /data/web/magento2/vendor/magento/framework/App/ErrorHandler.php)

Local dockerbox,
Magento 2.3.6

  •    "multisafepay/magento2-core": "^2.5.0",
    
  •    "multisafepay/magento2-frontend": "^1.6.0",
    
  •    "multisafepay/magento2-catalog-inventory": "^1.0.2",
    
  •    "multisafepay/magento2-adminhtml": "^1.6.0",
    

If needed I can run the file through xdebug, but some pointers on where to start would be helpful.

Change available methods on https://payv2.multisafepay.com/connect/ payment page

In our Magento 2 we can configur Payment gateways to only be visible for particular Custom groups, great! But in order to make them work properly we need to activate them in our merchant.multisafepay.com website settings. Great so far.

But if we create an order for a customer, select as payment method Multisafepay and send the customer the payment link. All payment methods are shown, also the methods we have assigned for a particular customer group. If we disable this, the function will not work in our shop anymore.

so is it possible to A. recognize the customergroup restriction from Magento to https://payv2.multisafepay.com/connect/ or B possible to disable payment methods on https://payv2.multisafepay.com/connect/ only.

Second chance email is not send.

i cant get second chance email for payment after i missed payment for order with testmultisafe account.
How can i auto send email after i missed order payment.. have any idea??

MSP end point should not change the status of On Hold orders.

Is your feature request related to a problem? Please describe.
We installed a module that does some checks based on values on the order and then places that order on "On Hold". But when Multisafepay creates the invoice it moves the order to processing, ignoring the "On Hold" status.

Describe the solution you'd like
When an order is on "On Hold" the module notification endpoint should not update the product status.

Question: Online-Refund when doing a refund in magento via api

Hey :)

I have a question. When doing a refund through magento order via rest/default/V1/order/{orderId}/refund it seems like it does not create a refund for MultiSavepay.

image

If a refund is created through API, I want to automatically send a refund to MultiSavepay. Is that a configuration thing?
The docs do not specifically tell how this is handled (or I am just misunderstanding)
https://docs.multisafepay.com/docs/magento-2#refunds

Thank you for your time

MultiSafepay\ConnectCore\Service\OrderService::canChangePaymentMethod() must be of the type string, null given

I'm not sure if this is new since the latest .1 update, but I'm noticing these errors in our logs. Does this have to do with the public transaction validation perhaps?

We're running Magento 2.4.1, and 2.8.1 of your core MSP module.

Stack trace:
#0 /opt/magento/public_html/vendor/multisafepay/magento2-core/Service/OrderService.php(237): MultiSafepay\ConnectCore\Service\OrderService->canChangePaymentMethod()
#1 /opt/magento/public_html/vendor/multisafepay/magento2-frontend/Controller/Connect/Notification.php(92): MultiSafepay\ConnectCore\Service\OrderService->processOrderTransaction()
#2 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(58): MultiSafepay\ConnectFrontend\Controller\Connect\Notification->execute()
#3 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(138): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callParent()
#4 /opt/magento/public_html/vendor/magento/framework/App/Action/Plugin/ActionFlagNoDispatchPlugin.php(51): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->Magento\Framework\Interception\{closure}()
#5 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Framework\App\Action\Plugin\ActionFlagNoDispatchPlugin->aroundExecute()
#6 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->Magento\Framework\Interception\{closure}()
#7 /opt/magento/public_html/generated/code/MultiSafepay/ConnectFrontend/Controller/Connect/Notification/Interceptor.php(23): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callPlugins()
#8 /opt/magento/public_html/vendor/magento/framework/App/Action/Action.php(111): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->execute()
#9 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\Action\Action->dispatch()
#10 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(138): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callParent()
#11 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->Magento\Framework\Interception\{closure}()
#12 /opt/magento/public_html/generated/code/MultiSafepay/ConnectFrontend/Controller/Connect/Notification/Interceptor.php(32): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callPlugins()
#13 /opt/magento/public_html/vendor/magento/framework/App/FrontController.php(186): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->dispatch()
#14 /opt/magento/public_html/vendor/magento/framework/App/FrontController.php(118): Magento\Framework\App\FrontController->processRequest()
#15 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch()
#16 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent()
#17 /opt/magento/public_html/vendor/magento/module-store/App/FrontController/Plugin/RequestPreprocessor.php(99): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#18 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch()
#19 /opt/magento/public_html/vendor/mirasvit/module-cache-warmer/src/CacheWarmer/Plugin/Debug/OnHitPlugin.php(140): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#20 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Mirasvit\CacheWarmer\Plugin\Debug\OnHitPlugin->aroundAroundDispatch()
#21 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\PageCache\Model\App\FrontController\BuiltinPlugin\Interceptor->Magento\Framework\Interception\{closure}()
#22 /opt/magento/public_html/generated/code/Magento/PageCache/Model/App/FrontController/BuiltinPlugin/Interceptor.php(23): Magento\PageCache\Model\App\FrontController\BuiltinPlugin\Interceptor->___callPlugins()
#23 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Magento\PageCache\Model\App\FrontController\BuiltinPlugin\Interceptor->aroundDispatch()
#24 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#25 /opt/magento/public_html/generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins()
#26 /opt/magento/public_html/vendor/magento/framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch()
#27 /opt/magento/public_html/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch()
#28 /opt/magento/public_html/vendor/magento/framework/App/Bootstrap.php(263): Magento\Framework\App\Http\Interceptor->launch()
#29 /opt/magento/public_html/pub/index.php(40): Magento\Framework\App\Bootstrap->run()
#30 {main} [] []
[2021-05-27 07:18:16] main.CRITICAL: TypeError: Argument 2 passed to MultiSafepay\ConnectCore\Service\OrderService::canChangePaymentMethod() must be of the type string, null given, called in /opt/magento/public_html/vendor/multisafepay/magento2-core/Service/OrderService.php on line 237 and defined in /opt/magento/public_html/vendor/multisafepay/magento2-core/Service/OrderService.php:304
Stack trace:
#0 /opt/magento/public_html/vendor/multisafepay/magento2-core/Service/OrderService.php(237): MultiSafepay\ConnectCore\Service\OrderService->canChangePaymentMethod()
#1 /opt/magento/public_html/vendor/multisafepay/magento2-frontend/Controller/Connect/Notification.php(92): MultiSafepay\ConnectCore\Service\OrderService->processOrderTransaction()
#2 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(58): MultiSafepay\ConnectFrontend\Controller\Connect\Notification->execute()
#3 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(138): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callParent()
#4 /opt/magento/public_html/vendor/magento/framework/App/Action/Plugin/ActionFlagNoDispatchPlugin.php(51): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->Magento\Framework\Interception\{closure}()
#5 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Framework\App\Action\Plugin\ActionFlagNoDispatchPlugin->aroundExecute()
#6 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->Magento\Framework\Interception\{closure}()
#7 /opt/magento/public_html/generated/code/MultiSafepay/ConnectFrontend/Controller/Connect/Notification/Interceptor.php(23): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callPlugins()
#8 /opt/magento/public_html/vendor/magento/framework/App/Action/Action.php(111): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->execute()
#9 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\Action\Action->dispatch()
#10 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(138): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callParent()
#11 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->Magento\Framework\Interception\{closure}()
#12 /opt/magento/public_html/generated/code/MultiSafepay/ConnectFrontend/Controller/Connect/Notification/Interceptor.php(32): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->___callPlugins()
#13 /opt/magento/public_html/vendor/magento/framework/App/FrontController.php(186): MultiSafepay\ConnectFrontend\Controller\Connect\Notification\Interceptor->dispatch()
#14 /opt/magento/public_html/vendor/magento/framework/App/FrontController.php(118): Magento\Framework\App\FrontController->processRequest()
#15 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch()
#16 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent()
#17 /opt/magento/public_html/vendor/magento/module-store/App/FrontController/Plugin/RequestPreprocessor.php(99): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#18 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch()
#19 /opt/magento/public_html/vendor/mirasvit/module-cache-warmer/src/CacheWarmer/Plugin/Debug/OnHitPlugin.php(140): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#20 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Mirasvit\CacheWarmer\Plugin\Debug\OnHitPlugin->aroundAroundDispatch()
#21 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\PageCache\Model\App\FrontController\BuiltinPlugin\Interceptor->Magento\Framework\Interception\{closure}()
#22 /opt/magento/public_html/generated/code/Magento/PageCache/Model/App/FrontController/BuiltinPlugin/Interceptor.php(23): Magento\PageCache\Model\App\FrontController\BuiltinPlugin\Interceptor->___callPlugins()
#23 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(135): Magento\PageCache\Model\App\FrontController\BuiltinPlugin\Interceptor->aroundDispatch()
#24 /opt/magento/public_html/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}()
#25 /opt/magento/public_html/generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins()
#26 /opt/magento/public_html/vendor/magento/framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch()
#27 /opt/magento/public_html/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch()
#28 /opt/magento/public_html/vendor/magento/framework/App/Bootstrap.php(263): Magento\Framework\App\Http\Interceptor->launch()
#29 /opt/magento/public_html/pub/index.php(40): Magento\Framework\App\Bootstrap->run()
#30 {main} [] []

Notice: Undefined index: edencom_categories in vendor/multisafepay/magento2-core/Model/Ui/Giftcard/EdenredGiftcardConfigProvider.php on line 88

Describe the bug
Magento 2.4.3-p1
A magento upgrade with composer require multisafepay/magento2-core resulted in this error. No further configuration, just module install, added a product to cart and try to navigate to cart.

To Reproduce
Steps to reproduce the behavior:

  1. Install the module without any config to a magento 2.4.3-p1 instance
  2. Add a product to cart
  3. Navigate to checkout/cart
  4. Error pops up

Expected behavior
Cart is shown

Screenshots
image
(output of module yireo/magento2-whoops)

Desktop (please complete the following information):

  • OS: [e.g. iOS]
    Linux Mint 20.2
  • Browser [e.g. chrome, safari]
    Firefox 93.0

Additional context
if ($ids = $this->getPaymentConfig($storeId)[$couponCode . '_categories']) { probably does not check for undefined indexes, wrapping it in isset() before defining $ids will do the trick.

Not sending email on completed order

When I create an order as a user it doesn't send a confirmation email. Looked through the code but couldn't find a cause. Maybe I'm doing something wrong?

Klarna payment generates error when discount is applied

Steps to reproduce :

  • add items to shoppingcart
  • add coupon or other form of discount
  • try to pay with Klarna

Error :
Message : "Totaalbedrag van de winkelwagen moet gelijk zijn aan het bedrag van de transactie"

Reason: The sum of the amounts in the shopping cart do not match the amount in the request, because of the discount.

Request and response :

{ "type": "redirect", "order_id": "22006683429", "recurring_id": "", "currency": "EUR", "amount": 3159, "description": "", "var1": "", "var2": "", "var3": "", "items": "", "manual": "false", "gateway": "KLARNA", "days_active": "30", "seconds_active": "", "second_chance": { "send_email": true }, "payment_options": { }, "customer": { }, "delivery": { }, "plugin": { "shop": "Magento 2.3.5-p2 Enterprise", "shop_version": "2.3.5-p2", "plugin_version": " - Plugin 1.14.1", "partner": "MultiSafepay" }, "gateway_info": { "issuer_id": null }, "shopping_cart": { "items": [ { "name": "Guarana", "description": null, "unit_price": 14.9541284404, "quantity": "1", "merchant_item_id": "999803", "tax_table_selector": "9.0000", "weight": { "unit": "KG", "value": "0.0420" } }, { "name": "Gymnema sylvestre", "description": null, "unit_price": 16.9541284404, "quantity": "1", "merchant_item_id": "999806", "tax_table_selector": "9.0000", "weight": { "unit": "KG", "value": "0.0400" } }, { "name": "Verzenden via PostNL", "description": "Shipping", "unit_price": 0, "quantity": "1", "merchant_item_id": "msp-shipping", "tax_table_selector": "0.00", "weight": { "unit": "KG", "value": "0" } } ] }, "checkout_options": { "tax_tables": { "alternate": [ { "standalone": "true", "name": "9.0000", "rules": [ { "rate": 0.09 } ] }, { "standalone": "true", "name": "9.0000", "rules": [ { "rate": 0.09 } ] }, { "standalone": "true", "name": "0.00", "rules": [ { "rate": "0.00" } ] } ] } }, "payment_data": { "payload": null } } { "success": false, "data": {}, "error_code": 1027, "error_info": "Totaalbedrag van de winkelwagen moet gelijk zijn aan het bedrag van de transactie" }

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

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} [] []

Magento 2.4.5 : composer require issue : magento/module-inventory-sales-api not found

Dear

When I run the composer require of the metapackage, I encounter an issue with Magento 2.4.5 with PHP 8.1 :

composer require multisafepay/magento2

./composer.json has been updated
Running composer update multisafepay/magento2
Loading composer repositories with package information
In Laminas\DependencyPlugin\DependencyRewriterV2::onPrePoolCreate
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

Problem 1
- multisafepay/magento2-core 1.0.0 requires php-http/guzzle6-adapter * -> satisfiable by php-http/guzzle6-adapter[v0.1.0, ..., v0.4.1, v1.0.0, v1.1.0, v1.1.1, v2.0.0, v2.0.1, v2.0.2].
- multisafepay/magento2[2.1.0, ..., 2.22.0] require multisafepay/magento2-msi 1.0.1 -> satisfiable by multisafepay/magento2-msi[1.0.1].
- php-http/guzzle6-adapter v0.1.0 requires guzzlehttp/guzzle ~6.0 -> found guzzlehttp/guzzle[6.0.0, ..., 6.5.8] but it conflicts with your root composer.json require (^7.4.2).
- php-http/guzzle6-adapter v0.2.0 requires php-http/httplug 1.0.0-alpha3 -> found php-http/httplug[v1.0.0-alpha3] but it does not match your minimum-stability.
- php-http/guzzle6-adapter[v0.2.1, ..., v0.3.1] require php-http/httplug 1.0.0-beta -> found php-http/httplug[v1.0.0-beta] but it does not match your minimum-stability.
- php-http/guzzle6-adapter[v0.4.0, ..., v0.4.1, v1.0.0, ..., v1.1.1, v2.0.0, ..., v2.0.2] require guzzlehttp/guzzle ^6.0 -> found guzzlehttp/guzzle[6.0.0, ..., 6.5.8] but it conflicts with your root composer.json require (^7.4.2).
- multisafepay/magento2-msi 1.0.1 requires magento/module-inventory-sales-api ^1.0 -> could not be found in any version, there may be a typo in the package name.
- multisafepay/magento2 2.0.0 requires multisafepay/magento2-core 1.0.0 -> satisfiable by multisafepay/magento2-core[1.0.0].
- Root composer.json requires multisafepay/magento2 * -> satisfiable by multisafepay/magento2[2.0.0, ..., 2.22.0].

As the magento/module-inventory-sales-api does'nt exist in this version, the process is stopped.

Any idea how to fix it ?

Regards

All Amounts stay open, Total Due is never Zero.

Describe the bug
All amounts stay open even after successful direct payments.
Status is Processing but the amount is "Due".

To Reproduce
Steps to reproduce the behavior:

  1. Order and do direct payment
  2. Go to the Magento backend Sales
  3. Check the order to see it has the status processing
  4. In the order the amount is open!
  5. All orders that I checked 5 days back and beyond have this.

Expected behavior
The amount open should be Zero after a direct payment.

Screenshots
image

Additional context
Magento 2.4.3-p2
MSP 2.17.0 and before
All payment types.

Magento 2.4.4 support

Describe the bug
Requirement php-http/guzzle6-adapter of subpackage multisafepay/magento2-core is incompatible with magento 2.4.4

On composer require magento/product-enterprise-edition:2.4.4 we get the errors php-http/guzzle6-adapter v2.0.2 requires guzzlehttp/guzzle ^6.0.
The package multisafepay/magento2-core is using php-http/guzzle6-adapter which in turn requires guzzlehttp/guzzle ^6.0. Except Magento requires version 7, see magento/product-community-edition 2.4.4 requires guzzlehttp/guzzle ^7.3.0.

To Reproduce
Steps to reproduce the behavior:

  1. Try to install either composer require magento/product-enterprise-edition:2.4.4 or composer require magento/product-community-edition:2.4.4 (but community isn't released at the moment, try using the released enterprise instead)

Expected behavior
Magento is installed.
( I could not check PHP 8.1 compatible )

Screenshots

Composer require output.

[...]
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - multisafepay/magento2 2.7.0 requires multisafepay/magento2-core 2.5.1 -> satisfiable by multisafepay/magento2-core[2.5.1].
    - multisafepay/magento2 2.7.0 requires multisafepay/magento2-core 2.5.1 -> satisfiable by multisafepay/magento2-core[2.5.1].
    - multisafepay/magento2 2.7.1 requires multisafepay/magento2-core 2.5.2 -> satisfiable by multisafepay/magento2-core[2.5.2].
    - multisafepay/magento2 2.7.1 requires multisafepay/magento2-core 2.5.2 -> satisfiable by multisafepay/magento2-core[2.5.2].
[...]
    - php-http/guzzle6-adapter v2.0.0 requires php ^7.1 -> your PHP version (8.1.4) does not satisfy that requirement.
    - php-http/guzzle6-adapter v0.3.1 requires php-http/httplug 1.0.0-beta -> satisfiable by php-http/httplug[v1.0.0-beta] but these conflict with your requirements or minimum-stability.
    - php-http/guzzle6-adapter v0.3.0 requires php-http/httplug 1.0.0-beta -> satisfiable by php-http/httplug[v1.0.0-beta] but these conflict with your requirements or minimum-stability.
    - php-http/guzzle6-adapter v0.2.1 requires php-http/httplug 1.0.0-beta -> satisfiable by php-http/httplug[v1.0.0-beta] but these conflict with your requirements or minimum-stability.
    - php-http/guzzle6-adapter v0.2.0 requires php-http/httplug 1.0.0-alpha3 -> satisfiable by php-http/httplug[v1.0.0-alpha3] but these conflict with your requirements or minimum-stability.
    - Conclusion: remove guzzlehttp/guzzle 7.4.2
    - Conclusion: don't install guzzlehttp/guzzle 7.4.2
    - Conclusion: remove magento/product-enterprise-edition 2.4.4
    - Conclusion: don't install guzzlehttp/guzzle 7.4.1
    - Conclusion: don't install guzzlehttp/guzzle 7.4.0
    - Conclusion: don't install guzzlehttp/guzzle 7.3.0
    - Conclusion: don't install guzzlehttp/guzzle 7.4.2
    - Conclusion: don't install guzzlehttp/guzzle 6.5.4
    - Conclusion: don't install guzzlehttp/guzzle 7.4.1
    - magento/product-community-edition 2.4.4 requires guzzlehttp/guzzle ^7.3.0 -> satisfiable by guzzlehttp/guzzle[7.4.2, 7.3.0, 7.4.0, 7.4.1].
    - Conclusion: don't install guzzlehttp/guzzle 7.4.0

Desktop (please complete the following information):

Smartphone (please complete the following information):

Additional context
Please check https://github.com/php-http/guzzle7-adapter, looks like a drop-in replacement but requires PHP up to ^8.0 instead up to ^8.1 .

GraphQl Magento 2.4.3-p1 issue with ideal issuer_id

Describe the bug
When you set a ideal issuer_id and then place order the issuer_id gets removed. The reason for this is that Magento has decided to change the logic for the GraphQl endpoint to always include the payment data and this resets the additional_data which removes the issuer_id.

To Reproduce
Steps to reproduce the behavior:

  1. Create a cart with an item.
  2. Set Ideal payment method with an issuer_id through graphql
  3. Place order through graphql without setting the payment method again.

Expected behavior
You get a link to the issuers page to handle the payment there.

Actual behavior
You get a link to MSP where you have to select an issuer.

Additional context
Cause of the issue is the $this->cartManagement->placeOrder($cartId, $this->paymentMethodManagement->get($cartId)); line in the Magento/QuoteGraphQl/Model/Resolver/PlaceOrder class. In older versions the $this->paymentMethodManagement->get($cartId) doesn't exist.

Critical error on Address::addCity()

Describe the bug
main.CRITICAL: TypeError: Argument 1 passed to MultiSafepay\ValueObject\Customer\Address::addCity() must be of the type string, null given, called in /vendor/multisafepay/magento2-core/Model/Api/Builder/OrderRequestBuilder/CustomerBuilder/AddressBuilder.php on line 60 and defined in /vendor/multisafepay/php-sdk/src/ValueObject/Customer/Address.php:110

To Reproduce
Cannot really determine when this happens. I think maybe City is not filled by clients because it's not mandatory?

Expected behavior
Give error message in checkout

Enviroment
Magento 2.4.5-p1
Multisafepay 2.21.1

Checking out without postal code leads to a notice

Describe the bug
When checking out without a postal code, you are not being redirect to MSP because of notice while building the address

To Reproduce
Steps to reproduce the behavior:

  1. Make postal code optional for addresses in checkout
  2. Checkout, chose any payment method but leave postal code empty
  3. Place order
  4. See error

Fix
See MultiSafepay/magento2-core#8

Wrong ApiKey when shipping or refunding in multistore set up

We are using multiple Multisafepay apikeys in our configuration. When a shipment or refund in the admin is created, the apikey passed is always the default configured one. When fetching an order created with a different Apikey, the API returns "Invalid transaction ID".

Therefore it is impossible to update orders at multisafepay or create a refund from within the admin.

For example when I emulate the store in \MultiSafepay\ConnectCore\Observer\addShippingToTransaction
before
$transactionManager = $this->sdkFactory->get()->getTransactionManager();
I can succesfully ship an order.

Credit card component fails to render on Internet Explorer

Describe the bug
On internet explorer the credit card component fails to render due to new JS syntax being used. While it might be the case that IE is not officially supported anymore (which I'd understand), in this case the fix is easy, and I created a PR with the fix: MultiSafepay/magento2-frontend#6

To Reproduce
Steps to reproduce the behavior:

  1. Use internet explorer
  2. Go to checkout
  3. Check console for errors

Additional context
Add any other context about the problem here.

multisafepay/magento2-core breaks swagger

Describe the bug
Swagger is not working after multisafepay/magento2-core module is installed.

To Reproduce
Steps to reproduce the behavior:

  1. Go to /swagger
  2. See the error "Failed to load API definition."
    image
  3. Check /rest/all/schema?services=all
  4. See the explanation of the error
    image

Expected behavior
Swagger works properly.

Additional info
Seems swagger can not recognize return types which is not full path to class / interface.
image

In case full path is specified, swagger will work properly.
image

Extension info

  1. Name: multisafepay/magento2-core
  2. Version: 2.13.0

Missed data in the order tables

Preconditions:
MSP - 2.3.0
Magento - 2.4.2

STR:
I haven't stable steps how to reproduce this bug. We faced it times by time in the next tables - sales_order_item, sales_order_payment we have miss data for fields - qty_invoiced, last_trans_id.
Point 1. Invoice was created order was paid, but qty_invoiced is 0
Point 2. In order comment transaction ID was set but after checking in the table this field was set as NULL

Could you please check why this can happened?
ShowAttachImage (2)
Screenshot from 2021-04-13 09-47-12

Afterpay / Riverty not working in combination with MagePlaza OSC

Describe the bug
Getting a javascript error in Mageplaza checkout when Afterpay is enabled as payment in checkout. According to your documentation https://docs.multisafepay.com/docs/magento-2 it should be compatible.

[ERROR] Failed to load the "MultiSafepay_ConnectFrontend/js/view/payment/gateway/method-renderer/afterpay" component.

The problem is caused by getting phonenumber of shippingAddress. Check file https://github.com/MultiSafepay/magento2-frontend/blob/master/view/frontend/web/js/view/payment/gateway/method-renderer/afterpay.js on row 62.

When I change row 54 to return quote.shippingAddress().telephone I have no problems.

To Reproduce
Steps to reproduce the behavior:

  1. add product to cart
  2. Go to checkout
  3. See error in console (javascript)

Expected behavior
I would expect that payment option Afterpay would be visible

Desktop (please complete the following information):

  • Browser Chrome

Additional context

  • Magento 2.4.5-p1
  • Mageplaza OSC 4.1.3

Not compatible with multisafepay/magento2-graphql

Version 3.0.0 is not compatible with multisafepay/magento2-graphql

See: MultiSafepay/magento2-graphql#6

Problem 1
    - multisafepay/magento2-graphql 3.2.0 requires multisafepay/magento2-frontend ^1.19 -> satisfiable by multisafepay/magento2-frontend[1.19.0].
    - multisafepay/magento2-graphql 3.1.0 requires multisafepay/magento2-frontend ^1.18 -> satisfiable by multisafepay/magento2-frontend[1.18.0, 1.18.1, 1.18.2, 1.19.0].
    - multisafepay/magento2-graphql 3.0.0 requires multisafepay/magento2-frontend ^1.17 -> satisfiable by multisafepay/magento2-frontend[1.17.0, ..., 1.19.0].
    - You can only install one version of a package, so only one of these can be installed: multisafepay/magento2-frontend[1.17.0, ..., 1.19.0, 2.0.0].
    - multisafepay/magento2 3.0.0 requires multisafepay/magento2-frontend 2.0.0 -> satisfiable by multisafepay/magento2-frontend[2.0.0].
    - Root composer.json requires multisafepay/magento2 ^3.0 -> satisfiable by multisafepay/magento2[3.0.0].
    - Root composer.json requires multisafepay/magento2-graphql ^3.0 -> satisfiable by multisafepay/magento2-graphql[3.0.0, 3.1.0, 3.2.0].

Order saving error: Type "" is not a known type.

Using Magento 2.4.0 and multisafepay/magento2 2.2.1.

When creating an order via the backend, using a Magento delivery method, the following error occurs;
Order saving error: Type "" is not a known type. Available types: direct, redirect,paymentlink.

Uncaught TypeError: Argument 1 passed to MultiSafepay\\ConnectCore\\Logger\\Logger::logPaymentLinkError() must be of the type string, null given

Describe the bug
Using:

  • Magento OS 2.3.6-p1
  • Following MultiSafepay modules:
    • multisafepay/magento2 version 2.19.0
    • multisafepay/magento2-adminhtml version 1.19.0
    • multisafepay/magento2-catalog-inventory version 1.0.2
    • multisafepay/magento2-core version 2.17.0
    • multisafepay/magento2-frontend version 1.16.1
    • multisafepay/magento2-msi version 1.0.1
    • multisafepay/php-sdk version 5.6.0

I've found the following error report in var/report/api/{some-number}:

"Fatal Error: 'Uncaught TypeError: Argument 1 passed to MultiSafepay\\ConnectCore\\Logger\\Logger::logPaymentLinkError() must be of the type string, null given, called in \/vendor\/multisafepay\/magento2-core\/Gateway\/Http\/Client\/RecurringClient.php on line 72 and defined in \/vendor\/multisafepay\/magento2-core\/Logger\/Logger.php:37
Stack trace:
#0 \/vendor\/multisafepay\/magento2-core\/Gateway\/Http\/Client\/RecurringClient.php(72): MultiSafepay\\ConnectCore\\Logger\\Logger->logPaymentLinkError(NULL, Object(MultiSafepay\\Exception\\ApiException))
#1 \/vendor\/magento\/module-payment\/Gateway\/Command\/GatewayCommand.php(106): MultiSafepay\\ConnectCore\\Gateway\\Http\\Client\\RecurringClient->placeRequest(Object(Magento\\Payment\\Gateway\\Http\\Transfer))
#2 \/vendor\/magento\/module-payment\/Gateway\/Command\/CommandManager.php(65): Magent' in '\/vendor\/multisafepay\/magento2-core\/Logger\/Logger.php' on line 37

Is there a known case where $orderId could be null over here? If there is a chance it can be null, that code will probably have to be rewritten a little bit to be able to deal with that?

To Reproduce
Steps to reproduce the behavior:

  1. No idea, found this in var/report/api/{some-number}

Expected behavior
No errors

Screenshots
N/A

Desktop (please complete the following information):

  • OS: [e.g. iOS]: Not relevant
  • Browser [e.g. chrome, safari]: Not relevant
  • Version [e.g. 22]: Not relevant

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]: Not relevant
  • OS: [e.g. iOS8.1]: Not relevant
  • Browser [e.g. stock browser, safari]: Not relevant
  • Version [e.g. 22]: Not relevant

Additional context
N/A

Payment status stays Pending Payment

Describe the bug
In Test mode I just did two Ideal transactions with the testing status "complete".
I get redirected to the Success page and all seems fine.
In the order overview it actually seems that there has not been a valid payment.
The amount is still open and the status is "Pending Payment".

To Reproduce
Steps to reproduce the behavior:

  1. Enable testing via testing api key
  2. Enable Ideal only
  3. Place an order in the frontend with status complete in the MSP testing env.
  4. Get redirected to the Success page
  5. Check the orders in the backend now and see that the order has the status pending payment and the complete amount is due payment.
  6. Tried to fix it by running the cron via cli and the reindex
  7. No luck

Expected behavior
A clear and concise description of what you expected to happen.
After a successful iDeal payment the order should have status "processing".

Desktop (please complete the following information):

  • Browser: Firefox
  • Magento: 2.4.2-p1

Wrong price is calculated

Describe the bug
I have a product, which has a qty of 1000. When the customer wants to pay, everything seems normal. However, when looking at the invoice afterwards, it takes the base product price, and multiplies this again by its qty, so times a 1000. (It is a fixed price per 1000). When I try this at my staging enviroment with a test API key, I am even asked to pay this weird price at the Test Payment enviroment (The fixed price x the qty).

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
I expect the fixed price to be shown on the invoice.

Additional context
Add any other context about the problem here.

The payment method you requested is not available

when i used this query
query{
multisafepayCart(cart_id:"kaDTle66fZjHrAjBxUnEA6NB8ep6hR3y"){
available_payment_methods{
title
}
}
}
this error show:
"The payment method you requested is not available"

[2.4.4-2.4.5] Customer group is set to null by Magento on guest orders

Describe the bug
In Magento 2.4.4-2.4.5 because of a Magento bug when an order is placed the Customer Group is set to null on a quote. If you restore a quote, because you canceled the order in MSP, payment methods might disappear because they can be set to only show for specific customer groups and null will never match. This only affects 2.4.4 and 2.4.5, and is fixed in Magento 2.4.6.

To Reproduce
Steps to reproduce the behavior:

  1. Set a MSP Payment method to only work for specific customer groups, one of these groups should be not logged in
  2. Place a guest order and cancel it in MSP.
  3. The Payment method configured at 1. now disappears.

Potential fix
If Customer Group 0 is in the allowed groups array also match on null. (Or suggest to people to upgrade to 2.4.6 but we all know this isn't always an option).

Inconsistent inventory reservations when using second chance payment

To Reproduce

  1. Set Pending Payment Order Status configuration to Pending Payment.
  2. Create order and close screen on payment page, order is now placed in pending payment status.
  3. Set Pending Payment Order Lifetime (minutes) to one minute.
  4. Run cronjob sales_clean_orders.
  5. Run cronjob inventory_cleanup_reservations.
  6. Pay order using second change payment.
  7. Ship order.

Expected behavior
Running cronjob inventory_cleanup_reservations should now delete all order related reservations since order is complete. We should check if order placed reservations exist and add them if not when using second change payment.

Actual behavior
Running cronjob inventory_cleanup_reservations won't delete the shipment reservations because order placed and order canceled reservations are already delete. We can now oversell this product.

Error in Back-office: Cannot instantiate interface Magento\Framework\Filesystem\DriverInterface

Hi guys,

We installed the latest version of the module (2.1.0) and got the following error when going to the General Information page (admin/system_config/edit/section/multisafepay_support)

Screen Shot 2020-11-27 at 10 44 32

Fatal error: Uncaught Error: Cannot instantiate interface Magento\Framework\Filesystem\DriverInterface in /project/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:50 Stack trace: #0 /project/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\\Framewo...') #1 /project/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(167): Magento\Framework\ObjectManager\ObjectManager->get('Magento\\Framewo...') #2 /project/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(273): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Magento\\Framewo...', NULL, 'fileDriver', 'MultiSafepay\\Co...') #3 /project/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(236): Magento\Framework\ObjectManager\Factory\Abst in /project/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php on line 50

Module versions:

multisafepay/magento2                                 2.1.0                MultiSafepay module suite for Magento 2
multisafepay/magento2-adminhtml                       1.1.0                MultiSafepay module for Magento 2 (backend-only)
multisafepay/magento2-catalog-inventory               1.0.1                MultiSafepay module for Magento 2 (only for deprecated Catalog Inventory)
multisafepay/magento2-core                            2.0.0                MultiSafepay module for Magento 2
multisafepay/magento2-frontend                        1.1.0                MultiSafepay module for Magento 2 (regular frontend)
multisafepay/magento2-msi                             1.0.1                MultiSafepay module for Magento 2 (msi-only)
multisafepay/php-sdk                                  4.0.2                MultiSafepay PHP SDK

Magento Version: 2.3.5

Thanks in advance!

Missing functions from old module

I see some functions are missing. When this functions will be added? Like;

  • E-mail invoice to customer
  • Keep cart alive (Or is this default enabled? Don't see this option in the backend like old module)

Trying to download debug log files result in error "File not found"

Hi folks

Using:

  • Magento OS 2.3.6-p1
  • This multisafepay module version 2.7.1
  • Document root of Magento in the webserver is using the pub directory

When we go in the backend of the shop to the General Settings of the MultiSafepay module and click the "Download" button next to the "MultiSafepay payment logs" label. We get the following error:

1 exception(s):
Exception #0 (Exception): File not found

Exception #0 (Exception): File not found
<pre>#1 Magento\Backend\App\Response\Http\FileFactory->create() called at [vendor/multisafepay/magento2-core/Util/ZipUtil.php:118]
#2 MultiSafepay\ConnectCore\Util\ZipUtil->zipLogFiles() called at [vendor/multisafepay/magento2-adminhtml/Controller/Adminhtml/Download/MultiSafepayLog.php:53]
#3 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog->execute() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#4 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#5 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#6 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->___callPlugins() called at [generated/code/MultiSafepay/ConnectAdminhtml/Controller/Adminhtml/Download/MultiSafepayLog/Interceptor.php:26]
#7 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->execute() called at [vendor/magento/framework/App/Action/Action.php:108]
#8 Magento\Framework\App\Action\Action->dispatch() called at [vendor/magento/module-backend/App/AbstractAction.php:248]
#9 Magento\Backend\App\AbstractAction->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#10 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#11 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143]
#12 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch() called at [vendor/magento/framework/Interception/Interceptor.php:135]
#13 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#14 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->___callPlugins() called at [generated/code/MultiSafepay/ConnectAdminhtml/Controller/Adminhtml/Download/MultiSafepayLog/Interceptor.php:39]
#15 MultiSafepay\ConnectAdminhtml\Controller\Adminhtml\Download\MultiSafepayLog\Interceptor->dispatch() called at [vendor/magento/framework/App/FrontController.php:186]
#16 Magento\Framework\App\FrontController->processRequest() called at [vendor/magento/framework/App/FrontController.php:118]
#17 Magento\Framework\App\FrontController->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58]
#18 Magento\Framework\App\FrontController\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138]
#19 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153]
#20 Magento\Framework\App\FrontController\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#21 Magento\Framework\App\FrontController\Interceptor->dispatch() called at [vendor/magento/framework/App/Http.php:116]
#22 Magento\Framework\App\Http->launch() called at [vendor/magento/framework/App/Bootstrap.php:261]
#23 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:40]
</pre>

After some debugging, it appears that the ZipArchive you are creating uses the path:

/path/to/webshop/pub/multisafepay_logs.zip

But when trying to send that file to the user, it tries to read from this path (so without the pub directory) and then fails:

/path/to/webshop/multisafepay_logs.zip

Can this be confirmed and then fixed?
Also, I would suggest you use a more non-publicly accessible path like var or var/tmp in the Magento file structure, so that random visitors of the shop won't have the chance to download that file without authorization.

Thanks!

Module is not compatible with upcoming Magento 2.4.6 version

Describe the bug
I have access to the Magento 2.4.6-beta2 release and notice that the MultiSafepay module crashes when I try to login to the backoffice.

Error: Class "Zend_Http_Client" not found in /Users/pieterhoste/Projects/magento2/m23-demo/vendor/multisafepay/magento2-core/Util/VersionUtil.php:76
Stack trace:
#0 vendor/multisafepay/magento2-core/Util/NotificationUtil.php(73): MultiSafepay\ConnectCore\Util\VersionUtil->getNewVersionsDataIfExist()
#1 vendor/multisafepay/magento2-adminhtml/Observer/BackendAuthUserLoginSuccess.php(58): MultiSafepay\ConnectCore\Util\NotificationUtil->addNewReleaseNotification()
#2 vendor/magento/framework/Event/Invoker/InvokerDefault.php(88): MultiSafepay\ConnectAdminhtml\Observer\BackendAuthUserLoginSuccess->execute(Object(Magento\Framework\Event\Observer))
#3 vendor/magento/framework/Event/Invoker/InvokerDefault.php(74): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(MultiSafepay\ConnectAdminhtml\Observer\BackendAuthUserLoginSuccess), Object(Magento\Framework\Event\Observer))
#4 vendor/magento/framework/Event/Manager.php(65): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer))
#5 generated/code/Magento/Framework/Event/Manager/Proxy.php(95): Magento\Framework\Event\Manager->dispatch('backend_auth_us...', Array)
#6 vendor/magento/module-backend/Model/Auth.php(169): Magento\Framework\Event\Manager\Proxy->dispatch('backend_auth_us...', Array)
#7 vendor/magento/framework/Interception/Interceptor.php(58): Magento\Backend\Model\Auth->login('xxx', 'yyy')
#8 vendor/magento/framework/Interception/Interceptor.php(138): Magento\Backend\Model\Auth\Interceptor->___callParent('login', Array)
#9 vendor/magento/module-admin-adobe-ims/Plugin/DisableAdminLoginAuthPlugin.php(56): Magento\Backend\Model\Auth\Interceptor->Magento\Framework\Interception\{closure}('xxx', 'yyy')
#10 vendor/magento/framework/Interception/Interceptor.php(135): Magento\AdminAdobeIms\Plugin\DisableAdminLoginAuthPlugin->aroundLogin(Object(Magento\Backend\Model\Auth\Interceptor), Object(Closure), 'xxx', 'yyy')
#11 vendor/magento/framework/Interception/Interceptor.php(153): Magento\Backend\Model\Auth\Interceptor->Magento\Framework\Interception\{closure}('xxx', 'yyy')
#12 generated/code/Magento/Backend/Model/Auth/Interceptor.php(59): Magento\Backend\Model\Auth\Interceptor->___callPlugins('login', Array, Array)
#13 vendor/magento/module-backend/App/Action/Plugin/Authentication.php(207): Magento\Backend\Model\Auth\Interceptor->login('xxx', 'yyy')
#14 vendor/magento/module-backend/App/Action/Plugin/Authentication.php(159): Magento\Backend\App\Action\Plugin\Authentication->_performLogin(Object(Magento\Framework\App\Request\Http))
#15 vendor/magento/module-backend/App/Action/Plugin/Authentication.php(127): Magento\Backend\App\Action\Plugin\Authentication->_processNotLoggedInUser(Object(Magento\Framework\App\Request\Http))
#16 vendor/magento/framework/Interception/Interceptor.php(135): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Magento\Backend\Controller\Adminhtml\Index\Index\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#17 vendor/magento/framework/Interception/Interceptor.php(153): Magento\Backend\Controller\Adminhtml\Index\Index\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#18 generated/code/Magento/Backend/Controller/Adminhtml/Index/Index/Interceptor.php(32): Magento\Backend\Controller\Adminhtml\Index\Index\Interceptor->___callPlugins('dispatch', Array, Array)
#19 vendor/magento/framework/App/FrontController.php(245): Magento\Backend\Controller\Adminhtml\Index\Index\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#20 vendor/magento/framework/App/FrontController.php(212): Magento\Framework\App\FrontController->getActionResponse(Object(Magento\Backend\Controller\Adminhtml\Index\Index\Interceptor), Object(Magento\Framework\App\Request\Http))
#21 vendor/magento/framework/App/FrontController.php(147): Magento\Framework\App\FrontController->processRequest(Object(Magento\Framework\App\Request\Http), Object(Magento\Backend\Controller\Adminhtml\Index\Index\Interceptor))
#22 vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#23 vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#24 vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#25 generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#26 vendor/magento/framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#27 generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch()
#28 vendor/magento/framework/App/Bootstrap.php(264): Magento\Framework\App\Http\Interceptor->launch()
#29 pub/index.php(30): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#30 {main}

This is due to Magento getting rid of older Zend framework classes in 2.4.6.
See their Backwards Incompatible page for 2.4.6 (search for Zend_HTTP)

Maybe you guys can already try to figure out a replacement of using Zend_HTTP that's backwards compatible with previous Magento versions.

To Reproduce
Steps to reproduce the behavior:

  1. Use Magento 2.4.6-beta2 (can possibly also be reproduced by using the 2.4-develop branch of magento's github
  2. Use MultiSafepay module version 2.22.0
  3. Log into the backoffice

Expected behavior
Backoffice works & MultiSafepay module as well

Screenshots

Additional context
Add any other context about the problem here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.