/** * Get payflow transaction id from parent transaction * * @param \Magento\Framework\Object $payment * @return string */ protected function _getParentTransactionId(\Magento\Framework\Object $payment) { if ($payment->getParentTransactionId()) { return $payment->getTransaction($payment->getParentTransactionId())->getAdditionalInformation(self::TRANSPORT_PAYFLOW_TXN_ID); } return $payment->getParentTransactionId(); }
/** * Parent transaction id getter * * @param \Magento\Framework\Object $payment * @return string */ protected function _getParentTransactionId(\Magento\Framework\Object $payment) { return $payment->getParentTransactionId(); }
/** * Refund the amount with transaction id * * @param \Magento\Framework\Object $payment * @param float $amount * @return $this * @throws \Magento\Framework\Model\Exception */ protected function _refund(\Magento\Framework\Object $payment, $amount) { if ($amount <= 0) { throw new \Magento\Framework\Model\Exception(__('Invalid amount for refund.')); } if (!$payment->getParentTransactionId()) { throw new \Magento\Framework\Model\Exception(__('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->getResponseCode()) { case self::RESPONSE_CODE_APPROVED: if ($result->getResponseReasonCode() == self::RESPONSE_REASON_CODE_APPROVED) { if ($result->getTransactionId() != $payment->getParentTransactionId()) { $payment->setTransactionId($result->getTransactionId()); } $shouldCloseCaptureTransaction = $payment->getOrder()->canCreditmemo() ? 0 : 1; $payment->setIsTransactionClosed(1)->setShouldCloseParentTransaction($shouldCloseCaptureTransaction)->setTransactionAdditionalInfo($this->_realTransactionIdKey, $result->getTransactionId()); return $this; } throw new \Magento\Framework\Model\Exception($this->_wrapGatewayError($result->getResponseReasonText())); case self::RESPONSE_CODE_DECLINED: case self::RESPONSE_CODE_ERROR: throw new \Magento\Framework\Model\Exception($this->_wrapGatewayError($result->getResponseReasonText())); default: throw new \Magento\Framework\Model\Exception(__('Payment refunding error.')); } }