public function capture(Varien_Object $payment, $amount) { $session = Mage::getSingleton('core/session'); $logger = Mage::helper('worldpay/logger'); if ($session->getData('wp_3dscompletionNeeded')) { $payment->setIsTransactionClosed(0); $payment->setSkipOrderProcessing(true); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setShouldCloseParentTransaction(1); $payment->setAdditionalInformation("worldpayOrderCode", $session->getData('wp_orderCode')); $payment->setLastTransId($session->getData('wp_orderCode')); $payment->setTransactionId($session->getData('wp_orderCode')); $session->setData('wp_3dscompletionNeeded', false); return $this; } $worldpayOrderCode = $payment->getData('last_trans_id'); if ($worldpayOrderCode) { $worldpay = $this->setupWorldpay(); try { $authorizationTransaction = $payment->getAuthorizationTransaction(); if ($authorizationTransaction) { $payment->setAdditionalInformation("worldpayOrderCode", $authorizationTransaction->getTxnId()); $worldpayOrderCode = $authorizationTransaction->getTxnId(); } else { $worldpayOrderCode = $payment->getAdditionalInformation('worldpayOrderCode'); } $worldpay->captureAuthorisedOrder($worldpayOrderCode, $amount * 100); $payment->setShouldCloseParentTransaction(1)->setIsTransactionClosed(1); $logger->log('Capture Order: ' . $session->getData('wp_orderCode') . ' success'); } catch (Exception $e) { $logger->log('Capture Order: ' . $session->getData('wp_orderCode') . ' failed with ' . $e->getMessage()); Mage::throwException('Payment failed, please try again later ' . $e->getMessage()); } } else { $payment->setAdditionalInformation('payment_type', 'capture'); return $this->createOrder($payment, $amount, false); } }
/** * Capture payment * * @param Mage_Sales_Model_Order_Payment $payment * @param float $amount * @return Mage_Paypal_Model_Express */ public function capture(Varien_Object $payment, $amount) { $authorizationTransaction = $payment->getAuthorizationTransaction(); $authorizationPeriod = abs(intval($this->getConfigData('authorization_honor_period'))); $maxAuthorizationNumber = abs(intval($this->getConfigData('child_authorization_number'))); $order = $payment->getOrder(); $isAuthorizationCreated = false; if ($payment->getAdditionalInformation($this->_isOrderPaymentActionKey)) { $voided = false; if (!$authorizationTransaction->getIsClosed() && $this->_isTransactionExpired($authorizationTransaction, $authorizationPeriod)) { //Save payment state and configure payment object for voiding $isCaptureFinal = $payment->getShouldCloseParentTransaction(); $captureTrxId = $payment->getTransactionId(); $payment->setShouldCloseParentTransaction(false); $payment->setParentTransactionId($authorizationTransaction->getTxnId()); $payment->unsTransactionId(); $payment->setVoidOnlyAuthorization(true); $payment->void(new Varien_Object()); //Revert payment state after voiding $payment->unsAuthorizationTransaction(); $payment->unsTransactionId(); $payment->setShouldCloseParentTransaction($isCaptureFinal); $voided = true; } if ($authorizationTransaction->getIsClosed() || $voided) { if ($payment->getAdditionalInformation($this->_authorizationCountKey) > $maxAuthorizationNumber - 1) { Mage::throwException(Mage::helper('paypal')->__('The maximum number of child authorizations is reached.')); } $api = $this->_callDoAuthorize($amount, $payment, $authorizationTransaction->getParentTxnId()); //Adding authorization transaction $this->_pro->importPaymentInfo($api, $payment); $payment->setTransactionId($api->getTransactionId()); $payment->setParentTransactionId($authorizationTransaction->getParentTxnId()); $payment->setIsTransactionClosed(false); $formatedPrice = $order->getBaseCurrency()->formatTxt($amount); if ($payment->getIsTransactionPending()) { $message = Mage::helper('paypal')->__('Authorizing amount of %s is pending approval on gateway.', $formatedPrice); } else { $message = Mage::helper('paypal')->__('Authorized amount of %s.', $formatedPrice); } $transaction = $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_AUTH, null, true, $message); $payment->setParentTransactionId($api->getTransactionId()); $isAuthorizationCreated = true; } //close order transaction if needed if ($payment->getShouldCloseParentTransaction()) { $orderTransaction = $payment->lookupTransaction(false, Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER); if ($orderTransaction) { $orderTransaction->setIsClosed(true); $order->addRelatedObject($orderTransaction); } } } if (false === $this->_pro->capture($payment, $amount)) { $this->_placeOrder($payment, $amount); } if ($isAuthorizationCreated && isset($transaction)) { $transaction->setIsClosed(true); } return $this; }
/** * Cancel payment abstract method * * @param Varien_Object $payment * * @return Mage_Payment_Model_Abstract */ public function cancel(Varien_Object $payment) { try { $transaction = $this->getHelper()->loadTransactionByPayment($payment->getId()); $order = $payment->getOrder(); Customweb_SaferpayCw_Model_ConfigurationAdapter::setStore($order); $adapter = $this->getHelper()->createContainer()->getBean('Customweb_Payment_BackendOperation_Adapter_Service_ICancel'); if ($transaction->getTransactionObject()->isCancelPossible()) { $adapter->cancel($transaction->getTransactionObject()); $transaction->save(); } if (!$transaction->getTransactionObject()->isCancelled() && $order->getStatus() != self::SAFERPAYCW_STATUS_PENDING) { $this->getHelper()->log("Method::cancel() Cancellation of payment is not possible" . print_r($transaction->getTransactionObject()->getErrorMessages(), true)); Mage::throwException($this->getHelper()->__('Canceling of this payment not possible!')); } if ($transaction->getTransactionObject()->isCancelled()) { $authTransaction = $payment->getAuthorizationTransaction(); if ($authTransaction) { $parentTxnId = $authTransaction->getTxnId(); if (method_exists($payment, 'lookupTransaction') && $payment->lookupTransaction($parentTxnId . '-void') === false) { $payment->setParentTransactionId($parentTxnId)->setIsTransactionClosed(true); $cancels = $transaction->getTransactionObject()->getCancels(); $cancel = end($cancels); $payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('TRANSACTIONID' => $transaction->getTransactionObject()->getPaymentId(), 'CANCELID' => $cancel->getCancelId(), 'STATUS' => $cancel->getStatus())); $this->_generateTransactionId($payment, Mage_Sales_Model_Order_Payment_Transaction::TYPE_VOID); $paymentTransaction = $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_VOID); $paymentTransaction->save(); } } } return $this; } catch (Exception $e) { $this->getHelper()->log('Method::cancel() ' . $e->getMessage()); Mage::getSingleton('core/session')->addError($e->getMessage()); throw $e; } }