/** * 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); }
/** * 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); }
/** * 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; }
/** * 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; }
/** * 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.')); } }
/** * 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; }
/** * 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; }
/** * 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); }
/** * Payment action getter compatible with payment model * * @see Mage_Sales_Model_Payment::place() * @return string */ public function getConfigPaymentAction() { return $this->_pro->getConfig()->getPaymentAction(); }