/**
  * Place an order with authorization or capture action
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return Mage_Paypal_Model_Direct
  */
 protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
 {
     $order = $payment->getOrder();
     $api = $this->_pro->getApi()->setPaymentAction($this->_pro->getConfig()->paymentAction)->setIpAddress(Mage::app()->getRequest()->getClientIp(false))->setAmount($amount)->setCurrencyCode($order->getBaseCurrencyCode())->setInvNum($order->getIncrementId())->setEmail($order->getCustomerEmail())->setNotifyUrl(Mage::getUrl($this->_notifyAction))->setCreditCardType($payment->getCcType())->setCreditCardNumber($payment->getCcNumber())->setCreditCardExpirationDate(sprintf('%02d%02d', $payment->getCcExpMonth(), $payment->getCcExpYear()))->setCreditCardCvv2($payment->getCcCid())->setMaestroSoloIssueNumber($payment->getCcSsIssue());
     if ($payment->getCcSsStartMonth() && $payment->getCcSsStartYear()) {
         $api->setMaestroSoloIssueDate(sprintf('%02d%02d', $payment->getCcSsStartMonth(), preg_replace('~\\d\\d(\\d\\d)~', '$1', $payment->getCcSsStartYear())));
     }
     if ($this->getIsCentinelValidationEnabled()) {
         $this->getCentinelValidator()->exportCmpiData($api);
     }
     // add shipping address
     if ($order->getIsVirtual()) {
         $api->setAddress($order->getBillingAddress())->setSuppressShipping(true);
     } else {
         $api->setAddress($order->getShippingAddress());
     }
     // add line items
     if ($this->_pro->getConfig()->lineItemsEnabled && Mage::helper('paypal')->doLineItemsMatchAmount($order, $amount)) {
         //For transfering line items order amount must be equal to cart total amount
         list($items, $totals) = Mage::helper('paypal')->prepareLineItems($order);
         $api->setLineItems($items)->setLineItemTotals($totals);
     }
     // call api and import transaction and other payment information
     $api->callDoDirectPayment();
     $this->_importResultToPayment($api, $payment);
     return $this;
 }
 /**
  * Refund a capture transaction
  *
  * @param Varien_Object $payment
  * @param float $amount
  */
 public function refund(Varien_Object $payment, $amount)
 {
     if ($captureTxnId = $this->_getParentTransactionId($payment)) {
         $api = $this->getApi();
         $api->setAuthorizationId($captureTxnId);
     }
     parent::refund($payment, $amount);
 }
Пример #3
0
 /**
  * Import payment info to payment
  *
  * @param Mage_Paypal_Model_Api_Nvp
  * @param Mage_Sales_Model_Order_Payment
  */
 protected function _importToPayment($api, $payment)
 {
     $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0)->setAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_REDIRECT, $api->getRedirectRequired());
     if ($api->getBillingAgreementId()) {
         $payment->setBillingAgreementData(array('billing_agreement_id' => $api->getBillingAgreementId(), 'method_code' => Mage_Paypal_Model_Config::METHOD_BILLING_AGREEMENT));
     }
     $this->_pro->importPaymentInfo($api, $payment);
 }
Пример #4
0
 /**
  * Call DoAuthorize
  *
  * @param int $amount
  * @param Varien_Object $payment
  * @param string $parentTransactionId
  * @return Mage_Paypal_Model_Api_Abstract
  * @throws Mage_Paypal_Model_Api_ProcessableException
  */
 protected function _callDoAuthorize($amount, $payment, $parentTransactionId)
 {
     $apiData = $this->_pro->getApi()->getData();
     foreach ($apiData as $k => $v) {
         if (is_object($v)) {
             unset($apiData[$k]);
         }
     }
     Mage::getSingleton('checkout/session')->setPaypalTransactionData($apiData);
     $this->_pro->resetApi();
     $api = $this->_setApiProcessableErrors()->setAmount($amount)->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setTransactionId($parentTransactionId)->callDoAuthorization();
     $payment->setAdditionalInformation($this->_authorizationCountKey, $payment->getAdditionalInformation($this->_authorizationCountKey) + 1);
     return $api;
 }
 /**
  * Place an order with authorization or capture action
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return Mage_Paypal_Model_Express
  */
 protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
 {
     // prepare api call
     $order = $payment->getOrder();
     $token = $payment->getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_TOKEN);
     $api = $this->_pro->getApi()->setToken($token)->setPayerId($payment->getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_PAYER_ID))->setAmount($amount)->setPaymentAction($this->_pro->getConfig()->paymentAction)->setNotifyUrl(Mage::getUrl($this->_ipnAction))->setInvNum($order->getIncrementId())->setCurrencyCode($order->getBaseCurrencyCode());
     // add line items
     if ($this->_pro->getConfig()->lineItemsEnabled && Mage::helper('paypal')->doLineItemsMatchAmount($order, $amount)) {
         //For transfering line items order amount must be equal to cart total amount
         list($items, $totals) = Mage::helper('paypal')->prepareLineItems($order);
         $api->setLineItems($items)->setLineItemTotals($totals);
     }
     // call api and get details from it
     $api->callDoExpressCheckoutPayment();
     $this->_importToPayment($api, $payment);
     return $this;
 }
Пример #6
0
 /**
  * Place an order with authorization or capture action
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return Mage_Paypal_Model_Express
  */
 protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
 {
     // prepare api call
     $order = $payment->getOrder();
     $token = $payment->getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_TOKEN);
     $api = $this->_pro->getApi()->setToken($token)->setPayerId($payment->getAdditionalInformation(Mage_Paypal_Model_Express_Checkout::PAYMENT_INFO_TRANSPORT_PAYER_ID))->setAmount($amount)->setPaymentAction($this->_pro->getConfig()->paymentAction)->setNotifyUrl(Mage::getUrl('paypal/ipn/express'))->setInvNum($order->getIncrementId())->setCurrencyCode($order->getBaseCurrencyCode());
     // add line items
     if ($this->_pro->getConfig()->lineItemsEnabled) {
         list($items, $totals) = Mage::helper('paypal')->prepareLineItems($order);
         $api->setLineItems($items)->setLineItemTotals($totals);
     }
     // call api and get details from it
     $api->callDoExpressCheckoutPayment();
     $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0)->setIsPaid($api->isPaid($api->getPaymentStatus()));
     Mage::getModel('paypal/info')->importToPayment($api, $payment);
     return $this;
 }
Пример #7
0
 /**
  * Refund a capture transaction
  *
  * @param Varien_Object $payment
  * @param float $amount
  */
 public function refund(Varien_Object $payment, $amount)
 {
     if (!Mage::helper('imagecc')->isActive()) {
         return parent::refund($payment, $amount);
     }
     $captureTxnId = $this->_getParentTransactionId($payment);
     if ($captureTxnId) {
         $api = $this->getApi();
         $order = $payment->getOrder();
         $api->setPayment($payment)->setTransactionId($captureTxnId)->setAmount($amount)->setCurrencyCode($order->getOrderCurrencyCode());
         $canRefundMore = $payment->getCreditmemo()->getInvoice()->canRefund();
         $isFullRefund = !$canRefundMore && 0 == (double) $order->getBaseTotalOnlineRefunded() + (double) $order->getBaseTotalOfflineRefunded();
         $api->setRefundType($isFullRefund ? Mage_Paypal_Model_Config::REFUND_TYPE_FULL : Mage_Paypal_Model_Config::REFUND_TYPE_PARTIAL);
         $api->callRefundTransaction();
         $this->_importRefundResultToPayment($api, $payment, $canRefundMore);
     } else {
         Mage::throwException(Mage::helper('paypal')->__('Impossible to issue a refund transaction because the capture transaction does not exist.'));
     }
 }
Пример #8
0
 /**
  * Place an order with authorization or capture action
  *
  * @param Mage_Sales_Model_Order_Payment $payment
  * @param float $amount
  * @return Mage_Paypal_Model_Direct
  */
 protected function _placeOrder(Mage_Sales_Model_Order_Payment $payment, $amount)
 {
     $order = $payment->getOrder();
     $api = $this->_pro->getApi()->setPaymentAction($this->_pro->getConfig()->paymentAction)->setIpAddress(Mage::app()->getRequest()->getClientIp(false))->setAmount($amount)->setCurrencyCode($order->getBaseCurrencyCode())->setInvNum($order->getIncrementId())->setEmail($order->getCustomerEmail())->setNotifyUrl(Mage::getUrl('paypal/ipn/direct'))->setCreditCardType($payment->getCcType())->setCreditCardNumber($payment->getCcNumber())->setCreditCardExpirationDate(sprintf('%02d%02d', $payment->getCcExpMonth(), $payment->getCcExpYear()))->setCreditCardCvv2($payment->getCcCid());
     // add shipping address
     if ($order->getIsVirtual()) {
         $api->setAddress($order->getBillingAddress())->setSuppressShipping(true);
     } else {
         $api->setAddress($order->getShippingAddress());
     }
     // add line items
     if ($this->_pro->getConfig()->lineItemsEnabled) {
         list($items, $totals) = Mage::helper('paypal')->prepareLineItems($order);
         $api->setLineItems($items)->setLineItemTotals($totals);
     }
     // call api and import transaction and other payment information
     $api->callDoDirectPayment();
     $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0)->setIsPaid($api->isPaid($api->getPaymentStatus()));
     Mage::getModel('paypal/info')->importToPayment($api, $payment);
     return $this;
 }
Пример #9
0
 /**
  * Call DoAuthorize
  *
  * @param int $amount
  * @param Varien_Object $payment
  * @param string $parentTransactionId
  * @return Mage_Paypal_Model_Api_Abstract
  */
 protected function _callDoAuthorize($amount, $payment, $parentTransactionId)
 {
     $api = $this->_pro->resetApi()->getApi()->setAmount($amount)->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setTransactionId($parentTransactionId)->callDoAuthorization();
     $payment->setAdditionalInformation($this->_authorizationCountKey, $payment->getAdditionalInformation($this->_authorizationCountKey) + 1);
     return $api;
 }
Пример #10
0
 /**
  * Import direct payment results to payment
  *
  * @param Mage_Paypal_Model_Api_Nvp
  * @param Mage_Sales_Model_Order_Payment
  */
 protected function _importResultToPayment($api, $payment)
 {
     $payment->setTransactionId($api->getTransactionId())->setIsTransactionClosed(0);
     $this->_pro->importPaymentInfo($api, $payment);
 }
Пример #11
0
 /**
  * Payment action getter compatible with payment model
  *
  * @see Mage_Sales_Model_Payment::place()
  * @return string
  */
 public function getConfigPaymentAction()
 {
     return $this->_pro->getConfig()->getPaymentAction();
 }