/**
  * Get payflow transaction id from parent transaction
  *
  * @param Varien_Object $payment
  * @return string
  */
 protected function _getParentTransactionId(Varien_Object $payment)
 {
     if ($payment->getParentTransactionId()) {
         return $payment->getTransaction($payment->getParentTransactionId())->getAdditionalInformation(Mage_PaypalUk_Model_Pro::TRANSPORT_PAYFLOW_TXN_ID);
     }
     return $payment->getParentTransactionId();
 }
 public function wasLastTxnLessThan24HrsAgo(Varien_Object $payment)
 {
     $lastTxnId = $payment->getLastTransId();
     $lastTxn = $payment->getTransaction($lastTxnId);
     $timeOfLastTxn = $lastTxn->getData('created_at');
     //check if last txn was less than 24 hrs ago (86400 seconds == 24 hrs)
     return time() - strtotime($timeOfLastTxn) < 86400;
 }
Example #3
0
 /**
  * Capture payment through Paynova api
  *
  * @param Varien_Object $payment
  * @param decimal $amount
  * @return Paynova_Paynovapayment_Model_Abstract
  */
 public function captureInvoice(Varien_Object $payment)
 {
     $transaction = Mage::getModel('sales/order_payment_transaction')->getCollection()->addAttributeToFilter('order_id', array('eq' => $payment->getOrder()->getEntityId()))->getLastItem();
     $addData = $transaction->getAdditionalInformation(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS);
     $transaction_id = $addData['transID'];
     if (empty($transaction_id)) {
         $transaction_id = Mage::getSingleton('core/session')->getTransactionID();
     }
     if (empty($transaction_id)) {
         Mage::helper('paynovapayment')->log("Error. Missing transaction ID from order and cannot do capture.");
         Mage::throwException(Mage::helper('paynovapayment')->__('Error. Missing transaction ID.'));
     }
     $invoice = $payment->getCurrentInvoice();
     $transInformation = $payment->getTransaction($transaction_id)->getAdditionalInformation();
     $order_id = $transInformation['raw_details_info']['order_id'];
     $order_number = $transInformation['raw_details_info']['order_number'];
     $order = Mage::getModel('sales/order');
     $order->loadByIncrementId($order_number);
     $res['orderId'] = $order_id;
     $res['transactionId'] = $transaction_id;
     $res['totalAmount'] = $invoice->getGrandTotal();
     $res['invoiceId'] = $transaction_id;
     $items = $invoice->getAllItems();
     $itemcount = count($items);
     $data = array();
     $i = 0;
     $linenumber = 1;
     $unitMeasure = Mage::getStoreConfig('paynovapayment/advanced_settings/product_unit');
     if (empty($unitMeasure)) {
         $unitMeasure = "pcs";
     }
     $shippingname = Mage::getStoreConfig('paynovapayment/advanced_settings/shipping_name');
     if (empty($shippingname)) {
         $shippingname = "Shipping";
     }
     $shippingsku = Mage::getStoreConfig('paynovapayment/advanced_settings/shipping_sku');
     if (empty($shippingsku)) {
         $shippingsku = "Shipping";
     }
     foreach ($items as $itemId => $item) {
         $orderItem = $item->getOrderItem();
         $product = Mage::helper('catalog/product')->getProduct($item->getSku(), Mage::app()->getStore()->getId(), 'sku');
         $productUrl = Mage::getUrl($product->getUrlPath());
         $description = $product->getShortDescription();
         if (empty($description)) {
             $description = $orderItem->getName();
         }
         $itemtype = $orderItem->getProductType();
         $lineqty = intval($item->getQty());
         // if product has parent - get parent qty
         if ($item->getParentItemID() and $item->getParentItemID() > 0) {
             $parentQuoteItem = Mage::getModel("sales/quote_item")->load($item->getParentItemID());
             $parentqty = intval($parentQuoteItem->getQty());
             $lineqty = $lineqty * $parentqty;
         }
         $lineprice = $orderItem->getPrice();
         $linetax = $orderItem->getTaxPercent();
         $unitAmountExcludingTax = $orderItem->getPrice();
         $linetaxamount = $lineqty * $lineprice * ($linetax / 100);
         $linetotalamount = $lineqty * $unitAmountExcludingTax + $linetaxamount;
         // If item has discount
         if ($orderItem->getDiscountAmount() and $orderItem->getDiscountAmount() > 0) {
             $linediscountamount = $orderItem->getDiscountAmount();
             $itemdiscount = $linediscountamount / $lineqty;
             $unitAmountExcludingTax = $lineprice - $itemdiscount;
             $linetaxamount = $lineqty * $unitAmountExcludingTax * ($linetax / 100);
             $total1 = $lineqty * $unitAmountExcludingTax;
             $linetotalamount = $total1 + $linetaxamount;
             $linetax1 = $lineqty * $unitAmountExcludingTax;
             $linetax2 = $linetax / 100;
             $linetaxamount = $linetax1 * $linetax2;
         }
         $res['lineItems'][$itemId]['id'] = $linenumber;
         $res['lineItems'][$itemId]['articleNumber'] = substr($orderItem->getSku(), 0, 50);
         $res['lineItems'][$itemId]['name'] = $item->getName();
         $res['lineItems'][$itemId]['quantity'] = $lineqty;
         $res['lineItems'][$itemId]['unitMeasure'] = $unitMeasure;
         $res['lineItems'][$itemId]['description'] = $description;
         $res['lineItems'][$itemId]['productUrl'] = $productUrl;
         if ($itemtype == "bundle") {
             $res['lineItems'][$itemId]['unitAmountExcludingTax'] = 0;
             $res['lineItems'][$itemId]['taxPercent'] = 0;
             $res['lineItems'][$itemId]['totalLineTaxAmount'] = 0;
             $res['lineItems'][$itemId]['totalLineAmount'] = 0;
         } else {
             $res['lineItems'][$itemId]['unitAmountExcludingTax'] = round($unitAmountExcludingTax, 2);
             $res['lineItems'][$itemId]['taxPercent'] = round($linetax, 2);
             $res['lineItems'][$itemId]['totalLineTaxAmount'] = round($linetaxamount, 2);
             $res['lineItems'][$itemId]['totalLineAmount'] = round($linetotalamount, 2);
         }
         $i++;
         $linenumber++;
     }
     if ($order->getShippingAmount() and $order->getShippingAmount() > 0) {
         $quoteid = $order->getQuoteId();
         $quote = Mage::getModel('sales/quote')->load($quoteid);
         $itemId++;
         $res['lineItems'][$itemId]['id'] = $linenumber;
         $res['lineItems'][$itemId]['articleNumber'] = substr($shippingsku, 0, 50);
         $res['lineItems'][$itemId]['name'] = $shippingname;
         $res['lineItems'][$itemId]['quantity'] = 1;
         $res['lineItems'][$itemId]['unitMeasure'] = $unitMeasure;
         $res['lineItems'][$itemId]['unitAmountExcludingTax'] = round($order->getShippingAmount(), 2);
         $res['lineItems'][$itemId]['taxPercent'] = Mage::helper('paynovapayment')->getShippingTaxPercentFromQuote($quote);
         $res['lineItems'][$itemId]['totalLineTaxAmount'] = round($order->getShippingTaxAmount(), 2);
         $res['lineItems'][$itemId]['totalLineAmount'] = round($order->getShippingInclTax(), 2);
         $res['lineItems'][$itemId]['description'] = $description;
         $res['lineItems'][$itemId]['productUrl'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
     }
     $output = $this->setCurlCall($res, '/orders/' . $order_id . '/transactions/' . $transaction_id . '/finalize/' . $res['totalAmount']);
     $order->save();
     $status = $output->status;
     if ($status->statusKey == 'PAYMENT_COMPLETED') {
         $status->isSuccess = true;
         $output->transactionId = 'Order has been finalized';
     }
     if ($status->isSuccess) {
         $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING);
         $order->save();
         $payment->setStatus(self::STATUS_APPROVED)->setTransactionId($output->transactionId)->setIsTransactionClosed(0);
         return $status->isSuccess;
     } else {
         $error = $status->statusMessage;
         $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, Mage::helper('paynovapayment')->__($error));
         $order->save();
         Mage::throwException("{$error}");
         $this->_redirect('checkout/onepage');
     }
 }
Example #4
0
 /**
  * Cancel payment
  * @param   Varien_Object $payment
  * @return  $this
  */
 public function cancel(Varien_Object $payment)
 {
     Mage::helper('payex/tools')->addToDebug('Action: Cancel');
     if (!$payment->getLastTransId()) {
         Mage::throwException(Mage::helper('paygate')->__('Invalid transaction ID.'));
     }
     // Load transaction Data
     $transactionId = $payment->getLastTransId();
     $transaction = $payment->getTransaction($transactionId);
     if (!$transaction) {
         Mage::throwException(Mage::helper('payex')->__('Can\'t load last transaction.'));
     }
     // Get Transaction Details
     $details = $this->fetchTransactionInfo($payment, $transactionId);
     // Not to execute for Sale transactions
     if ((int) $details['transactionStatus'] !== 3) {
         Mage::throwException(Mage::helper('payex')->__('Unable to execute cancel.'));
     }
     $transactionNumber = $details['transactionNumber'];
     $order_id = $details['orderId'];
     if (!$order_id) {
         $order_id = $payment->getOrder()->getId();
     }
     // Call PXOrder.Cancel2
     $params = array('accountNumber' => '', 'transactionNumber' => $transactionNumber);
     $result = Mage::helper('payex/api')->getPx()->Cancel2($params);
     Mage::helper('payex/tools')->addToDebug('PxOrder.Cancel2:' . $result['description'], $order_id);
     // Check Results
     if ($result['code'] === 'OK' && $result['errorCode'] === 'OK' && $result['description'] === 'OK') {
         // Add Cancel Transaction
         $payment->setStatus(self::STATUS_DECLINED)->setTransactionId($result['transactionNumber'])->setIsTransactionClosed(1);
         // Closed
         // Add Transaction fields
         $payment->setAdditionalInformation(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, $result);
         return $this;
     }
     // Show Error
     Mage::helper('payex/tools')->throwPayExException($result, 'PxOrder.Cancel2');
     return $this;
 }
Example #5
0
 /**
  * CardSave VOID functionality
  * Note: if a transaction (payment) is once voided (canceled) it isn't possible to redo this action
  *
  * @param Varien_Object $payment
  * @return unknown
  */
 public function csvVoid(Varien_Object $payment)
 {
     $error = false;
     $szTransactionType = "VOID";
     $orderStatus = "csv_voided";
     $arAdditionalInformationArray;
     // attempt a VOID and accordingly to the last saved transaction id (CrossReference) set the new message
     $szLastTransId = $payment->getLastTransId();
     $transaction = $payment->getTransaction($szLastTransId);
     $szMagentoTxnType = $transaction->getTxnType();
     $szMessage = "Payment voided";
     if ($szMagentoTxnType == "capture") {
         $szMessage = "Payment voided";
     } else {
         if ($szMagentoTxnType == "authorization") {
             $szMessage = "PreAuthorization voided";
         } else {
             if ($szMagentoTxnType == "refund") {
                 $szMessage = "Refund voided";
             } else {
                 // general message
                 $szMessage = "Payment voided";
             }
         }
     }
     $error = $this->_runCrossReferenceTransaction($payment, $szTransactionType);
     if ($error === false) {
         $order = $payment->getOrder();
         $invoices = $order->getInvoiceCollection();
         $payment = $order->getPayment();
         $arAdditionalInformationArray = $payment->getAdditionalInformation();
         $arAdditionalInformationArray["Voided"] = 1;
         $payment->setAdditionalInformation($arAdditionalInformationArray);
         $payment->save();
         // cancel the invoices
         foreach ($invoices as $invoice) {
             $invoice->cancel();
             $invoice->save();
         }
         // udpate the order
         $order->setActionBy($payment->getLggdInAdminUname())->setActionDate(date('Y-m-d H:i:s'))->setVoided(1)->setState('canceled', $orderStatus, $szMessage, false);
         $order->save();
         $result = "0";
     } else {
         $result = $error;
     }
     return $result;
 }