/**
  * Refund the amount with transaction id
  *
  * @param \Magento\Framework\DataObject $payment
  * @param float $amount
  * @return $this
  * @throws \Magento\Framework\Exception\LocalizedException
  */
 protected function processRefund(\Magento\Framework\DataObject $payment, $amount)
 {
     if ($amount <= 0) {
         throw new \Magento\Framework\Exception\LocalizedException(__('Invalid amount for refund.'));
     }
     if (!$payment->getParentTransactionId()) {
         throw new \Magento\Framework\Exception\LocalizedException(__('Invalid transaction ID.'));
     }
     $payment->setAnetTransType(self::REQUEST_TYPE_CREDIT);
     $payment->setAmount($amount);
     $payment->setXTransId($this->getRealParentTransactionId($payment));
     $request = $this->buildRequest($payment);
     $result = $this->postRequest($request);
     switch ($result->getXResponseCode()) {
         case self::RESPONSE_CODE_APPROVED:
             if ($result->getXResponseReasonCode() == self::RESPONSE_REASON_CODE_APPROVED) {
                 if ($result->getXTransId() != $payment->getParentTransactionId()) {
                     $payment->setTransactionId($result->getXTransId());
                 }
                 $payment->setIsTransactionClosed(true)->setTransactionAdditionalInfo(self::REAL_TRANSACTION_ID_KEY, $result->getXTransId());
                 return $this;
             }
             throw new \Magento\Framework\Exception\LocalizedException($this->dataHelper->wrapGatewayError($result->getXResponseReasonText()));
         case self::RESPONSE_CODE_DECLINED:
         case self::RESPONSE_CODE_ERROR:
             throw new \Magento\Framework\Exception\LocalizedException($this->dataHelper->wrapGatewayError($result->getXResponseReasonText()));
         default:
             throw new \Magento\Framework\Exception\LocalizedException(__('Payment refunding error.'));
     }
 }