/** * 2016-08-20 * Цель плагина — установка флага DoTransaction. * Без этого флага возврат работать не будет: * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Sales/Model/Order/Payment.php#L633 * @see \Magento\Sales\Model\Order\Payment::refund() * Там стоит код: * if ($gateway->canRefund() && $creditmemo->getDoTransaction()) { * * Флаг DoTransaction устанавливался в прежних версиях Magento, в том числе в Magento 2.1: * https://github.com/magento/magento2/blob/2.1.0/app/code/Magento/Sales/Model/Service/CreditmemoService.php#L150 * Однако в 2.2-dev он почему-то не устанавливается (видимо, баг): * https://github.com/magento/magento2/blob/522fad/app/code/Magento/Sales/Model/Service/CreditmemoService.php#L156-L189 * * @see \Magento\Sales\Model\Service\CreditmemoService::refund() * @param Sb $sb * @param ICreditmemo|Creditmemo $creditmemo * @param bool $offlineRequested [optional] * @return array() */ public function beforeRefund(Sb $sb, ICreditmemo $creditmemo, $offlineRequested = false) { if ($creditmemo instanceof Creditmemo) { /** @noinspection PhpUndefinedMethodInspection */ $creditmemo->setDoTransaction(!$offlineRequested); } return [$creditmemo, $offlineRequested]; }