Example #1
0
 protected function _place($payment, $amount, $requestType)
 {
     $pagarme = Mage::getModel('pagarme/api');
     switch ($requestType) {
         case self::REQUEST_TYPE_AUTH_ONLY:
         case self::REQUEST_TYPE_AUTH_CAPTURE:
             $customer = Mage::helper('pagarme')->getCustomerInfoFromOrder($payment->getOrder());
             $data = new Varien_Object();
             $data->setPaymentMethod(Inovarti_Pagarme_Model_Api::PAYMENT_METHOD_CREDITCARD)->setAmount(Mage::helper('pagarme')->formatAmount($amount))->setCardHash($payment->getPagarmeCardHash())->setInstallments($payment->getInstallments())->setCapture($requestType == self::REQUEST_TYPE_AUTH_CAPTURE)->setCustomer($customer);
             if ($this->getConfigData('async')) {
                 $data->setAsync(true);
                 $data->setPostbackUrl(Mage::getUrl('pagarme/transaction_creditcard/postback'));
             }
             $transaction = $pagarme->charge($data);
             break;
         case self::REQUEST_TYPE_CAPTURE_ONLY:
             $transaction = $pagarme->capture($payment->getPagarmeTransactionId());
             break;
     }
     if ($transaction->getErrors()) {
         $messages = array();
         foreach ($transaction->getErrors() as $error) {
             $messages[] = $error->getMessage() . '.';
         }
         Mage::throwException(implode("\n", $messages));
     }
     if ($transaction->getStatus() == 'refused') {
         Mage::log($this->_wrapGatewayError($transaction->getStatusReason()), null, 'pagarme.log');
         Mage::throwException($this->_wrapGatewayError($transaction->getStatusReason()));
     }
     if ($payment->getPagarmeTransactionId()) {
         $payment->setTransactionId($payment->getPagarmeTransactionId() . '-' . Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE)->setParentTransactionId($payment->getParentTransactionId())->setIsTransactionClosed(0);
     } else {
         $payment->setCcOwner($transaction->getCardHolderName())->setCcLast4($transaction->getCardLastDigits())->setCcType(Mage::getSingleton('pagarme/source_cctype')->getTypeByBrand($transaction->getCardBrand()))->setPagarmeTransactionId($transaction->getId())->setPagarmeAntifraudScore($transaction->getAntifraudScore())->setTransactionId($transaction->getId())->setIsTransactionClosed(0);
     }
     $payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('status' => $transaction->getStatus()));
     if ($this->getConfigData('async')) {
         $payment->setIsTransactionPending(true);
     }
     return $this;
 }