Example #1
0
 /**
  * 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();
 }
Example #7
0
 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);
         }
     }
 }
Example #8
0
 /**
  * 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;
     }
 }
Example #9
0
 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;
 }
Example #11
0
 /**
  * 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;
 }
Example #12
0
 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;
 }