/** * Get payflow transaction id from parent transaction * * @param \Magento\Framework\DataObject $payment * @return string */ protected function _getParentTransactionId(\Magento\Framework\DataObject $payment) { if ($payment->getParentTransactionId()) { return $this->transactionRepository->getByTransactionId($payment->getParentTransactionId(), $payment->getId(), $payment->getOrder()->getId())->getAdditionalInformation(self::TRANSPORT_PAYFLOW_TXN_ID); } return $payment->getParentTransactionId(); }
/** * Parent transaction id getter * * @param \Magento\Framework\DataObject $payment * @return string */ protected function _getParentTransactionId(\Magento\Framework\DataObject $payment) { return $payment->getParentTransactionId(); }
/** * 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.')); } }