Here is the script for creating credit memo from Magento root
Create createcreditmemo.php
at the root of magento
use \Magento\Framework\App\Bootstrap;
include('app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();
$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$orderInterface = $objectManager->get('\Magento\Sales\Api\Data\OrderInterface');
//Use this if you have orderId
//$orderId = "100"; //Order Id
//$order = $orderInterface->load($orderId);
$incrementId = "000000214"; //Increment Id
$order = $objectManager->create('Magento\Sales\Model\Order')
->loadByAttribute('increment_id', $incrementId);
$invoice = $objectManager->create('Magento\Sales\Model\Order\Invoice');
$creditMemoFacory = $objectManager->create('Magento\Sales\Model\Order\CreditmemoFactory');
$creditmemoService = $objectManager->create('Magento\Sales\Model\Service\CreditmemoService');
try {
$invoices = $order->getInvoiceCollection();
foreach ($invoices as $invoice) {
$invoiceincrementid = $invoice->getIncrementId();
}
$invoiceobj = $invoice->loadByIncrementId($invoiceincrementid);
$creditmemo = $creditMemoFacory->createByOrder($order);
// Don't set invoice if you want to do offline refund
$creditmemo->setInvoice($invoiceobj);
$creditmemoService->refund($creditmemo);
echo "CreditMemo Succesfully Created For Order: ".$incrementId;
} catch (\Exception $e) {
echo "Creditmemo Not Created". $e->getMessage();
}
Change order increment id or order id as per your requirement. And run this script at the root of Magento to create creditmemo.