If you remove a payment method in Magento 2 you will be unable to view orders which have been placed using that payment method in the admin and customer dashboard.
The error logs will show a message similar to the below:
[2020-01-23 10:27:34] main.CRITICAL: Class Magenest\Stripe\Model\StripePaymentMethod does not exist {"exception":"[object] (ReflectionException(code: -1): Class Magenest\\Stripe\\Model
StripePaymentMethod does not exist at /var/www/vhosts/some_customer/vendor/magento/framework/Code/Reader/ClassReader.php:19
If you are willing to class these payments as legacy and complete refunds/other processes offline you can use the following solution.
-
Create a module (I recommend using Mage2Gen to save time creating the base module). In our example this is installed as app/code/My/DummyPayment/. 'magenest_stripe' is the payment code for the payment method which has been removed.
-
app/code/My/DummyPayment/etc/module.xml should be as below
<?xml version="1.0" ?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="My_DummyPayment" setup_version="1.0.0">
<sequence>
<module name="Magento_Sales"/>
<module name="Magento_Payment"/>
</sequence>
</module>
</config>
- Create app/code/My/DummyPayment/etc/config.xml as below
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<payment>
<magenest_stripe>
<active>0</active>
<email_customer>0</email_customer>
<title>Legacy Stripe Payment</title>
<model>My\DummyPayment\Model\DummyPayment</model>
</magenest_stripe>
</payment>
</default>
</config>
- app/code/My/DummyPayment/Model/DummyPayment.php
<?php
namespace My\DummyPayment\Model;
class DummyPayment extends \Magento\Payment\Model\Method\AbstractMethod
{
protected $_code = 'magenest_stripe';
}
- app/code/My/DummyPayment/Setup/Patch/Data/UpdateDummyPaymentInfo.php to update database values for the model and payment title
<?php
namespace My\DummyPayment\Setup\Patch\Data;
use Magento\Framework\Setup\Patch\DataPatchInterface;
class UpdateMagenestStripeModel implements DataPatchInterface
{
/**
* @var \Magento\Framework\Setup\ModuleDataSetupInterface
*/
private $moduleDataSetup;
/**
* @var \Vortex\UpgradeData\Setup\StoreConfig
*/
protected $storeConfig;
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
protected $_storeManager;
/**
* @param \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup
*/
public function __construct(
\Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup,
\Vortex\UpgradeData\Setup\StoreConfig $storeConfig,
\Magento\Store\Model\StoreManagerInterface $storeManager
) {
$this->moduleDataSetup = $moduleDataSetup;
$this->storeConfig = $storeConfig;
$this->_storeManager = $storeManager;
}
/**
* Enabling config on all inventory options
*
* {@inheritdoc}
*/
public function apply()
{
$this->moduleDataSetup->startSetup();
$this->storeConfig->set('payment/magenest_stripe/model', 'My\DummyPayment\Model\DummyPayment', 'default', 0);
$this->storeConfig->set('payment/magenest_stripe/title', 'Legacy Stripe Payment', 'default', 0);
$this->moduleDataSetup->endSetup();
}
/**
* No dependencies on any other patches
*
* @return array|string[]
*/
public static function getDependencies()
{
return [];
}
/**
* {@inheritdoc}
*/
public function getAliases()
{
return [];
}
}
- Run
bin/magento setup:upgrade
and you should now be able to view your orders again.