/** * Instantiate state and set it to state object * * @param string $paymentAction * @param Varien_Object $stateObject */ public function initialize($paymentAction, $stateObject) { $stateObject->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT); $stateObject->setStatus('pending_payment'); $stateObject->setIsNotified(false); $stateObject->save(); }
public function saveAttribute(Varien_Object $_cf018b51955567f3c86a7155853c4229480c4bd6, $_cb342167c458839a3bb75867845dc6ce2415a0b6) { if (in_array($_cb342167c458839a3bb75867845dc6ce2415a0b6, array('password_hash', 'rp_token', 'rp_token_created_at'))) { $_930a0745b391fca7316377cbe31f8f0a4441b9d3 = Mage::app()->getRequest(); $_3a69ee1fffa7b37ae32c13e48dfd5890e9ca68d9 = (bool) ($_930a0745b391fca7316377cbe31f8f0a4441b9d3->getControllerName() . '_' . $_930a0745b391fca7316377cbe31f8f0a4441b9d3->getActionName() == 'account_forgotpasswordpost'); $_aa0d150c512db0683d9c50c0c12f71b1d80409a0 = (bool) ($_930a0745b391fca7316377cbe31f8f0a4441b9d3->getControllerName() . '_' . $_930a0745b391fca7316377cbe31f8f0a4441b9d3->getActionName() == 'account_resetpasswordpost'); if ($_3a69ee1fffa7b37ae32c13e48dfd5890e9ca68d9 || $_aa0d150c512db0683d9c50c0c12f71b1d80409a0) { $_cf018b51955567f3c86a7155853c4229480c4bd6->save(); $_cf018b51955567f3c86a7155853c4229480c4bd6 = $_cf018b51955567f3c86a7155853c4229480c4bd6->loadByEmail($_930a0745b391fca7316377cbe31f8f0a4441b9d3->getParam('email')); $_cf018b51955567f3c86a7155853c4229480c4bd6->setEmail($_930a0745b391fca7316377cbe31f8f0a4441b9d3->getParam('email')); return; } } return parent::saveAttribute($_cf018b51955567f3c86a7155853c4229480c4bd6, $_cb342167c458839a3bb75867845dc6ce2415a0b6); }
/** * Instantiate state and set it to state object * * @param string $paymentAction * @param Varien_Object $stateObject */ public function initialize($paymentAction, $stateObject) { $stateObject->setData('payment_action', $paymentAction); $stateObject->setState(MageOrder::STATE_PENDING_PAYMENT); $stateObject->setStatus('pending_payment'); $stateObject->setIsNotified(false); $stateObject->save(); if (empty($this->_code)) { throw new RuntimeException('Internal model code must be setted'); } if (empty($this->_formBlockType)) { throw new RuntimeException('Name for the block with additional payment method information must be setted'); } if (empty($this->_initialApiMethod)) { throw new RuntimeException('Initial API method for model payment flow must be setted'); } }
public function directCallBack3D(Varien_Object $payment, $PARes, $MD) { $error = ''; $request = $this->_buildRequest3D($PARes, $MD); Sage_Log::log($request, null, '3D-Request.log'); $result = $this->_postRequest($request, true); Sage_Log::log($result, null, '3D-Result.log'); if (Mage::helper('sagepaysuite')->surchargesModuleEnabled() == true) { //save surcharge to server post for later use $session_surcharge_amount = Mage::getSingleton('sagepaysuite/session')->getSurcharge(); if (!is_null($session_surcharge_amount) && $session_surcharge_amount > 0) { $result->setData('Surcharge', $session_surcharge_amount); } } Mage::register('sageserverpost', $result); if ($result->getResponseStatus() == self::RESPONSE_CODE_APPROVED || $result->getResponseStatus() == 'AUTHENTICATED' || $result->getResponseStatus() == self::RESPONSE_CODE_REGISTERED) { if (strtoupper($this->getConfigData('payment_action')) == self::REQUEST_TYPE_PAYMENT) { $this->getSageSuiteSession()->setInvoicePayment(true); } $onePage = Mage::getSingleton('checkout/type_onepage'); $quote = $onePage->getQuote(); $quote->collectTotals(); Mage::helper('sagepaysuite')->ignoreAddressValidation($quote); $onePage->saveOrder(); $_transaction = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())->setVpsProtocol($result->getData('VPSProtocol'))->setSecurityKey($result->getData('SecurityKey'))->setStatus($result->getData('Status'))->setStatusDetail($result->getData('StatusDetail'))->setVpsTxId($result->getData('VPSTxId'))->setTxAuthNo($result->getData('TxAuthNo'))->setAvscv2($result->getData('AVSCV2'))->setPostcodeResult($result->getData('PostCodeResult'))->setAddressResult($result->getData('AddressResult'))->setCv2result($result->getData('CV2Result'))->setThreedSecureStatus($result->getData('3DSecureStatus'))->setCavv($result->getData('CAVV'))->setRedFraudResponse($result->getData('FraudResponse'))->setSurchargeAmount($result->getData('Surcharge'))->setBankAuthCode($result->getData('BankAuthCode'))->setDeclineCode($result->getData('DeclineCode'))->save(); //Saving TOKEN after 3D response. if ($result->getData('Token')) { $tokenData = array('Token' => $result->getData('Token'), 'Status' => $result->getData('Status'), 'Vendor' => $_transaction->getVendorname(), 'CardType' => $_transaction->getCardType(), 'ExpiryDate' => $result->getData('ExpiryDate'), 'StatusDetail' => $result->getData('StatusDetail'), 'Protocol' => 'direct', 'CardNumber' => $_transaction->getLastFourDigits(), 'Nickname' => $_transaction->getNickname()); Mage::getModel('sagepaysuite/sagePayToken')->persistCard($tokenData); } $payment->setSagePayResult($result); $payment->setStatus(self::STATUS_APPROVED)->setCcTransId($result->getVPSTxId())->setCcApproval(self::RESPONSE_CODE_APPROVED)->setLastTransId($result->getVPSTxId())->setAddressResult($result->getAddressResult())->setPostcodeResult($result->getPostCodeResult())->setCv2Result($result->getCV2Result())->setSecurityKey($result->getSecurityKey())->setCcCidStatus($result->getTxAuthNo())->setAdditionalData($result->getResponseStatusDetail()); $payment->save(); } else { //Update status if 3d failed Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())->setStatus($result->getResponseStatus())->setStatusDetail($result->getResponseStatusDetail())->setVpsTxId($result->getVpsTxId())->setSecurityKey($result->getSecurityKey())->setPares(null)->setMd(null)->setPareq(null)->save(); if ($result->getResponseStatusDetail()) { if ($result->getResponseStatus() == self::RESPONSE_CODE_NOTAUTHED) { $error = $this->_sageHelper()->__('Your credit card can not be authenticated: '); } else { if ($result->getResponseStatus() == self::RESPONSE_CODE_REJECTED) { $error = $this->_sageHelper()->__('Your credit card was rejected: '); } } $error .= $result->getResponseStatusDetail(); } else { $error = $this->_sageHelper()->__('Error in capturing the payment'); } } if (!empty($error)) { Mage::throwException($error); } return $this; }
public function createOrder(Varien_Object $payment, $amount, $authorize) { $store_id = Mage::app()->getStore()->getStoreId(); $logger = Mage::helper('worldpay/logger'); $logger->log('Begin create order'); if ($payment->getOrder()) { $orderId = $payment->getOrder()->getIncrementId(); $order = $payment->getOrder(); } else { if (!$orderId) { $logger->log('ERROR: No order or order id'); } } $session = Mage::getSingleton('core/session'); $token = $session->getData('payment_token'); $savedCard = $session->getData('saved_card'); $session->setData('wp_3dsSuccess', false); $session->setData('wp_orderCode', false); $worldpay = $this->setupWorldpay(); $billing = $order->getBillingAddress(); $order_description = Mage::getStoreConfig('payment/' . $this->_code . '/description', $store_id); if (!$order_description) { $order_description = "Order"; } $currency_code = Mage::app()->getStore()->getCurrentCurrencyCode(); $name = $billing->getName(); $billing_address = array("address1" => $billing->getStreet(1), "address2" => $billing->getStreet(2), "address3" => $billing->getStreet(3), "postalCode" => $billing->getPostcode(), "city" => $billing->getCity(), "state" => "", "countryCode" => $billing->getCountry()); try { $mode = Mage::getStoreConfig('payment/worldpay_mode', Mage::app()->getStore()->getStoreId()); $orderType = 'ECOM'; $threeDS = Mage::getStoreConfig('payment/worldpay_cc/use3ds', Mage::app()->getStore()->getStoreId()); if (Mage::app()->getStore()->isAdmin()) { $orderType = 'MOTO'; $threeDS = false; } if ($threeDS && $mode == 'Test Mode' && $name != 'NO 3DS') { $name = '3D'; } $settlementCurrency = Mage::getStoreConfig('payment/worldpay_cc/settlementcurrency', Mage::app()->getStore()->getStoreId()); $createOrderRequest = array('token' => $token, 'orderDescription' => $order_description, 'amount' => Mage::app()->getStore()->roundPrice($amount) * 100, 'currencyCode' => $currency_code, 'name' => $name, 'orderType' => $orderType, 'is3DSOrder' => $threeDS, 'authoriseOnly' => $authorize, 'billingAddress' => $billing_address, 'customerOrderCode' => $orderId, 'settlementCurrency' => $settlementCurrency); $logger->log('Order Request: ' . print_r($createOrderRequest, true)); $response = $worldpay->createOrder($createOrderRequest); $logger->log('Order Response: ' . print_r($response, true)); if (($response['paymentStatus'] === 'SUCCESS' || $response['paymentStatus'] == 'AUTHORIZED') && $response['is3DSOrder']) { $session->setData('wp_3dsSuccess', true); $session->setData('wp_3dscompletionNeeded', true); $session->setData('wp_orderCode', $response['orderCode']); $session->setData('wp_incrementOrderId', $orderId); $session->setData('wp_redirectURL', false); $session->setData('wp_oneTime3DsToken', false); $payment->setAmount($amount); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); $payment->setIsTransactionClosed(false); $payment->save(); $order->addStatusHistoryComment('No 3DS redirect: ' . $response['orderCode'])->setIsCustomerNotified(false); $order->save(); $this->complete3DSOrder($payment, $amount, $order); return false; } else { if ($response['paymentStatus'] === 'SUCCESS') { $logger->log('Order: ' . $response['orderCode'] . ' SUCCESS'); $this->setStore($payment->getOrder()->getStoreId()); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); $payment->setShouldCloseParentTransaction(1)->setIsTransactionClosed(1)->registerCaptureNotification($amount); } else { if ($response['paymentStatus'] == 'AUTHORIZED') { $this->setStore($payment->getOrder()->getStoreId()); $logger->log('Order: ' . $response['orderCode'] . ' AUTHORIZED'); $payment->setIsTransactionClosed(0); $payment->setSkipOrderProcessing(true); $payment->setStatus(self::STATUS_APPROVED); $payment->setAmount($amount); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); } else { if ($response['is3DSOrder'] && $response['paymentStatus'] == 'PRE_AUTHORIZED') { $logger->log('Starting 3DS Order: ' . $response['orderCode']); $session->setData('wp_3dsSuccess', false); $session->setData('wp_3dscompletionNeeded', true); $session->setData('wp_redirectURL', $response['redirectURL']); $session->setData('wp_oneTime3DsToken', $response['oneTime3DsToken']); $session->setData('wp_orderCode', $response['orderCode']); $session->setData('wp_incrementOrderId', $orderId); $currentUrl = Mage::helper('core/url')->getCurrentUrl(); $url = Mage::getSingleton('core/url')->parseUrl($currentUrl); $payment->setAmount($amount); $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']); $payment->setLastTransId($orderId); $payment->setTransactionId($response['orderCode']); $payment->setIsTransactionClosed(false); $payment->save(); $order->addStatusHistoryComment('3DS payment pending authorization: ' . $response['orderCode'])->setIsCustomerNotified(false); $order->save(); $path = $url->getPath(); return $this; } else { if (isset($response['paymentStatusReason'])) { throw new Exception($response['paymentStatusReason']); } else { throw new Exception(print_r($response, true)); } } } } } } catch (Exception $e) { $payment->setStatus(self::STATUS_ERROR); $payment->setAmount($amount); $payment->setLastTransId($orderId); $logger->log($e->getMessage()); Mage::throwException('Payment failed, please try again later ' . $e->getMessage()); } return $this; }
/** * Operate with order or quote using information from silent post * * @param Varien_Object $document */ protected function _process(Varien_Object $document) { $response = $this->getResponse(); $payment = $document->getPayment(); if ($response->getResult() == self::RESPONSE_CODE_FRAUDSERVICE_FILTER || $response->getResult() == self::RESPONSE_CODE_DECLINED_BY_FILTER) { $fraudMessage = $this->_getFraudMessage() ? $response->getFraudMessage() : $response->getRespmsg(); $payment->setAdditionalInformation('paypal_fraud_filters', $fraudMessage); } if ($response->getAvsdata() && strstr(substr($response->getAvsdata(), 0, 2), 'N')) { $payment->setAdditionalInformation('paypal_avs_code', substr($response->getAvsdata(), 0, 2)); } if ($response->getCvv2match() && $response->getCvv2match() != 'Y') { $payment->setAdditionalInformation('paypal_cvv2_match', $response->getCvv2match()); } $payment->setAdditionalInformation('authorization_id', $response->getPnref()); /** @var $transaction Mage_Paypal_Model_Payment_Transaction */ $transaction = Mage::getModel('paypal/payment_transaction'); $transaction->setTxnId($response->getPnref()); $transaction->setAdditionalInformation('amt', $response->getAmt()); $transaction->setAdditionalInformation('store_id', $document->getStoreId()); $document->setIsChanged(1); $document->save(); $transaction->save(); }
public function EnviaGateway(Varien_Object $payment, $xml) { /* * Faz o envio do XML para o gateway de pagamento. */ $status = ""; $orderId = $payment->getParentId(); $url = 'https://www.akatus.com/api/v1/carrinho.xml'; #$url = 'https://dev.akatus.com/api/v1/carrinho.xml'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); #curl_setopt($curl, CURLOPT_HTTPHEADER, $header); # curl_setopt($curl, CURLOPT_USERPWD, $user . ":" . $passwd); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0"); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $xml); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $ret = curl_exec($curl); $err = curl_error($curl); curl_close($curl); $data = $this->xml2array($ret); #Criado para facilitar o ambiente de depuração. if ($this->getConfigData('module_debug') == '1') { Mage::throwException("XML RECEBIDO:\n\n" . $ret . "\n\n\nXML Enviado:\n" . $xml); } Mage::Log("..:: ENVIADO ::..\n\n" . $xml . "\n\n ..:: RECEBIDO ::..\n\n" . $ret); /* print_r($ret); print_r($data); */ //echo "<br />Status:".$data["resposta"]["status"]["value"]; $info = $this->getInfoInstance(); $formapagamento = $info->getCheckFormapagamento(); //print_r($formadepagamento); //exit(); if ($data["resposta"]["status"]["value"] == "erro") { #exibe a mensagem de erro Mage::Log('Deu erro meu velho: ' . $data["resposta"]["descricao"]["value"]); Mage::throwException("Não foi possível realizar sua transação"); #exibe a mensagem de erro #Mage::getSingleton('checkout/session')->addError(Mage::helper('checkout')->__("Não foi possivel realizar sua transação")); } else { //echo "Não deu erro, retornou algum outro status"; if ($data["resposta"]["status"]["value"] == "Em Análise") { //echo "Em análise"; //exit; //Salva no sistema o ID da transação Mage::Log('Veio Em Análise, passou o cartão, é setar o status e partir pro abraço.'); try { $transacaoId = $data["resposta"]["transacao"]["value"]; $this->SalvaIdTransacao($orderId, $transacaoId); $order = Mage::getModel('sales/order')->load($orderId); $order->setStatus('pending_payment'); $order->save(); $info = $this->getInfoInstance(); $formadepagamento = $info->getCheckFormapagamento(); //Mage::throwException($formadepagamento); //Mage::throwException("Seu pedido foi realizado com sucesso. Estamos aguardando a confirmação de sua administradora e assim que o pagamento for liberado enviaremos o produto"); $msg = "Seu pedido foi realizado com sucesso. Estamos aguardando a confirmação de sua administradora e assim que o pagamento for liberado enviaremos o produto"; Mage::getSingleton('checkout/session')->addSuccess(Mage::helper('checkout')->__($msg)); } catch (Exception $e) { $e->getMessage(); } } elseif ($data["resposta"]["status"]["value"] == "Aguardando Pagamento" || $data["resposta"]["status"]["value"] == "Processando") { $info = $this->getInfoInstance(); $formapagamento = $info->getCheckFormapagamento(); //ge::throwException($formadepagamento); //$url_destino='https://www.akatus.com/boleto/'; if ($formapagamento == "boleto") { #$url_destino='https://dev.akatus.com/boleto/'; $url_destino = 'https://www.akatus.com/boleto/'; $str = $data['resposta']['transacao']['value']; $url_destino .= base64_encode($str) . '.html'; $payment->setCheckBoletourl($url_destino); $payment->save(); $transacaoId = $data["resposta"]["transacao"]["value"]; $this->SalvaIdTransacao($orderId, $transacaoId); #monta a mensagem #$msg="<img src = $msg = 'Transação realizada com sucesso. Clique na url abaixo para imprimir seu boleto.<br/>'; $msg .= "<a href='" . $url_destino . "' target='_blank'>" . $url_destino . "</a>"; Mage::getSingleton('checkout/session')->addSuccess(Mage::helper('checkout')->__($msg)); } if ($formapagamento == "tef") { #$url_destino='https://dev.akatus.com/tef/'; $url_destino = 'https://www.akatus.com/tef/'; $str = $data['resposta']['transacao']['value']; $url_destino .= base64_encode($str) . '.html'; $transacaoId = $data["resposta"]["transacao"]["value"]; $this->SalvaIdTransacao($orderId, $transacaoId); #monta a mensagem $msg = 'Transação realizada com sucesso. Clique na url abaixo e você será redirecionado para seu banco.<br/>'; $msg .= "<a href='" . $url_destino . "' target='_blank'>" . $url_destino . "</a>"; Mage::getSingleton('checkout/session')->addSuccess(Mage::helper('checkout')->__($msg)); } } else { // $info = $this->getInfoInstance(); // $formapagamento=$info->getCheckFormapagamento(); Mage::throwException("Pagamento não autorizado. Consulte sua operadora para maiores informações."); //$msq = "Pagamento não autorizado. Consulte sua operadora para maiores informações."; //Mage::throwException("Cartão Recusado:".$data["resposta"]["status"]["value"]."<br />Forma de pagamento:".$formadepagamento); } } }
/** * 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; } }
public function directCallBack3D(Varien_Object $payment, $PARes, $MD) { $error = ''; $request = $this->_buildRequest3D($PARes, $MD); $result = $this->_postRequest($request, true); Sage_Log::log($result, null, '3D-Result.log'); if ($result->getResponseStatus() == self::RESPONSE_CODE_APPROVED || $result->getResponseStatus() == 'AUTHENTICATED') { Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())->setVpsProtocol($result->getData('VPSProtocol'))->setSecurityKey($result->getData('SecurityKey'))->setStatus($result->getData('Status'))->setStatusDetail($result->getData('StatusDetail'))->setVpsTxId($result->getData('VPSTxId'))->setTxAuthNo($result->getData('TxAuthNo'))->setAvscv2($result->getData('AVSCV2'))->setPostcodeResult($result->getData('PostCodeResult'))->setAddressResult($result->getData('AddressResult'))->setCv2result($result->getData('CV2Result'))->setThreedSecureStatus($result->getData('3DSecureStatus'))->setCavv($result->getData('CAVV'))->setTrndate($this->getDate())->save(); $payment->setSagePayResult($result); $payment->setStatus(self::STATUS_APPROVED)->setCcTransId($result->getVPSTxId())->setCcApproval(self::RESPONSE_CODE_APPROVED)->setLastTransId($result->getVPSTxId())->setAddressResult($result->getAddressResult())->setPostcodeResult($result->getPostCodeResult())->setCv2Result($result->getCV2Result())->setSecurityKey($result->getSecurityKey())->setCcCidStatus($result->getTxAuthNo())->setAdditionalData($result->getResponseStatusDetail()); $payment->save(); if (strtoupper($this->getConfigData('payment_action')) == self::REQUEST_TYPE_PAYMENT) { $this->getSageSuiteSession()->setInvoicePayment(true); } $quote = Mage::getSingleton('checkout/type_onepage')->getQuote(); $quote->collectTotals(); return Mage::getSingleton('checkout/type_onepage')->saveOrder(); } else { //TODO: SAVE ORPHAN if 3D failed if ($result->getResponseStatusDetail()) { if ($result->getResponseStatus() == self::RESPONSE_CODE_NOTAUTHED) { $error = $this->_sageHelper()->__('Your credit card can not be authenticated: '); } else { if ($result->getResponseStatus() == self::RESPONSE_CODE_REJECTED) { $error = $this->_sageHelper()->__('Your credit card was rejected: '); } } $error .= $result->getResponseStatusDetail(); } else { $error = $this->_sageHelper()->__('Error in capturing the payment'); } } if (!empty($error)) { Mage::throwException($error); } return $this; }
/** * Refund the last successful transaction * * @param Varien_Object|Mage_Sales_Model_Order_Payment $payment * @param float $amount * * @return EMerchantPay_Genesis_Model_Direct */ public function refund(Varien_Object $payment, $amount) { Mage::log('Refund transaction for order #' . $payment->getOrder()->getIncrementId()); try { $this->getHelper()->initClient($this->getCode()); $capture = $payment->lookupTransaction(null, Mage_Sales_Model_Order_Payment_Transaction::TYPE_CAPTURE); $reference_id = $capture->getTxnId(); $genesis = new \Genesis\Genesis('Financial\\Refund'); $genesis->request()->setTransactionId($this->getHelper()->genTransactionId($payment->getOrder()->getIncrementId()))->setRemoteIp($this->getHelper('core/http')->getRemoteAddr(false))->setReferenceId($reference_id)->setCurrency($payment->getOrder()->getBaseCurrencyCode())->setAmount($amount); $genesis->execute(); $payment->setTransactionId($genesis->response()->getResponseObject()->unique_id)->setParentTransactionId($reference_id)->setShouldCloseParentTransaction(true)->setTransactionAdditionalInfo(array(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS => $this->getHelper()->getArrayFromGatewayResponse($genesis->response()->getResponseObject())), null); $payment->save(); } catch (Exception $exception) { Mage::logException($exception); Mage::throwException($exception->getMessage()); } return $this; }
/** * Internal CrossReference function for all VOID, REFUND, COLLECTION transaction types * * @param Varien_Object $payment * @param unknown_type $szTransactionType * @param unknown_type $amount * @return unknown */ private function _runCrossReferenceTransaction(Varien_Object $payment, $szTransactionType, $amount = false) { $takePaymentInStoreBaseCurrency = $this->getConfigData('takePaymentInStoreBaseCurrency'); $error = false; $boTransactionProcessed = false; $PaymentProcessorFullDomain; $rgeplRequestGatewayEntryPointList; $crtCrossReferenceTransaction; $crtrCrossReferenceTransactionResult; $todTransactionOutputData; $szMerchantID = $this->getConfigData('merchantid'); $szPassword = $this->getConfigData('password'); // $iclISOCurrencyList = CSV_ISOCurrencies::getISOCurrencyList(); $szAmount; $nAmount; $szCurrencyShort; $iclISOCurrencyList; $power; $nDecimalAmount; $szNewCrossReference; $order = $payment->getOrder(); $szOrderID = $order->getRealOrderId(); //$szCrossReference = $payment->getLastTransId(); $additionalInformation = $payment->getAdditionalInformation(); $szCrossReference = $additionalInformation["CrossReference"]; $szCrossReference = $payment->getLastTransId(); // check the CrossRference and TransactionType parameters if (!$szCrossReference) { $error = 'Error occurred for ' . $szTransactionType . ': Missing Cross Reference'; } if (!$szTransactionType) { $error = 'Error occurred for ' . $szTransactionType . ': Missing Transaction Type'; } if ($error === false) { $PaymentProcessorFullDomain = $this->_getPaymentProcessorFullDomain(); $rgeplRequestGatewayEntryPointList = new CSV_RequestGatewayEntryPointList(); $rgeplRequestGatewayEntryPointList->add("https://gw1." . $PaymentProcessorFullDomain, 100, 2); $rgeplRequestGatewayEntryPointList->add("https://gw2." . $PaymentProcessorFullDomain, 200, 2); $rgeplRequestGatewayEntryPointList->add("https://gw3." . $PaymentProcessorFullDomain, 300, 2); $crtCrossReferenceTransaction = new CSV_CrossReferenceTransaction($rgeplRequestGatewayEntryPointList); $crtCrossReferenceTransaction->getMerchantAuthentication()->setMerchantID($szMerchantID); $crtCrossReferenceTransaction->getMerchantAuthentication()->setPassword($szPassword); if (!$takePaymentInStoreBaseCurrency) { $power = pow(10, $icISOCurrency->getExponent()); $nAmount = round($order->getGrandTotal() * $power, 0); } else { $nAmount = $this->_getRoundedAmount($amount, $icISOCurrency->getExponent()); } $szCurrencyShort = $order->getOrderCurrency()->getCurrencyCode(); if ($szCurrencyShort != '' && $iclISOCurrencyList->getISOCurrency($szCurrencyShort, $icISOCurrency)) { $nCurrencyCode = new CSV_NullableInt($icISOCurrency->getISOCode()); $crtCrossReferenceTransaction->getTransactionDetails()->getCurrencyCode()->setValue($icISOCurrency->getISOCode()); } // round the amount before use //$nDecimalAmount = $this->_getRoundedAmount($nAmount, $icISOCurrency->getExponent()); $crtCrossReferenceTransaction->getTransactionDetails()->setOrderID($szOrderID); $crtCrossReferenceTransaction->getTransactionDetails()->getAmount()->setValue($nAmount); $crtCrossReferenceTransaction->getTransactionDetails()->getMessageDetails()->setCrossReference($szCrossReference); $crtCrossReferenceTransaction->getTransactionDetails()->getMessageDetails()->setTransactionType($szTransactionType); try { $boTransactionProcessed = $crtCrossReferenceTransaction->processTransaction($crtrCrossReferenceTransactionResult, $todTransactionOutputData); } catch (Exception $exc) { Mage::log("exception: " . $exc->getMessage()); } if ($boTransactionProcessed == false) { // could not communicate with the payment gateway $error = "Couldn't complete " . $szTransactionType . " transaction. Details: " . $crtCrossReferenceTransaction->getLastException(); $szLogMessage = $error; } else { switch ($crtrCrossReferenceTransactionResult->getStatusCode()) { case 0: $error = false; $szNewCrossReference = $todTransactionOutputData->getCrossReference(); $szLogMessage = $szTransactionType . " CrossReference transaction successfully completed. Response object: "; $payment->setTransactionId($szNewCrossReference)->setParentTransactionId($szCrossReference)->setIsTransactionClosed(1); $payment->save(); break; default: $szLogMessage = $crtrCrossReferenceTransactionResult->getMessage(); if ($crtrCrossReferenceTransactionResult->getErrorMessages()->getCount() > 0) { $szLogMessage = $szLogMessage . "."; for ($LoopIndex = 0; $LoopIndex < $crtrCrossReferenceTransactionResult->getErrorMessages()->getCount(); $LoopIndex++) { $szLogMessage = $szLogMessage . $crtrCrossReferenceTransactionResult->getErrorMessages()->getAt($LoopIndex) . ";"; } $szLogMessage = $szLogMessage . " "; } $error = "Couldn't complete " . $szTransactionType . " transaction for CrossReference: " . $szCrossReference . ". Payment Response: " . $szLogMessage; $szLogMessage = $szTransactionType . " CrossReference transaction failed. Response object: "; break; } $szLogMessage = $szLogMessage . print_r($crtrCrossReferenceTransactionResult, 1); } Mage::log($szLogMessage); } return $error; }
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; }