/**
  * 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;
 }
Example #2
0
 /**
  * Capture payment
  *
  * @param   Varien_Object $payment
  * @param   float $amount
  * @return  Mage_Payment_Model_Abstract
  */
 public function capture(Varien_Object $payment, $amount)
 {
     //parent::capture($payment, $amount);
     $authTransactionId = $payment->getParentTransactionId();
     if (!$authTransactionId) {
         return false;
         //$this->authorize($payment, $amount);
     }
     $request = $this->_getApiRequest();
     $request->setData('transaction_id', $authTransactionId)->setData('is_capture_complete', (int) $payment->getShouldCloseParentTransaction())->setData('amount', $amount)->setData('currency_code', $payment->getOrder()->getBaseCurrencyCode())->setData('order_id', $payment->getOrder()->getIncrementId());
     $api = $this->_getApi()->doCapture($request);
     $this->_importResultToPayment($payment, $api->getResponse());
     $apiResponse = $api->getResponse();
     if (isset($apiResponse['fraud']) && (bool) $apiResponse['fraud']) {
         $message = Mage::helper('enterprise_pbridge')->__('Merchant review is required for further processing.');
         $payment->getOrder()->setState(Mage_Sales_Model_Order::STATE_PROCESSING, Mage_Sales_Model_Order::STATUS_FRAUD, $message);
     }
     return $apiResponse;
 }
Example #3
0
 /**
  * Capture payment
  *
  * @param   Varien_Object $orderPayment
  * @return  Mage_Payment_Model_Abstract
  */
 public function capture(Varien_Object $payment, $amount)
 {
     //parent::capture($payment, $amount);
     $authTransactionId = $payment->getParentTransactionId();
     if (!$authTransactionId) {
         return false;
         //$this->authorize($payment, $amount);
     }
     $request = $this->_getApiRequest();
     $request->setData('transaction_id', $authTransactionId)->setData('is_capture_complete', (int) $payment->getShouldCloseParentTransaction())->setData('amount', $amount)->setData('currency_code', $payment->getOrder()->getBaseCurrencyCode())->setData('order_id', $payment->getOrder()->getIncrementId());
     $api = $this->_getApi()->doCapture($request);
     $this->_importResultToPayment($payment, $api->getResponse());
     return $api->getResponse();
 }
Example #4
0
 /**
  * Attempt to capture payment
  * Will return false if the payment is not supposed to be captured
  *
  * @param Varien_Object $payment
  * @param float $amount
  * @return false|null
  */
 public function capture(Varien_Object $payment, $amount)
 {
     $authTransactionId = $payment->getParentTransactionId();
     if (!$authTransactionId) {
         return false;
     }
     $api = $this->getApi()->setAuthorizationId($authTransactionId)->setCompleteType($payment->getShouldCloseParentTransaction() ? Mage_Paypal_Model_Config::CAPTURE_TYPE_COMPLETE : Mage_Paypal_Model_Config::CAPTURE_TYPE_NOTCOMPLETE)->setAmount($amount)->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setInvNum($payment->getOrder()->getIncrementId());
     $api->callDoCapture();
     // add capture transaction info
     $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(false);
     Mage::getModel('paypal/info')->importToPayment($api, $payment);
 }