public function capture(Varien_Object $payment, $amount) { $payment->setCcTransId($payment->getOrder()->getIncrementId() . date("His")); $this->setAmount($amount)->setPayment($payment); $result = $this->_call($payment); if ($result === false) { $e = $this->getError(); if (isset($e['message'])) { $message = Mage::helper('westpac')->__('There has been an error processing your payment.') . ' ' . $e['message']; } else { $message = Mage::helper('westpac')->__('There has been an error processing your payment. Please try later or contact us for help.'); } Mage::throwException($message); } else { if ($result['response.summaryCode'] === '0') { $payment->setStatus(self::STATUS_APPROVED)->setLastTransId($this->getTransactionId()); } else { Mage::log($result); if (isset($result["response.responseCode"]) && isset($result["response.text"])) { Mage::throwException("Error " . $result["response.responseCode"] . ": " . $result["response.text"]); } elseif (isset($result["response.text"])) { Mage::throwException("Error: " . $result["response.text"]); } else { Mage::throwException("There has been an error processing your payment. Please try later or contact us for help."); } } } }
/** * Making right API call for current trasaction * * @param Varien_Object $payment * @return Mage_Paypal_Model_Express */ public function placeOrder(Varien_Object $payment) { $api = $this->getApi(); $api->setAmount($payment->getOrder()->getBaseGrandTotal())->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setInvNum($this->getQuote()->getReservedOrderId()); if ($api->callDoExpressCheckoutPayment() !== false) { $payment->setStatus('APPROVED')->setPayerId($api->getPayerId()); if ($this->getPaymentAction() == Mage_Paypal_Model_Api_Nvp::PAYMENT_TYPE_AUTH) { $payment->setCcTransId($api->getTransactionId()); } else { $payment->setLastTransId($api->getTransactionId()); } } else { $e = $api->getError(); die($e['short_message'] . ': ' . $e['long_message']); } return $this; }
/** * Authorize or Capture payment * * @param Varien_Object|Mage_Sales_Model_Order_Payment $payment * @param float $amount * @param bool $capture * @return $this */ private function _authorize(Varien_Object $payment, $amount, $capture) { $order = $payment->getOrder(); /* @var $order Mage_Sales_Model_Order */ $multiToken = false; $cardData = null; $additionalData = new Varien_Object($payment->getAdditionalData() ? unserialize($payment->getAdditionalData()) : null); $secureToken = $additionalData->getSecuresubmitToken() ? $additionalData->getSecuresubmitToken() : null; $saveCreditCard = !!(bool) $additionalData->getCcSaveFuture(); $customerId = $additionalData->getCustomerId(); if ($saveCreditCard) { $multiToken = true; $cardData = new HpsCreditCard(); $cardData->number = $payment->getCcLast4(); $cardData->expYear = $payment->getCcExpYear(); $cardData->expMonth = $payment->getCcExpMonth(); } $chargeService = $this->_getChargeService(); $cardHolder = $this->_getCardHolderData($order); $details = $this->_getTxnDetailsData($order); $cardOrToken = new HpsTokenData(); $cardOrToken->tokenValue = $secureToken; try { if ($capture) { if ($payment->getCcTransId()) { $response = $chargeService->capture($payment->getCcTransId(), $amount); } else { $response = $chargeService->charge($amount, strtolower($order->getBaseCurrencyCode()), $cardOrToken, $cardHolder, $multiToken, $details); } } else { $response = $chargeService->authorize($amount, strtolower($order->getBaseCurrencyCode()), $cardOrToken, $cardHolder, $multiToken, $details); } $this->_debugChargeService($chargeService); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setLastTransId($response->transactionId); $payment->setCcTransId($response->transactionId); $payment->setTransactionId($response->transactionId); $payment->setIsTransactionClosed(0); if ($multiToken) { $tokenData = $response->tokenData; /* @var $tokenData HpsTokenData */ if ($tokenData->responseCode == '0') { if ($customerId > 0) { Mage::helper('hps_securesubmit')->saveMultiToken($response->tokenData->tokenValue, $cardData, $response->cardType, $customerId); } else { Mage::helper('hps_securesubmit')->saveMultiToken($response->tokenData->tokenValue, $cardData, $response->cardType); } } else { Mage::log('Requested multi token has not been generated for the transaction # ' . $response->transactionId, Zend_Log::WARN); } } } catch (HpsCreditException $e) { Mage::logException($e); $this->_debugChargeService($chargeService, $e); $payment->setStatus(self::STATUS_DECLINED); $this->throwUserError($e->getMessage(), $e->resultText, TRUE); } catch (HpsException $e) { $this->_debugChargeService($chargeService, $e); $payment->setStatus(self::STATUS_ERROR); $this->throwUserError($e->getMessage(), NULL, TRUE); } catch (Exception $e) { $this->_debugChargeService($chargeService, $e); Mage::logException($e); $payment->setStatus(self::STATUS_ERROR); $this->throwUserError($e->getMessage()); } return $this; }
/** * void. * * Handles reverse transactions. * * @param Varien_Object $payment * @param int/float $amount * * @return Mage_Payment_Model_Method_Cc $this. Failure will throw Mage::throwException('description') */ public function void(Varien_Object $payment) { if ($this->getDebug()) { $writer = new Zend_Log_Writer_Stream($this->getLogPath()); $logger = new Zend_Log($writer); } $amount = $payment->getOrder()->getData('grand_total'); $bankRespID = $payment->getCcTransId(); if (!$bankRespID) { Mage::throwException('Cannot issue a void on this transaction: bank response id is missing.'); } if (!$amount) { Mage::throwException('Cannot issue a void on this transaction: transaction amount is missing.'); } //Create the transaction object $sxml = new securexml_transaction($this->getMode(NO_ANTIFRAUD), $this->getUsername(), $this->getPassword()); $transaction_id = $payment->getOrder()->getIncrementId(); //Issue a reverse transaction if ($sxml->processReverse($amount, $transaction_id, $bankRespID)) { $transaction_id = $sxml->getResult('transaction_id'); $payment->setCcTransId('' . $transaction_id); $payment->setTransactionId('' . $transaction_id); if ($this->getDebug()) { $logger->info('Reverse Approved. Response ID: ' . $transaction_id); } } else { $error = $sxml->getError(); if ($this->getDebug()) { $logger->info('Reverse Declined. ' . $error); } Mage::throwException('' . $error); } return $this; }
/** * Success response processor * * @param string $request * @param mixed $result * @param Varien_Object $payment * */ protected function _beforeProcessResponse($request, $result, Varien_Object $payment) { $action = explode('.', $request['PAYMENT.CODE']); if (!isset($action[1])) { Mage::throwException(Mage::helper('moneybookerspsp')->__('MoneybookersPSP: Wrong response data, method is missing')); } $method = strtoupper($action[0]); $action = strtoupper($action[1]); switch ((string) $result->Transaction->Processing->Result) { case 'ACK': switch ($action) { case self::PAYMENT_TYPE_PREAUTHORIZE: if ((string) $result->Transaction->Processing->Result == 'ACK') { $payment->setLastTransId((string) $result->Transaction->Identification->UniqueID); $payment->setCcTransId((string) $result->Transaction->Identification->UniqueID)->setAmountAuthorized($payment->getOrder()->getTotalDue())->setBaseAmountAuthorized($payment->getOrder()->getBaseTotalDue())->setBaseAmountPaid(0)->setAmountPaid(0); $payment->save(); $payment->getOrder()->setCustomerNote(Mage::helper('moneybookerspsp')->__('Payment has been preauthorized.')); return true; } else { Mage::throwException($result->Transaction->Processing->Return . ' (' . $result->Transaction->Processing->Return['code'] . ')'); } break; case self::PAYMENT_TYPE_DEBIT: if ((string) $result->Transaction->Processing->Result == 'ACK') { $payment->setLastTransId((string) $result->Transaction->Identification->UniqueID); $payment->setCcTransId((string) $result->Transaction->Identification->UniqueID); $payment->save(); $payment->getOrder()->setCustomerNote(Mage::helper('moneybookerspsp')->__('Payment has been authorized and captured.')); return true; } else { Mage::throwException($result->Transaction->Processing->Return . ' (' . $result->Transaction->Processing->Return['code'] . ')'); } break; case self::PAYMENT_TYPE_CAPTURE: $payment->getOrder()->setCustomerNote(Mage::helper('moneybookerspsp')->__('Payment has been captured.')); break; case self::PAYMENT_TYPE_REFUND: $payment->getOrder()->setCustomerNote(Mage::helper('moneybookerspsp')->__('Payment has been refunded.')); break; case self::PAYMENT_TYPE_REBILL: $payment->getOrder()->setCustomerNote(Mage::helper('moneybookerspsp')->__('Payment has been reversed.')); break; } break; case 'NOK': switch ($action) { case self::PAYMENT_TYPE_PREAUTHORIZE: break; case self::PAYMENT_TYPE_DEBIT: break; } break; } }
/** * Authorize or Capture payment * * @param Varien_Object|Mage_Sales_Model_Order_Payment $payment * @param float $amount * @param bool $capture * @return $this */ private function _authorize(Varien_Object $payment, $amount, $capture) { $order = $payment->getOrder(); /* @var $order Mage_Sales_Model_Order */ $multiToken = false; $cardData = null; $additionalData = new Varien_Object($payment->getAdditionalData() ? unserialize($payment->getAdditionalData()) : null); $secureToken = $additionalData->getSecuresubmitToken() ? $additionalData->getSecuresubmitToken() : null; $saveCreditCard = !!(bool) $additionalData->getCcSaveFuture(); $customerId = $additionalData->getCustomerId(); $giftService = $this->_getGiftService(); $giftCardNumber = $additionalData->getGiftcardNumber(); if ($giftCardNumber) { // 1. check balance $giftcard = new HpsGiftCard(); $giftcard->number = $giftCardNumber; $giftResponse = $giftService->balance($giftcard); // 2. is balance > amount? if ($giftResponse->balanceAmount > $amount) { // 2.yes. process full to gift try { if (strpos($this->getConfigData('secretapikey'), '_cert_') !== false) { $giftresp = $giftService->sale($giftcard, 10.0); } else { $giftresp = $giftService->sale($giftcard, $amount); } $order->addStatusHistoryComment('Used Heartland Gift Card ' . $giftCardNumber . ' for amount $' . $amount . '. [full payment]'); $payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('gift_card_number' => $giftCardNumber, 'gift_card_transaction' => $giftresp->transactionId, 'gift_card_amount_charged' => $amount)); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setLastTransId($response->transactionId); $payment->setTransactionId($response->transactionId); $payment->setIsTransactionClosed(0); return $this; } catch (Exception $e) { Mage::logException($e); $payment->setStatus(self::STATUS_ERROR); $this->throwUserError($e->getMessage(), null, true); } } else { // 2.no. process full gift card amt and card process remainder $giftresp = $giftService->sale($giftcard, $giftResponse->balanceAmount); $order->addStatusHistoryComment('Used Heartland Gift Card ' . $giftCardNumber . ' for amount $' . $giftResponse->balanceAmount . '. [partial payment]')->save(); $payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS, array('gift_card_number' => $giftCardNumber, 'gift_card_transaction' => $giftresp->transactionId, 'gift_card_amount_charged' => $giftResponse->balanceAmount)); $payment->setAmount($giftResponse->balanceAmount)->save(); $amount = $amount - $giftResponse->balanceAmount; // remainder // 3. TODO: if the card payment fails later, refund the gift transaction } } if ($saveCreditCard) { $multiToken = true; $cardData = new HpsCreditCard(); $cardData->number = $payment->getCcLast4(); $cardData->expYear = $payment->getCcExpYear(); $cardData->expMonth = $payment->getCcExpMonth(); } $chargeService = $this->_getChargeService(); $cardHolder = $this->_getCardHolderData($order); $details = $this->_getTxnDetailsData($order); $cardOrToken = new HpsTokenData(); $cardOrToken->tokenValue = $secureToken; try { if ($capture) { if ($payment->getCcTransId()) { $response = $chargeService->capture($payment->getCcTransId(), $amount); } else { $response = $chargeService->charge($amount, strtolower($order->getBaseCurrencyCode()), $cardOrToken, $cardHolder, $multiToken, $details); } } else { $response = $chargeService->authorize($amount, strtolower($order->getBaseCurrencyCode()), $cardOrToken, $cardHolder, $multiToken, $details); } $this->_debugChargeService($chargeService); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setLastTransId($response->transactionId); $payment->setCcTransId($response->transactionId); $payment->setTransactionId($response->transactionId); $payment->setIsTransactionClosed(0); if ($giftCardNumber) { $order->addStatusHistoryComment('Remaining amount to be charged to credit card ' . $this->_formatAmount($amount) . '. [partial payment]')->save(); } if ($multiToken) { $tokenData = $response->tokenData; /* @var $tokenData HpsTokenData */ if ($tokenData->responseCode == '0') { if ($customerId > 0) { Mage::helper('hps_securesubmit')->saveMultiToken($response->tokenData->tokenValue, $cardData, $response->cardType, $customerId); } else { Mage::helper('hps_securesubmit')->saveMultiToken($response->tokenData->tokenValue, $cardData, $response->cardType); } } else { Mage::log('Requested multi token has not been generated for the transaction # ' . $response->transactionId, Zend_Log::WARN); } } } catch (HpsCreditException $e) { Mage::logException($e); $this->getFraudSettings(); $this->_debugChargeService($chargeService, $e); // refund gift (if used) if ($giftCardNumber) { $order->addStatusHistoryComment('Reversed Heartland Gift Card ' . $giftCardNumber . ' for amount $' . $giftResponse->balanceAmount . '. [full reversal]')->save(); $giftResponse = $giftService->reverse($giftcard, $giftResponse->balanceAmount); } if ($this->_allow_fraud && $e->getCode() == HpsExceptionCodes::POSSIBLE_FRAUD_DETECTED) { // we can skip the card saving if it fails for possible fraud there will be no token. if ($this->_email_fraud && $this->_fraud_address != '') { // EMAIL THE PEOPLE $this->sendEmail($this->_fraud_address, $this->_fraud_address, 'Suspicious order (' . $order->getIncrementId() . ') allowed', 'Hello,<br><br>Heartland has determined that you should review order ' . $order->getRealOrderId() . ' for the amount of ' . $amount . '.'); } $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setIsTransactionClosed(0); } else { $payment->setStatus(self::STATUS_ERROR); if ($e->getCode() == HpsExceptionCodes::POSSIBLE_FRAUD_DETECTED) { $this->throwUserError($this->_fraud_text, null, true); } else { $this->throwUserError($e->getMessage(), null, true); } } } catch (HpsException $e) { $this->_debugChargeService($chargeService, $e); $payment->setStatus(self::STATUS_ERROR); $this->throwUserError($e->getMessage(), null, true); } catch (Exception $e) { $this->_debugChargeService($chargeService, $e); Mage::logException($e); $payment->setStatus(self::STATUS_ERROR); $this->throwUserError($e->getMessage()); } return $this; }
public function placeOrder(Varien_Object $payment) { $api = $this->getApi(); $api->setAmount($payment->getOrder()->getBaseGrandTotal())->setTrxtype($this->getPaymentAction())->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode()); if ($api->callDoExpressCheckoutPayment() !== false) { $payment->setStatus('APPROVED')->setPayerId($api->getPayerId()); if ($this->getPaymentAction() == Mage_PaypalUk_Model_Api_Pro::TRXTYPE_AUTH_ONLY) { $payment->setCcTransId($api->getTransactionId()); } else { $payment->setLastTransId($api->getTransactionId()); } } else { $e = $api->getError(); die($e['message']); } return $this; }
public function authorize(Varien_Object $payment, $amount) { $debug = Mage::getStoreConfig('payment/apelidocielo/debug'); if ($amount < 0) { Mage::throwException(Mage::helper('payment')->__('O valor para autorização deve ser maior que zero')); } else { $info = $this->getInfoInstance(); //verifica o id da sessão if (!Mage::getSingleton('checkout/session')->getQuoteId()) { $quoteId = Mage::getSingleton("adminhtml/session_quote")->getQuoteId(); } else { $quoteId = Mage::getSingleton('checkout/session')->getQuoteId(); } //define as variáveisCcType $idpedido = Mage::getModel("sales/order")->getCollection()->getLastItem()->getIncrementId(); $bandeira_cartao = $info->getCcType(); $portador = $info->getCcOwner(); $numcartao = $info->decrypt($info->getCcNumber()); $codseguranca = $info->decrypt($info->getCcCid()); $validade = $info->getCcExpYear() . str_pad($info->getCcExpMonth(), 2, "0", STR_PAD_LEFT); //yyyymm $valor = number_format($amount, 2, '', ''); $parcelas = $info->getAdditionalData(); $parcelamento = Mage::getStoreConfig('payment/apelidocielo/tipoparcelamento'); $softdescriptor = Mage::getStoreConfig('payment/apelidocielo/softdescriptor'); $campollivre = ''; $quoteId = $quoteId; $dadosCliente = Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress(); $emaildigitado = $dadosCliente->getEmail(); $nomedigitado = $dadosCliente->getFirstname() . ' ' . $dadosCliente->getLastname(); $enderecodigitadoa = $dadosCliente->getStreet(); $cidadedigitado = $dadosCliente->getCity(); $estadodigitado = $dadosCliente->getRegion(); $telefonedigitado = $dadosCliente->getTelephone(); $cepdigitado = $dadosCliente->getPostcode(); if ($debug) { //Esse log só funciona se a opção Ativar log em Developer > Log no admin estiver marcada mage::log("\r\n=========== Dados do pagamento sendo enviados para autorizacao ==========\r\nId do pedido: {$idpedido}\r\nBandeira do cartao: {$bandeira_cartao}\r\nPortador do cartao: {$portador}\r\nNumero do cartao: {$numcartao}\r\nCod de seguranca do cartao: {$codseguranca}\r\nValidade do cartao: {$validade}\r\nValor do pagamento: {$valor}\r\nQuantidade de parcelas: {$parcelas}\r\nTipo de parcelamento: {$parcelamento}\r\nTexto do softdescriptor: {$softdescriptor}\r\nId da quote: {$quoteId}\r\n\r\n-------------------------------------------------------------------------------\r\nDADOS PREENCHIDOS PELO CLIENTE NO CHECKOUT\r\n\r\ne-mail: {$emaildigitado}\r\nNome: {$nomedigitado}\r\nEndereco: {$enderecodigitadoa['0']}\r\n {$enderecodigitadoa['1']}\r\n {$enderecodigitadoa['2']}\r\n {$enderecodigitadoa['3']}\r\nCidade: {$cidadedigitado}\r\nEstado: {$estadodigitado}\r\nTelefone: {$telefonedigitado}\r\nCEP: {$cepdigitado}\r\n\r\n ", null, 'oitoo_cielo.log'); } //if($debug) $fluxo = Mage::getStoreConfig('payment/apelidocielo/payment_action'); if ($fluxo == 'authorize_capture') { //se a captura for automática, ele coloca a tag na autorizacao $capturaautomatica = 'true'; } else { $capturaautomatica = 'false'; } $cielo = mage::getModel('apelidocielo/cielo'); $retornoCielo = $cielo->setAutorizacao($idpedido, $bandeira_cartao, $portador, $numcartao, $codseguranca, $validade, $valor, $parcelas, $parcelamento, $softdescriptor, $campollivre, $capturaautomatica); //guarda o TID da transação no campo PONUMBER $tid = (string) $retornoCielo->tid; if ($retornoCielo->autorizacao->codigo == 4 && $retornoCielo->autorizacao->lr == '00' || $retornoCielo->captura->codigo == 6) { Mage::dispatchEvent('oitoo_cielo_log', array('quote_id' => (string) $quoteId, 'codigo' => (string) $retornoCielo->autorizacao->codigo, 'texto' => (string) $retornoCielo->autorizacao->mensagem, 'tid' => $retornoCielo->tid)); //verifica se teve captura e salva os dados. Se houve captura é pq ela é automática if ($retornoCielo->captura->codigo == 6) { $codigocaptura = (string) $retornoCielo->captura->codigo; $mensagemcaptura = (string) $retornoCielo->captura->mensagem; } if (isset($tid) && $tid != '' && $tid != NULL) { $payment->setCcTransId($tid); $payment->setAdditionalInformation('autorizacao_codigo', (string) $retornoCielo->autorizacao->codigo); $payment->setAdditionalInformation('autorizacao_mensagem', (string) $retornoCielo->autorizacao->mensagem); $payment->setAdditionalInformation('autorizacao_lr', (string) $retornoCielo->autorizacao->lr); $payment->setAdditionalInformation('autorizacao_valor', (string) $retornoCielo->autorizacao->valor); if (isset($codigocaptura)) { $payment->setAdditionalInformation('captura_codigo', $codigocaptura); $payment->setAdditionalInformation('captura_mensagem', $mensagemcaptura); } $payment->save(); } return $this; //a compra foi autorizada. O cliente vai para a página de sucesso } else { if (isset($retornoCielo->codigo)) { //guarda o log no módulo de logs Mage::dispatchEvent('oitoo_cielo_log', array('quote_id' => (string) $quoteId, 'codigo' => (string) $retornoCielo->codigo, 'texto' => (string) $retornoCielo->mensagem, 'tid' => 'Não existente')); Mage::throwException(Mage::helper('payment')->__('Erro num: ' . $retornoCielo->codigo . ' - ' . $retornoCielo->mensagem)); } else { //guarda o log no módulo de logs Mage::dispatchEvent('oitoo_cielo_log', array('quote_id' => (string) $quoteId, 'codigo' => (string) $retornoCielo->autorizacao->codigo, 'texto' => (string) $retornoCielo->autorizacao->mensagem, 'tid' => (string) $retornoCielo->tid)); Mage::throwException(Mage::helper('payment')->__('A operadora não autorizou seu pagamento pelo seguinte motivo: ' . $retornoCielo->autorizacao->codigo . ' - ' . $retornoCielo->autorizacao->mensagem . ' LR: ' . $retornoCielo->autorizacao->lr . ' Você ainda pode tentar efetuar um novo pagamento. Basta alterar os dados na aba "Informações de pagamento". Qualquer dúvida entre em contato conosco.')); } } } return $this; }