Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Magento 2 - Enable viewing of orders which contain a removed payment method.

Magento 2

Unable to view historical orders if a payment method is removed.

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.

  1. 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.

  2. 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>
  1. 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>
  1. app/code/My/DummyPayment/Model/DummyPayment.php
<?php
namespace My\DummyPayment\Model;

class DummyPayment extends \Magento\Payment\Model\Method\AbstractMethod
{
    protected $_code = 'magenest_stripe';
}
  1. 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 [];
    }

}
  1. Run bin/magento setup:upgrade and you should now be able to view your orders again.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment