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; }