Example #1
0
 public function testGetAliasWithAdditionalInformation()
 {
     $quote = new Varien_Object();
     $payment = new Varien_Object();
     $payment->setAdditionalInformation(array('alias' => 'testAlias'));
     $quote->setPayment($payment);
     $aliasHelperMock = $this->getHelperMock('ops/alias', array('isAdminSession'));
     $aliasHelperMock->expects($this->any())->method('isAdminSession')->will($this->returnValue(false));
     $this->assertEquals('testAlias', $aliasHelperMock->getAlias($quote));
 }
 /**
  * Send payment request after order (backend / frontend).
  *
  * @param Varien_Object $payment
  * @param float $amount
  * @return $this|Mage_Payment_Model_Abstract
  * @throws Mage_Core_Exception
  */
 public function order(Varien_Object $payment, $amount)
 {
     $order = $payment->getOrder();
     $orderAddress = $order->getBillingAddress();
     $bzPayment = Mage::getModel('barzahlen/api_request_payment', array('customerEmail' => $order->getCustomerEmail(), 'customerStreetNr' => $orderAddress->getData("street"), 'customerZipcode' => $orderAddress->getData("postcode"), 'customerCity' => $orderAddress->getData("city"), 'customerCountry' => $orderAddress->getData("country_id"), 'orderId' => $order->getRealOrderId(), 'amount' => $amount, 'currency' => $order->getOrderCurrencyCode()));
     try {
         $this->getBarzahlenApi()->handleRequest($bzPayment);
         $payment->setAdditionalInformation('transaction_id', $bzPayment->getTransactionId())->setTransactionId($bzPayment->getTransactionId())->setIsTransactionClosed(0);
         $session = Mage::getSingleton('checkout/session');
         $session->setData('barzahlen_infotext', $bzPayment->getInfotext1());
     } catch (Exception $e) {
         Mage::helper('barzahlen')->bzLog($e);
         Mage::throwException(Mage::helper('barzahlen')->__('bz_frnt_error'));
     }
     return $this;
 }
 public function testGetParameterForCaptureWillReturnArray()
 {
     $fakePayment = new Varien_Object();
     $fakePayment->setOrder(new Varien_Object());
     $fakePayment->setAdditionalInformation(array('paymentId' => '4711'));
     $arrInfo = array('operation' => 'capture');
     $amount = 10;
     $opsPaymentMethod = Mage::getModel('ops/payment_abstract');
     $requestParams = Mage::getModel('ops/backend_operation_parameter')->getParameterFor(Netresearch_OPS_Model_Payment_Abstract::OPS_CAPTURE_TRANSACTION_TYPE, $opsPaymentMethod, $fakePayment, $amount, $arrInfo);
     $this->assertArrayHasKey('AMOUNT', $requestParams);
     $this->assertArrayHasKey('PAYID', $requestParams);
     $this->assertArrayHasKey('OPERATION', $requestParams);
     $this->assertArrayHasKey('CURRENCY', $requestParams);
     $this->assertEquals(1000, $requestParams['AMOUNT']);
     $this->assertEquals(4711, $requestParams['PAYID']);
     $this->assertEquals('capture', $requestParams['OPERATION']);
     $this->assertEquals(Mage::app()->getStore($fakePayment->getOrder()->getStoreId())->getBaseCurrencyCode(), $requestParams['CURRENCY']);
 }
 public function testGetRequestParams()
 {
     $fakePayment = new Varien_Object();
     $fakePayment->setOrder(new Varien_Object());
     $fakePayment->setAdditionalInformation(array('paymentId' => '4711'));
     $arrInfo = array('operation' => 'refund', 'invoice_id' => 2);
     $amount = 10;
     $opsPaymentMethod = Mage::getModel('ops/payment_abstract');
     $captureParameterModel = Mage::getModel('ops/backend_operation_refund_parameter');
     $requestParams = $captureParameterModel->getRequestParams($opsPaymentMethod, $fakePayment, $amount, $arrInfo);
     $this->assertArrayHasKey('AMOUNT', $requestParams);
     $this->assertArrayHasKey('PAYID', $requestParams);
     $this->assertArrayHasKey('OPERATION', $requestParams);
     $this->assertArrayHasKey('CURRENCY', $requestParams);
     $this->assertEquals(1000, $requestParams['AMOUNT']);
     $this->assertEquals(4711, $requestParams['PAYID']);
     $this->assertEquals('refund', $requestParams['OPERATION']);
     $this->assertEquals(Mage::app()->getStore($fakePayment->getOrder()->getStoreId())->getBaseCurrencyCode(), $requestParams['CURRENCY']);
 }
Example #5
0
 protected function _beforeProcessResponse($request, $result, Varien_Object $payment)
 {
     try {
         $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]);
         if ((string) $result->Transaction->attributes()->{'response'} == 'ASYNC' && (string) $result->Transaction->Processing->Result == self::PROCESSING_RESULT_OK && (string) $result->Transaction->Processing->Status->attributes()->{'code'} == self::PROCESSING_STATUS_CODE_WAITING && !empty($result->Transaction->Processing->Redirect)) {
             $this->setOrderPlaceRedirectUrl(Mage::getUrl('moneybookerspsp/processing/threeds'));
             $params = array();
             foreach ($result->Transaction->Processing->Redirect->Parameter as $parameter) {
                 $params[(string) $parameter->attributes()->{'name'}] = (string) $parameter;
             }
             $params['redirect_url'] = (string) $result->Transaction->Processing->Redirect->attributes()->{'url'};
             $payment->setAdditionalInformation($params);
         } else {
             return parent::_beforeProcessResponse($request, $result, $payment);
         }
     } catch (Exception $e) {
         Mage::logException($e);
     }
 }
Example #6
0
 /**
  * Authorize the transaction by calling PAYMENT_INIT, PAYMENT_REQUEST and PAYMENT_CONFIRM.
  *
  * @param   Varien_Object $orderPayment
  * @param   float $amount
  * @return  RatePAY_Ratepaypayment_Model_Method_Rechnung
  */
 public function authorize(Varien_Object $payment, $amount)
 {
     $client = Mage::getSingleton('ratepaypayment/request');
     $order = $this->getQuoteOrOrder();
     $helper = Mage::helper('ratepaypayment/mapping');
     if (Mage::getSingleton('ratepaypayment/session')->getQueryActive() && Mage::getSingleton('ratepaypayment/session')->getTransactionId()) {
         $resultInit['transactionId'] = Mage::getSingleton('ratepaypayment/session')->getTransactionId();
         $resultInit['transactionShortId'] = Mage::getSingleton('ratepaypayment/session')->getTransactionShortId();
     } else {
         $resultInit = $client->callPaymentInit($helper->getRequestHead($order), $helper->getLoggingInfo($order));
     }
     if (is_array($resultInit) || $resultInit == true) {
         $payment->setAdditionalInformation('transactionId', $resultInit['transactionId']);
         $payment->setAdditionalInformation('transactionShortId', $resultInit['transactionShortId']);
         $resultRequest = $client->callPaymentRequest($helper->getRequestHead($order), $helper->getRequestCustomer($order), $helper->getRequestBasket($order), $helper->getRequestPayment($order), $helper->getLoggingInfo($order));
         if (is_array($resultRequest) || $resultRequest == true) {
             $payment->setAdditionalInformation('descriptor', $resultRequest['descriptor']);
             if ($this->getHelper()->getRpConfigData($order, $this->_code, 'address_normalization')) {
                 $billingAddress = $order->getBillingAddress();
                 $shippingAddress = $order->getShippingAddress();
                 $billingAddress->setStreet(implode(' ', array($resultRequest['address']['street'], $resultRequest['address']['street-number'])));
                 $billingAddress->setPostcode($resultRequest['address']['zip-code']);
                 $billingAddress->setCity($resultRequest['address']['city']);
                 if ($billingAddress->getCustomerAddressId() == $shippingAddress->getCustomerAddressId()) {
                     $shippingAddress->setStreet(implode(' ', array($resultRequest['address']['street'], $resultRequest['address']['street-number'])));
                     $shippingAddress->setPostcode($resultRequest['address']['zip-code']);
                     $shippingAddress->setCity($resultRequest['address']['city']);
                 }
             }
             $resultConfirm = $client->callPaymentConfirm($helper->getRequestHead($order), $helper->getLoggingInfo($order));
             if (!is_array($resultConfirm) && !$resultConfirm == true) {
                 $this->_abortBackToPayment('PAYMENT_REQUEST Declined');
             }
         } else {
             $this->_abortBackToPayment('PAYMENT_REQUEST Declined');
         }
     } else {
         $this->_abortBackToPayment('Gateway Offline');
     }
     $this->_cleanSession();
     return $this;
 }
 /**
  * Processing the payment or preauth
  * @return booelan Indicator of success
  */
 public function payment(Varien_Object $payment, $amount)
 {
     //Gathering data from session
     $token = Mage::getSingleton('core/session')->getToken();
     //Create Payment Processor
     $paymentHelper = Mage::helper("paymill/paymentHelper");
     $fcHelper = Mage::helper("paymill/fastCheckoutHelper");
     $paymentProcessor = $paymentHelper->createPaymentProcessor($this->getCode(), $token);
     //Always load client if email doesn't change
     $clientId = $fcHelper->getClientId();
     if (isset($clientId) && !is_null(Mage::helper("paymill/customerHelper")->getClientData())) {
         $paymentProcessor->setClientId($clientId);
     }
     //Loading Fast Checkout Data (if enabled and given)
     if ($fcHelper->hasData($this->_code) && $token === 'dummyToken') {
         $paymentId = $fcHelper->getPaymentId($this->_code);
         if (isset($paymentId) && !is_null($fcHelper->getPaymentData($this->_code))) {
             $paymentProcessor->setPaymentId($paymentId);
         }
     }
     $success = $paymentProcessor->processPayment(!$this->_preauthFlag);
     $this->_existingClientHandling($clientId);
     if ($success) {
         if ($this->_preauthFlag) {
             $payment->setAdditionalInformation('paymillPreauthId', $paymentProcessor->getPreauthId());
         } else {
             $payment->setAdditionalInformation('paymillTransactionId', $paymentProcessor->getTransactionId());
         }
         $payment->setAdditionalInformation('paymillPrenotificationDate', $this->_getPrenotificationDate($payment->getOrder()));
         //Allways update the client
         $clientId = $paymentProcessor->getClientId();
         $fcHelper->saveData($this->_code, $clientId);
         //Save payment data for FastCheckout (if enabled)
         if ($fcHelper->isFastCheckoutEnabled()) {
             //Fast checkout enabled
             $paymentId = $paymentProcessor->getPaymentId();
             $fcHelper->saveData($this->_code, $clientId, $paymentId);
         }
         return true;
     }
     $this->_errorCode = $paymentProcessor->getErrorCode();
     return false;
 }
 /**
  * Call DoAuthorize
  *
  * @param int $amount
  * @param Varien_Object $payment
  * @param string $parentTransactionId
  * @return Mage_Paypal_Model_Api_Abstract
  * @throws Mage_Paypal_Model_Api_ProcessableException
  */
 protected function _callDoAuthorize($amount, $payment, $parentTransactionId)
 {
     $apiData = $this->_pro->getApi()->getData();
     foreach ($apiData as $k => $v) {
         if (is_object($v)) {
             unset($apiData[$k]);
         }
     }
     Mage::getSingleton('checkout/session')->setPaypalTransactionData($apiData);
     $this->_pro->resetApi();
     $api = $this->_setApiProcessableErrors()->setAmount($amount)->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setTransactionId($parentTransactionId)->callDoAuthorization();
     $payment->setAdditionalInformation($this->_authorizationCountKey, $payment->getAdditionalInformation($this->_authorizationCountKey) + 1);
     return $api;
 }
Example #9
0
 public function createOrder(Varien_Object $payment, $amount, $authorize)
 {
     $store_id = Mage::app()->getStore()->getStoreId();
     $logger = Mage::helper('worldpay/logger');
     if ($payment->getOrder()) {
         $orderId = $payment->getOrder()->getIncrementId();
         $order = $payment->getOrder();
     } else {
         $quote = $payment->getQuote();
         $orderId = $quote->getReservedOrderId();
         $quote->save();
     }
     $session = Mage::getSingleton('core/session');
     $token = $session->getData('payment_token');
     $savedCard = $session->getData('saved_card');
     $logger->log('Begin create order');
     $session->setData('wp_3dsSuccess', false);
     $session->setData('wp_orderCode', false);
     $worldpay = $this->setupWorldpay();
     $checkout = Mage::getSingleton('checkout/session')->getQuote();
     $billing = $checkout->getBillingAddress();
     $order_description = Mage::getStoreConfig('payment/worldpay/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());
         $settlementCurrency = Mage::getStoreConfig('payment/worldpay/settlementcurrency', Mage::app()->getStore()->getStoreId());
         $createOrderRequest = array('token' => $token, 'orderDescription' => $order_description, 'amount' => $amount * 100, 'currencyCode' => $currency_code, 'name' => $name, 'billingAddress' => $billing_address, 'customerOrderCode' => $orderId, 'settlementCurrency' => $settlementCurrency, 'successUrl' => Mage::getUrl('worldpay/apm/success', array('_secure' => true)), 'pendingUrl' => Mage::getUrl('worldpay/apm/pending', array('_secure' => true)), 'failureUrl' => Mage::getUrl('worldpay/apm/failure', array('_secure' => true)), 'cancelUrl' => Mage::getUrl('worldpay/apm/cancel', array('_secure' => true)));
         $logger->log('Order Request: ' . print_r($createOrderRequest, true));
         $response = $worldpay->createApmOrder($createOrderRequest);
         $logger->log('Order Response: ' . print_r($response, true));
         if ($response['paymentStatus'] === 'SUCCESS') {
             $this->setStore($payment->getOrder()->getStoreId());
             $logger->log('Order: ' . $response['orderCode'] . ' SUCCESS');
             $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'] == 'PRE_AUTHORIZED') {
                 $logger->log('Order: ' . $response['orderCode'] . ' PRE_AUTHORIZED');
                 $payment->setAmount($amount);
                 $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']);
                 $payment->setLastTransId($orderId);
                 $payment->setTransactionId($response['orderCode']);
                 $payment->setIsTransactionClosed(false);
                 $session->setData('wp_redirectURL', $response['redirectURL']);
                 $session->setData('wp_orderCode', $response['orderCode']);
             } 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;
 }
Example #10
0
 /**
  * @desc authorise response
  * Process the response of the soap
  *
  * @param Varien_Object $payment
  * @param stdClass      $response
  * @param null          $request
  *
  * @return $this
  * @todo Add comment with checkout Authorised
  */
 protected function _processResponse(Varien_Object $payment, $response, $request = null)
 {
     if (!$response instanceof stdClass) {
         return false;
     }
     switch ($request) {
         case "authorise":
         case "authorise3d":
             if ($response->paymentResult->fraudResult) {
                 $fraudResult = $response->paymentResult->fraudResult->accountScore;
                 $payment->setAdyenTotalFraudScore($fraudResult);
             }
             $responseCode = $response->paymentResult->resultCode;
             $pspReference = $response->paymentResult->pspReference;
             // save pspreference to match with notification
             $payment->setAdyenPspReference($pspReference);
             break;
         case "refund":
             $responseCode = $response->refundResult->response;
             $pspReference = $response->refundResult->pspReference;
             break;
         case "cancel_or_refund":
             $responseCode = $response->cancelOrRefundResult->response;
             $pspReference = $response->cancelOrRefundResult->pspReference;
             break;
         case "capture":
             $responseCode = $response->captureResult->response;
             $pspReference = $response->captureResult->pspReference;
             break;
         default:
             $responseCode = null;
             $this->writeLog("Unknown data type by Adyen");
             break;
     }
     switch ($responseCode) {
         case "RedirectShopper":
             $payment->setAdditionalInformation('paRequest', $response->paymentResult->paRequest);
             $payment->setAdditionalInformation('md', $response->paymentResult->md);
             $payment->setAdditionalInformation('issuerUrl', $response->paymentResult->issuerUrl);
             Mage::getSingleton('customer/session')->setRedirectUrl("adyen/process/validate3d");
             $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status'));
             break;
         case "Refused":
             if ($response->paymentResult->refusalReason) {
                 $refusalReason = $response->paymentResult->refusalReason;
                 switch ($refusalReason) {
                     case "Transaction Not Permitted":
                         $errorMsg = Mage::helper('adyen')->__('The transaction is not permitted.');
                         break;
                     case "CVC Declined":
                         $errorMsg = Mage::helper('adyen')->__('Declined due to the Card Security Code(CVC) being incorrect. Please check your CVC code!');
                         break;
                     case "Restricted Card":
                         $errorMsg = Mage::helper('adyen')->__('The card is restricted.');
                         break;
                     case "803 PaymentDetail not found":
                         $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED because the saved card is removed. Please try an other payment method.');
                         break;
                     default:
                         $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.');
                         break;
                 }
             } else {
                 $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.');
             }
             Adyen_Payment_Exception::throwException($errorMsg);
             break;
         case "Authorised":
             $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status'));
             break;
         case "Received":
             // boleto payment
             $pdfUrl = null;
             $additionalDataResults = $response->paymentResult->additionalData->entry;
             foreach ($additionalDataResults as $additionalDataResult) {
                 if ($additionalDataResult->key == "boletobancario.url") {
                     $pdfUrl = $additionalDataResult->value;
                 }
             }
             $this->_addStatusHistory($payment, $responseCode, $pspReference, false, $pdfUrl);
             break;
         case '[capture-received]':
         case '[refund-received]':
         case '[cancelOrRefund-received]':
             $this->_addStatusHistory($payment, $responseCode, $pspReference);
             break;
         case "Error":
             $errorMsg = Mage::helper('adyen')->__('System error, please try again later');
             Adyen_Payment_Exception::throwException($errorMsg);
             break;
         default:
             $this->writeLog("Unknown data type by Adyen");
             break;
     }
     //save all response data for a pure duplicate detection
     Mage::getModel('adyen/event')->setPspReference($pspReference)->setAdyenEventCode($responseCode)->setAdyenEventResult($responseCode)->setIncrementId($payment->getOrder()->getIncrementId())->setPaymentMethod($this->getInfoInstance()->getCcType())->setCreatedAt(now())->saveData();
     return $this;
 }
Example #11
0
 public function authorize(Varien_Object $payment, $amount)
 {
     $payment->setLastTransId($this->getTransactionId())->setIsTransactionPending(true);
     // create payment link and add it to comment history and send to shopper
     $order = $payment->getOrder();
     /*
      * Do not send a email notification when order is created.
      * Only do this on the AUHTORISATION notification.
      * This is needed for old versions where there is no check if email is already send
      */
     //        $order->setCanSendNewEmailFlag(false);
     $fields = $this->getFormFields();
     $url = $this->getFormUrl();
     $count = 0;
     $size = count($fields);
     foreach ($fields as $field => $value) {
         if ($count == 0) {
             $url .= "?";
         }
         $url .= urlencode($field) . "=" . urlencode($value);
         if ($count != $size) {
             $url .= "&";
         }
         ++$count;
     }
     $comment = "<a target=\"_blank\" href=\"" . $url . "\">Generated payment url</a>";
     $status = $this->_getConfigData('order_status');
     $payment->getOrder()->addStatusHistoryComment($comment, $status);
     $payment->setAdditionalInformation('payment_url', $url);
     // send out email to shopper
     //        $templateId = "Fav Email";
     //
     //        $emailTemplate = Mage::getModel('core/email_template')->loadByCode($templateId);
     //
     //        $vars = array('user_name' => $userName, 'product_name' => $productName);
     //
     //        $emailTemplate->getProcessedTemplate($vars);
     //
     //        $emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_general/email', $storeId));
     //
     //        $emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_general/name', $storeId));
     //
     //
     //        $emailTemplate->send($receiveEmail,$receiveName, $vars);
     //        $order->
     //        $order->sendNewOrderEmail(); // send order email
     return $this;
 }
Example #12
0
 private function callApi(Varien_Object $payment, $amount, $transcition_type)
 {
     //call your authorize api here, incase of error throw exception.
     //only example code written below to show flow of code
     $order = $payment->getOrder();
     $types = Mage::getSingleton('payment/config')->getCcTypes();
     //echo '<pre>';print_r($order->getData());die('>>>');
     if (isset($types[$payment->getCcType()])) {
         $type = $types[$payment->getCcType()];
     }
     if (strlen($payment->getCcExpMonth()) == 1) {
         $card_expiredate = '0' . $payment->getCcExpMonth();
     } else {
         $card_expiredate = $payment->getCcExpMonth();
     }
     if (strlen($payment->getCcSsStartMonth()) == 1) {
         $card_startdate = '0' . $payment->getCcSsStartMonth();
     } else {
         $card_startdate = $payment->getCcSsStartMonth();
     }
     $startyear = substr($payment->getCcSsStartYear(), -2);
     $expireyear = substr($payment->getCcExpYear(), -2);
     $paymentAction = $this->getConfigData('payment_action');
     $billingaddress = $order->getBillingAddress();
     $countrycode = $this->getcountrycode($billingaddress->getData('country_id'));
     //$totals = strval(($amount)*100);
     $orderId = $order->getIncrementId();
     $currencyDesc = $order->getBaseCurrencyCode();
     $baseCurrency_code = Mage::app()->getBaseCurrencyCode();
     $storeId = Mage::app()->getStore()->getId();
     $SelectedCurrency = Mage::app()->getStore($storeId)->getCurrentCurrencyCode();
     $module_currency_code = $this->getConfigData('payment_currency');
     $paymentSenseSelectedCurrency = explode(',', $module_currency_code);
     $curArray = array('USD', 'GBP', 'EUR');
     if (in_array($SelectedCurrency, $paymentSenseSelectedCurrency)) {
         $currcode = $SelectedCurrency;
     } else {
         if (in_array($baseCurrency_code, $paymentSenseSelectedCurrency)) {
             $currcode = $baseCurrency_code;
         } else {
             if (in_array($baseCurrency_code, $curArray)) {
                 $currcode = $paymentSenseSelectedCurrency[0];
             } else {
                 return array('status' => 0, 'transaction_id' => time(), 'fraud' => rand(0, 1), 'message' => 'Currency Error', 'data' => '', 'CrossReference' => '');
             }
         }
     }
     $arAdditionalInformationArray["PaymentCurrency"] = $currcode;
     $payment->setAdditionalInformation($arAdditionalInformationArray);
     $allowedCurrencies = Mage::getModel('directory/currency')->getConfigAllowCurrencies();
     $currencyRates = Mage::getModel('directory/currency')->getCurrencyRates($baseCurrency_code, array_values($allowedCurrencies));
     //$baseCurrnecyrate  =  1/$currencyRates[Mage::app()->getStore()->getCurrentCurrencyCode()];
     $grandTotal = $order->getData('base_grand_total');
     $baseCurrnecyrate = $currencyRates[$currcode];
     if ($currcode == 'EUR') {
         if ($currcode = $baseCurrency_code && $baseCurrency_code != '') {
             //$newprice = number_format((float)($order->getGrandTotal()*$baseCurrnecyrate),'2', '.', '');
             $newprice = number_format((double) ($grandTotal * $baseCurrnecyrate), '2', '.', '');
         } else {
             //$newprice = Mage::helper('directory')->currencyConvert($order->getGrandTotal(),'EUR',Mage::app()->getStore()->getCurrentCurrencyCode());
             $newprice = Mage::helper('directory')->currencyConvert($grandTotal, 'EUR', Mage::app()->getStore()->getCurrentCurrencyCode());
         }
         $currdes = '978';
     } elseif ($currcode == 'GBP') {
         if ($currcode = $baseCurrency_code && $baseCurrency_code != '') {
             //$newprice = number_format((float)($order->getGrandTotal()*$baseCurrnecyrate),'2', '.', '');
             $newprice = number_format((double) ($grandTotal * $baseCurrnecyrate), '2', '.', '');
         } else {
             //$newprice = Mage::helper('directory')->currencyConvert($order->getGrandTotal(),Mage::app()->getStore()->getCurrentCurrencyCode(),'GBP');
             $newprice = Mage::helper('directory')->currencyConvert($order->getGrandTotal(), Mage::app()->getStore()->getCurrentCurrencyCode(), 'GBP');
         }
         $currdes = '826';
     } else {
         if ($currcode = $baseCurrency_code && $baseCurrency_code != '') {
             $newprice = number_format((double) ($grandTotal * $baseCurrnecyrate), '2', '.', '');
         } else {
             $newprice = Mage::helper('directory')->currencyConvert($grandTotal, 'USD', Mage::app()->getStore()->getCurrentCurrencyCode());
         }
         $currdes = '840';
     }
     $surcharge = $this->getConfigData('payment_surcharge');
     $credit_surcharge = $this->getConfigData('surcharge_debit');
     $newprice = round($newprice, 2);
     $totals = strval($newprice * 100);
     $url = $this->getConfigData('gateway_url');
     $fields = array('MerchantID' => $this->getConfigData('api_username'), 'MerchantPassword' => $this->getConfigData('api_password'), 'PhoneNumber' => $billingaddress->getData('telephone'), 'EmailAddress' => $billingaddress->getData('email'), 'customer_ipaddress' => $_SERVER['REMOTE_ADDR'], 'Address1' => $billingaddress->getStreet1(), 'Address2' => $billingaddress->getStreet2(), 'City' => $billingaddress->getData('city'), 'CountryCode' => $countrycode, 'State' => $billingaddress->getData('region'), 'PostCode' => $billingaddress->getData('postcode'), 'CardName' => $payment->getCcOwner(), 'ExpiryDateMonth' => $card_expiredate, 'ExpiryDateYear' => $expireyear, 'CardNumber' => $payment->getCcNumber(), 'StartDateMonth' => $card_startdate, 'StartDateYear' => $startyear, 'IssueNumber' => '', 'TransactionType' => $transcition_type, 'Description' => 'Order' . $order->getIncrementId(), 'CV2' => $payment->getCcCid(), 'OrderID' => $order->getIncrementId(), 'currencydesc' => $currdes, 'Amount' => $totals);
     // print_r($fields);die();
     $json = array();
     $headers = array('SOAPAction:https://www.thepaymentgateway.net/CardDetailsTransaction', 'Content-Type: text/xml; charset = utf-8', 'Connection: close');
     $xml = '<?xml version="1.0" encoding="utf-8"?>';
     $xml .= '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
     $xml .= '<soap:Body>';
     $xml .= '<CardDetailsTransaction xmlns="https://www.thepaymentgateway.net/">';
     $xml .= '<PaymentMessage>';
     $xml .= '<MerchantAuthentication MerchantID="' . $fields['MerchantID'] . '" Password="******" />';
     $xml .= '<TransactionDetails Amount="' . $fields['Amount'] . '" CurrencyCode="' . $fields['currencydesc'] . '">';
     $xml .= '<MessageDetails TransactionType="' . $fields['TransactionType'] . '" />';
     $xml .= '<OrderID>' . $fields['OrderID'] . '</OrderID>';
     $xml .= '<OrderDescription>' . $fields['Description'] . '</OrderDescription>';
     $xml .= '<TransactionControl>';
     $xml .= '<EchoCardType>TRUE</EchoCardType>';
     $xml .= '<EchoAVSCheckResult>TRUE</EchoAVSCheckResult>';
     $xml .= '<EchoCV2CheckResult>TRUE</EchoCV2CheckResult>';
     $xml .= '<EchoAmountReceived>TRUE</EchoAmountReceived>';
     $xml .= '<DuplicateDelay>20</DuplicateDelay>';
     //$xml .= '<AVSOverridePolicy>'. $fields['AVSPolicy'] .'</AVSOverridePolicy>';
     //$xml .= '<CV2OverridePolicy>'. $fields['CV2Policy'] .'</CV2OverridePolicy>';
     $xml .= '<CustomVariables>';
     $xml .= '<GenericVariable Name="MyInputVariable" Value="Ping" />';
     $xml .= '</CustomVariables>';
     $xml .= '</TransactionControl>';
     $xml .= '</TransactionDetails>';
     $xml .= '<CardDetails>';
     $xml .= '<CardName>' . $fields['CardName'] . '</CardName>';
     $xml .= '<CardNumber>' . $fields['CardNumber'] . '</CardNumber>';
     if ($fields['ExpiryDateMonth'] != "") {
         $xml .= '<ExpiryDate Month="' . $fields['ExpiryDateMonth'] . '" Year="' . $fields['ExpiryDateYear'] . '" />';
     }
     if ($fields['StartDateMonth'] != "") {
         $xml .= '<StartDate Month="' . $fields['StartDateMonth'] . '" Year="' . $fields['StartDateYear'] . '" />';
     }
     $xml .= '<CV2>' . $fields['CV2'] . '</CV2>';
     if ($fields['IssueNumber'] != "") {
         $xml .= '<IssueNumber>' . $fields['IssueNumber'] . '</IssueNumber>';
     }
     $xml .= '</CardDetails>';
     $xml .= '<CustomerDetails>';
     $xml .= '<BillingAddress>';
     $xml .= '<Address1>' . $fields['Address1'] . '</Address1>';
     if (isset($fields['Address2']) && $fields['Address2'] != "") {
         $xml .= '<Address2>' . $fields['Address2'] . '</Address2>';
     }
     if (isset($fields['Address3']) && $fields['Address3'] != "") {
         $xml .= '<Address3>' . $fields['Address3'] . '</Address3>';
     }
     if (isset($fields['Address4']) && $fields['Address4'] != "") {
         $xml .= '<Address4>' . $fields['Address4'] . '</Address4>';
     }
     $xml .= '<City>' . $fields['City'] . '</City>';
     if ($fields['State'] != "") {
         $xml .= '<State>' . $fields['State'] . '</State>';
     }
     $xml .= '<PostCode>' . $fields['PostCode'] . '</PostCode>';
     $xml .= '<CountryCode>' . $fields['CountryCode'] . '</CountryCode>';
     $xml .= '</BillingAddress>';
     $xml .= '<EmailAddress>' . $fields['EmailAddress'] . '</EmailAddress>';
     $xml .= '<PhoneNumber>' . $fields['PhoneNumber'] . '</PhoneNumber>';
     //$xml .= '<CustomerIPAddress>'.$fields['CustomerIPAddress'].'</CustomerIPAddress>';
     $xml .= '</CustomerDetails>';
     $xml .= '<PassOutData>Some data to be passed out</PassOutData>';
     $xml .= '</PaymentMessage>';
     $xml .= '</CardDetailsTransaction>';
     $xml .= '</soap:Body>';
     $xml .= '</soap:Envelope>';
     $gwId = 1;
     $domain = "paymentsensegateway.com";
     $port = "4430";
     $transattempt = 1;
     $soapSuccess = false;
     while (!$soapSuccess && $gwId <= 3 && $transattempt <= 3) {
         $url = 'https://gw' . $gwId . '.' . $domain . ':' . $port . '/';
         //=================================================================================
         $curl = curl_init();
         curl_setopt($curl, CURLOPT_HEADER, false);
         curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
         curl_setopt($curl, CURLOPT_POST, true);
         curl_setopt($curl, CURLOPT_URL, $url);
         curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
         curl_setopt($curl, CURLOPT_ENCODING, 'UTF-8');
         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
         $caInfoSetting = ini_get("curl.cainfo");
         if (empty($caInfoSetting)) {
             curl_setopt($curl, CURLOPT_CAINFO, Mage::getModuleDir('', 'Paymentsense') . DS . 'lib' . DS . "cacert.pem");
         }
         $ret = curl_exec($curl);
         $err = curl_errno($curl);
         $retHead = curl_getinfo($curl);
         curl_close($curl);
         $curl = null;
         //echo "<pre>";print_r($ret);die;
         //$json['error'] .= "\r\rerr=". $err ."\r\r"."response=".$ret;
         if ($err == 0) {
             $StatusCode = null;
             $soapStatusCode = null;
             if (preg_match('#<StatusCode>([0-9]+)</StatusCode>#iU', $ret, $soapStatusCode)) {
                 $StatusCode = (int) $soapStatusCode[1];
                 $AuthCode = null;
                 $soapAuthCode = null;
                 $CrossReference = null;
                 $soapCrossReference = null;
                 $Message = null;
                 $soapMessage = null;
                 if (preg_match('#<AuthCode>([a-zA-Z0-9]+)</AuthCode>#iU', $ret, $soapAuthCode)) {
                     $AuthCode = $soapAuthCode[1];
                 }
                 if (preg_match('#<TransactionOutputData.*CrossReference="([a-zA-Z0-9]+)".*>#iU', $ret, $soapCrossReference)) {
                     $CrossReference = $soapCrossReference[1];
                 }
                 if (preg_match('#<Message>(.+)</Message>#iU', $ret, $soapMessage)) {
                     $Message = $soapMessage[1];
                 }
                 if ($StatusCode != 3) {
                     Mage::getSingleton('core/session')->setJsonValue('');
                 }
                 if ($StatusCode != 50) {
                     $soapSuccess = true;
                     switch ($StatusCode) {
                         case 0:
                             $status = 1;
                             $json['error'] = '';
                             /*
                              *$this->model_checkout_order->confirm($this->session->data['order_id'], $this->config->get('config_order_status_id'));
                              */
                             if (preg_match('#<AddressNumericCheckResult>(.+)</AddressNumericCheckResult>#iU', $ret, $soapAVSCheck)) {
                                 $AVSCheck = $soapAVSCheck[1];
                             }
                             if (preg_match('#<PostCodeCheckResult>(.+)</PostCodeCheckResult>#iU', $ret, $soapPostCodeCheck)) {
                                 $PostCodeCheck = $soapPostCodeCheck[1];
                             }
                             if (preg_match('#<CV2CheckResult>(.+)</CV2CheckResult>#iU', $ret, $soapCV2Check)) {
                                 $CV2Check = $soapCV2Check[1];
                             }
                             $successmessage = 'AuthCode: ' . $AuthCode . " || " . 'CrossReference: ' . $CrossReference . " || " . 'AVS Check: ' . $AVSCheck . " || " . 'Postcode Check: ' . $PostCodeCheck . " || " . 'CV2 Check: ' . $CV2Check;
                             $json['error'] = '';
                             //$this->model_checkout_order->update($this->session->data['order_id'], $this->config->get('paymentsense_direct_order_status_id'), $successmessage, false);
                             //$json['success'] = $this->url->link('checkout/success', '', 'SSL');
                             break;
                         case 3:
                             $status = 1;
                             if (preg_match('#<ThreeDSecureOutputData>.*<PaREQ>(.+)</PaREQ>.*<ACSURL>(.+)</ACSURL>.*</ThreeDSecureOutputData>#iU', $ret, $soap3DSec)) {
                                 $PaREQ = $soap3DSec[1];
                                 $ACSurl = $soap3DSec[2];
                                 $json['ACSURL'] = $ACSurl;
                                 $json['MD'] = $CrossReference;
                                 $json['PaReq'] = $PaREQ;
                                 $json['TermUrl'] = Mage::getUrl('pay/index/callback', array('_secure' => true));
                                 $json['error'] = '';
                                 Mage::getSingleton('core/session')->setJsonValue($json);
                                 //$this->secureAuthorisation($json);
                             } else {
                                 $json['error'] = 'Incorrect 3DSecure data.';
                                 $do = false;
                             }
                             break;
                         case 4:
                             // Referred
                             $json['error'] = 'Your card has been referred - please try a different card';
                             $do = false;
                             $status = 0;
                             break;
                         case 5:
                             // Declined
                             $json['error'] = 'Your card has been declined - ';
                             $status = 0;
                             if (preg_match('#<AddressNumericCheckResult>(.+)</AddressNumericCheckResult>#iU', $ret, $soapAVSCheck)) {
                                 $AVSCheck = $soapAVSCheck[1];
                             }
                             $failedreasons = "";
                             if ($AVSCheck == "FAILED") {
                                 if ($failedreasons != "") {
                                     $failedreasons .= " + AVS";
                                 } else {
                                     $failedreasons = "Billing address";
                                 }
                             }
                             if (preg_match('#<PostCodeCheckResult>(.+)</PostCodeCheckResult>#iU', $ret, $soapPostCodeCheck)) {
                                 $PostCodeCheck = $soapPostCodeCheck[1];
                             }
                             if ($PostCodeCheck == "FAILED") {
                                 if ($failedreasons != "") {
                                     $failedreasons .= " + Postcode";
                                 } else {
                                     $failedreasons = "Postcode";
                                 }
                             }
                             if (preg_match('#<CV2CheckResult>(.+)</CV2CheckResult>#iU', $ret, $soapCV2Check)) {
                                 $CV2Check = $soapCV2Check[1];
                             }
                             if ($CV2Check == "FAILED") {
                                 if ($failedreasons != "") {
                                     $failedreasons .= " + CV2";
                                 } else {
                                     $failedreasons = "CV2";
                                 }
                             }
                             if ($failedreasons != "") {
                                 $json['error'] .= $failedreasons . " checks failed. ";
                             }
                             $json['error'] .= 'Please check your billing address and card details and try again';
                             $do = false;
                             break;
                         case 20:
                             // Duplicate
                             // check the previous status in order to know if the transaction was a success
                             $status = 1;
                             if (preg_match('#<PreviousTransactionResult>.*<StatusCode>([0-9]+)</StatusCode>#iU', $ret, $soapStatus2)) {
                                 if ($soapStatus2[1] == '0') {
                                     //$this->model_checkout_order->confirm($this->session->data['order_id'], $this->config->get('config_order_status_id'));
                                     if (preg_match('#<AddressNumericCheckResult>(.+)</AddressNumericCheckResult>#iU', $ret, $soapAVSCheck)) {
                                         $AVSCheck = $soapAVSCheck[1];
                                     }
                                     if (preg_match('#<PostCodeCheckResult>(.+)</PostCodeCheckResult>#iU', $ret, $soapPostCodeCheck)) {
                                         $PostCodeCheck = $soapPostCodeCheck[1];
                                     }
                                     if (preg_match('#<CV2CheckResult>(.+)</CV2CheckResult>#iU', $ret, $soapCV2Check)) {
                                         $CV2Check = $soapCV2Check[1];
                                     }
                                     $successmessage = 'AuthCode: ' . $AuthCode . " || " . 'CrossReference: ' . $CrossReference . " || " . 'AVS Check: ' . $AVSCheck . " || " . 'Postcode Check: ' . $PostCodeCheck . " || " . 'CV2 Check: ' . $CV2Check . ' || ' . '3D Secure: PASSED';
                                     //$this->model_checkout_order->update($this->session->data['order_id'], $this->config->get('paymentsense_direct_order_status_id'), $successmessage, false);
                                     //$json['success'] = $this->url->link('checkout/success', '', 'SSL');
                                     $json['error'] = '';
                                     break;
                                 } else {
                                     if ($soapStatus2[1] == '4') {
                                         $json['error'] = 'Your card has been referred - please try a different card';
                                         $do = false;
                                         break;
                                     } else {
                                         if ($soapStatus2[1] == '5') {
                                             $json['error'] = 'Your card has been declined - ' . str_replace("Card declined: ", "", $Message) . ' checks failed.\\nPlease check your billing address and card details and try again';
                                             $do = false;
                                             break;
                                         } else {
                                             $json['error'] = 'Duplicate transaction';
                                             $do = false;
                                         }
                                     }
                                 }
                             } else {
                                 $json['error'] = 'Duplicate transaction';
                                 $do = false;
                             }
                             break;
                         case 30:
                         default:
                             $status = 0;
                             // generic error
                             // read error message
                             if (preg_match('#<Message>(.*)</Message>#iU', $ret, $msg)) {
                                 $msg = $msg[1];
                             } else {
                                 $msg = '';
                             }
                             $json['error'] = 'PaymentSense Error (' . $StatusCode . ') :' . $msg;
                             $do = false;
                             break;
                     }
                 }
             }
         }
         if ($transattempt <= 3) {
             $transattempt++;
         } else {
             $transattempt = 1;
             $gwId++;
         }
     }
     return array('status' => $status, 'transaction_id' => time(), 'fraud' => rand(0, 1), 'message' => $json['error'], 'data' => $json, 'CrossReference' => $CrossReference, 'paymenstatus' => $message);
 }
Example #13
0
 public function capture(Varien_Object $payment, $amount)
 {
     if ($payment->getAdditionalInformation('hyperpay_transaction_code') == 'PA') {
         $refId = $payment->getAdditionalInformation('IDENTIFICATION_REFERENCEID');
         $currency = $payment->getAdditionalInformation('CURRENCY');
         $dataTransaction = $this->getCredentials();
         $dataTransaction['tx_mode'] = $this->getTransactionMode();
         $postData = getPostCapture($refId, $amount, $currency, $dataTransaction);
         $server = $this->getServerMode();
         $url = getExecuteUrl($server);
         $response = executePayment($postData, $url);
         $result = buildResponseArray($response);
         $payment->setAdditionalInformation('CAPTURE', $result['PROCESSING.RESULT']);
         if ($result['PROCESSING.RESULT'] == 'ACK') {
             $payment->setStatus('APPROVED')->setTransactionId($payment->getAdditionalInformation('IDENTIFICATION_REFERENCEID'))->setIsTransactionClosed(1)->save();
         } else {
             Mage::throwException(Mage::helper('hyperpay')->__('An error occurred while processing'));
         }
     } else {
         $payment->setStatus('APPROVED')->setTransactionId($payment->getAdditionalInformation('IDENTIFICATION_REFERENCEID'))->setIsTransactionClosed(1)->save();
     }
     return $this;
 }
Example #14
0
 /**
  * Process a successful result from the sale request
  *
  * @param Varien_Object               $payment
  * @param Braintree_Result_Successful $result
  * @param                             $amount
  *
  * @return Varien_Object
  */
 protected function _processSuccessResult(Varien_Object $payment, $result, $amount)
 {
     // Pass an event if the payment was a success
     Mage::dispatchEvent('gene_braintree_paypal_success', array('payment' => $payment, 'result' => $result, 'amount' => $amount));
     // Set some basic things
     $payment->setStatus(self::STATUS_APPROVED)->setCcTransId($result->transaction->id)->setLastTransId($result->transaction->id)->setTransactionId($result->transaction->id)->setIsTransactionClosed(0)->setAmount($amount)->setShouldCloseParentTransaction(false);
     // Set the additioanl information about the customers PayPal account
     $payment->setAdditionalInformation(array('paypal_email' => $result->transaction->paypal['payerEmail'], 'payment_id' => $result->transaction->paypal['paymentId'], 'authorization_id' => $result->transaction->paypal['authorizationId']));
     // Handle any fraud response from Braintree
     $this->handleFraud($result, $payment);
     // Store the PayPal token if we have one
     if (isset($result->transaction->paypal['token']) && !empty($result->transaction->paypal['token'])) {
         $payment->setAdditionalInformation('token', $result->transaction->paypal['token']);
     }
     return $payment;
 }
Example #15
0
 /**
  * @desc authorise response
  * Process the response of the soap
  * @param Varien_Object $payment
  * @param unknown_type $response
  * @todo Add comment with checkout Authorised
  */
 protected function _processResponse(Varien_Object $payment, $response, $request = null)
 {
     if (!$response instanceof stdClass) {
         return false;
     }
     switch ($request) {
         case "authorise":
         case "authorise3d":
             $fraudResult = $response->paymentResult->fraudResult->accountScore;
             $payment->setAdyenTotalFraudScore($fraudResult);
             $responseCode = $response->paymentResult->resultCode;
             $pspReference = $response->paymentResult->pspReference;
             break;
         case "refund":
             $responseCode = $response->refundResult->response;
             $pspReference = $response->refundResult->pspReference;
             break;
         case "cancel_or_refund":
             $responseCode = $response->cancelOrRefundResult->response;
             $pspReference = $response->cancelOrRefundResult->pspReference;
             break;
         case "capture":
             $responseCode = $response->captureResult->response;
             $pspReference = $response->captureResult->pspReference;
             break;
         default:
             $this->writeLog("Unknown data type by Adyen");
             break;
     }
     switch ($responseCode) {
         case "RedirectShopper":
             $payment->setAdditionalInformation('paRequest', $response->paymentResult->paRequest);
             $payment->setAdditionalInformation('md', $response->paymentResult->md);
             $payment->setAdditionalInformation('issuerUrl', $response->paymentResult->issuerUrl);
             Mage::getSingleton('customer/session')->setRedirectUrl("adyen/process/validate3d");
             $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status'));
             break;
         case "Refused":
             $errorMsg = Mage::helper('adyen')->__('The payment is REFUSED by Adyen.');
             Mage::throwException($errorMsg);
             break;
         case "Authorised":
             $this->_addStatusHistory($payment, $responseCode, $pspReference, $this->_getConfigData('order_status'));
             break;
         case "Received":
             // boleto payment
             $additionalDataResult = $response->paymentResult->additionalData->entry;
             $pdfUrl = $additionalDataResult[0]->value;
             $this->_addStatusHistory($payment, $responseCode, $pspReference, false, $pdfUrl);
             break;
         case '[capture-received]':
         case '[refund-received]':
         case '[cancelOrRefund-received]':
             $this->_addStatusHistory($payment, $responseCode, $pspReference);
             break;
         case "Error":
             $errorMsg = Mage::helper('adyen')->__('System error, please try again later');
             Mage::throwException($errorMsg);
             break;
         default:
             $this->writeLog("Unknown data type by Adyen");
             break;
     }
     //save all response data for a pure duplicate detection
     Mage::getModel('adyen/event')->setPspReference($pspReference)->setAdyenEventCode($responseCode)->setAdyenEventResult($responseCode)->setIncrementId($this->_order->getIncrementId())->setPaymentMethod($this->getInfoInstance()->getCcType())->setCreatedAt(now())->saveData();
     return $this;
 }
 /**
  * Order payment method
  *
  * @param Varien_Object $payment
  * @param float $amount
  *
  * @return Amazon_Payments_Model_PaymentMethod
  */
 public function order(Varien_Object $payment, $amount)
 {
     if (!$amount) {
         return $this;
     }
     $orderReferenceId = $payment->getAdditionalInformation('order_reference');
     if (!$orderReferenceId) {
         $orderReferenceId = Mage::getSingleton('checkout/session')->getAmazonOrderReferenceId();
         if (!$orderReferenceId) {
             Mage::throwException('Please log in to your Amazon account by clicking the Amazon pay button.');
         }
         $payment->setAdditionalInformation('order_reference', $orderReferenceId);
     }
     $payment->setTransactionId($orderReferenceId);
     $order = $payment->getOrder();
     // If previous order submission failed (e.g. bad credit card), must validate order status to prevent multiple setOrderReferenceDetails()
     if ($this->_getErrorCheck()) {
         $orderReferenceDetails = $this->_getApi()->getOrderReferenceDetails($orderReferenceId);
     }
     if (!$this->_getErrorCheck() || $orderReferenceDetails->getOrderReferenceStatus()->getState() == 'Draft') {
         $apiResult = $this->_getApi()->setOrderReferenceDetails($orderReferenceId, $order->getBaseGrandTotal(), $order->getBaseCurrencyCode(), $order->getIncrementId(), $this->_getApi()->getConfig()->getStoreName());
     }
     try {
         $apiResult = $this->_getApi()->confirmOrderReference($orderReferenceId);
     } catch (Exception $e) {
         Mage::throwException("Please try another Amazon payment method." . "\n\n" . substr($e->getMessage(), 0, strpos($e->getMessage(), 'Stack trace')));
         $this->_setErrorCheck();
         return;
     }
     $payment->setIsTransactionClosed(false);
     $payment->setSkipOrderProcessing(true);
     $message = Mage::helper('payment')->__(($this->getConfigData('is_async') ? 'Asynchronous ' : '') . 'Order of %s sent to Amazon Payments.', $order->getStore()->convertPrice($amount, true, false));
     $payment->addTransaction(Mage_Sales_Model_Order_Payment_Transaction::TYPE_ORDER, null, false, $message);
     switch ($this->getConfigData('payment_action')) {
         case self::ACTION_AUTHORIZE:
             $this->_authorize($payment, $amount, false);
             break;
         case self::ACTION_AUTHORIZE_CAPTURE:
             $this->_authorize($payment, $amount, true);
             break;
         default:
             break;
     }
     return $this;
 }
Example #17
0
 public function createOrder(Varien_Object $payment, $amount, $authorize)
 {
     $store_id = Mage::app()->getStore()->getStoreId();
     if ($payment->getOrder()) {
         $orderId = $payment->getOrder()->getIncrementId();
     } else {
         $orderId = $payment->getQuote()->getIncrementId();
         // $order = $payment->getOrder())
     }
     $logger = Mage::helper('worldpay/logger');
     $session = Mage::getSingleton('core/session');
     $token = $session->getData('payment_token');
     $savedCard = $session->getData('saved_card');
     $logger->log('Begin create order');
     $session->setData('wp_3dsSuccess', false);
     $session->setData('wp_orderCode', false);
     $worldpay = $this->setupWorldpay();
     if (Mage::app()->getStore()->isAdmin()) {
         $checkout = Mage::getSingleton('adminhtml/session_quote')->getQuote();
     } else {
         $checkout = Mage::getSingleton('checkout/session')->getQuote();
     }
     $billing = $checkout->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 = '3D';
         }
         $settlementCurrency = Mage::getStoreConfig('payment/worldpay_cc/settlementcurrency', Mage::app()->getStore()->getStoreId());
         $createOrderRequest = array('token' => $token, 'orderDescription' => $order_description, 'amount' => $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') {
             $this->setStore($payment->getOrder()->getStoreId());
             $logger->log('Order: ' . $response['orderCode'] . ' SUCCESS');
             $payment->setStatus(self::STATUS_APPROVED);
             $payment->setAmount($amount);
             $payment->setLastTransId($orderId);
             $payment->setTransactionId($response['orderCode']);
             $payment->setAdditionalInformation("worldpayOrderCode", $response['orderCode']);
             // $formatedPrice = $order->getBaseCurrency()->formatTxt($amount);
             $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']) {
                     $session = Mage::getSingleton('core/session');
                     $logger->log('Starting 3DS Order: ' . $response['orderCode']);
                     $session->setData('wp_3dsSuccess', false);
                     $session->setData('wp_redirectURL', $response['redirectURL']);
                     $session->setData('wp_oneTime3DsToken', $response['oneTime3DsToken']);
                     $session->setData('wp_orderCode', $response['orderCode']);
                     // IF normal checkout
                     $currentUrl = Mage::helper('core/url')->getCurrentUrl();
                     $url = Mage::getSingleton('core/url')->parseUrl($currentUrl);
                     $path = $url->getPath();
                     if (strpos($path, 'onepage') === false) {
                         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('worldpay/threeDS'));
                         Mage::app()->getResponse()->sendResponse();
                     } else {
                         echo 'window.WorldpayMagento.loadThreeDS("' . Mage::getUrl('worldpay/threeDS') . '")';
                     }
                     exit;
                 } 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;
 }
Example #18
0
 /**
  * Call DoAuthorize
  *
  * @param int $amount
  * @param Varien_Object $payment
  * @param string $parentTransactionId
  * @return Mage_Paypal_Model_Api_Abstract
  */
 protected function _callDoAuthorize($amount, $payment, $parentTransactionId)
 {
     $api = $this->_pro->resetApi()->getApi()->setAmount($amount)->setCurrencyCode($payment->getOrder()->getBaseCurrencyCode())->setTransactionId($parentTransactionId)->callDoAuthorization();
     $payment->setAdditionalInformation($this->_authorizationCountKey, $payment->getAdditionalInformation($this->_authorizationCountKey) + 1);
     return $api;
 }
 /**
  * Update the payment with details from the CC Auth Request and Reply
  * @param Varien_Object                          $payment
  * @param Payload\Payment\ICreditCardAuthRequest $request
  * @param Payload\Payment\ICreditCardAuthReply   $response
  * @return self
  */
 public function _updatePayment(Varien_Object $payment, Payload\Payment\ICreditCardAuthRequest $request, Payload\Payment\ICreditCardAuthReply $response)
 {
     $correctionRequired = $response->getIsAVSCorrectionRequired() || $response->getIsCVV2CorrectionRequired();
     $payment->setAdditionalInformation(['request_id' => $request->getRequestId(), 'response_code' => $response->getResponseCode(), 'pan_is_token' => $response->getPanIsToken(), 'bank_authorization_code' => $response->getBankAuthorizationCode(), 'cvv2_response_code' => $response->getCVV2ResponseCode(), 'avs_response_code' => $response->getAVSResponseCode(), 'phone_response_code' => $response->getPhoneResponseCode(), 'name_response_code' => $response->getNameResponseCode(), 'email_response_code' => $response->getEmailResponseCode(), 'currency_code' => $response->getCurrencyCode(), 'tender_type' => $this->_helper->getTenderTypeForCcType($payment->getCcType()), 'is_correction_required' => $correctionRequired, 'last4_to_correct' => $correctionRequired ? $payment->getCcLast4() : null])->setAmountAuthorized($response->getAmountAuthorized())->setBaseAmountAuthorized($response->getAmountAuthorized())->setCcNumberEnc($payment->encrypt($response->getCardNumber()));
     return $this;
 }
Example #20
0
 /**
  * Authorize the transaction by calling PAYMENT_INIT, PAYMENT_REQUEST and PAYMENT_CONFIRM.
  *
  * @param   Varien_Object $orderPayment
  * @param   float $amount
  * @return  RatePAY_Ratepaypayment_Model_Method_Rate
  */
 public function authorize(Varien_Object $payment, $amount)
 {
     $client = Mage::getSingleton('ratepaypayment/request');
     $order = $this->getQuoteOrOrder();
     $helper = Mage::helper('ratepaypayment/mapping');
     $head = $helper->getRequestHead($order);
     if (Mage::getSingleton('ratepaypayment/session')->getQueryActive() && Mage::getSingleton('ratepaypayment/session')->getTransactionId()) {
         $result['transactionId'] = Mage::getSingleton('ratepaypayment/session')->getTransactionId();
     } else {
         $result = $client->callPaymentInit($helper->getRequestHead($order), $helper->getLoggingInfo($order));
     }
     if (is_array($result) || $result == true) {
         $payment->setAdditionalInformation('transactionId', $result['transactionId']);
         $payment->setAdditionalInformation('profileId', $head['profileId']);
         $payment->setAdditionalInformation('securityCode', $head['securityCode']);
         $result = $client->callPaymentRequest($helper->getRequestHead($order), $helper->getRequestCustomer($order), $helper->getRequestBasket($order), $helper->getRequestPayment($order, (double) Mage::getSingleton('ratepaypayment/session')->getRatepayRate0TotalAmount(), 'PAYMENT_REQUEST'), $helper->getLoggingInfo($order));
         if (is_array($result) || $result == true) {
             $payment->setAdditionalInformation('descriptor', $result['descriptor']);
             $resultConfirm = $client->callPaymentConfirm($helper->getRequestHead($order), $helper->getLoggingInfo($order));
             if (!is_array($resultConfirm) && !$resultConfirm == true) {
                 $this->_abortBackToPayment('PAYMENT_REQUEST Declined');
             }
         } else {
             $this->_abortBackToPayment('PAYMENT_REQUEST Declined');
         }
     } else {
         $this->_abortBackToPayment('Gateway Offline');
     }
     return $this;
 }
 public function capture(Varien_Object $payment, $amount)
 {
     $session = Mage::getSingleton('core/session');
     $logger = Mage::helper('worldpay/logger');
     if ($session->getData('wp_3dscompletionNeeded')) {
         $payment->setIsTransactionClosed(0);
         $payment->setSkipOrderProcessing(true);
         $payment->setStatus(self::STATUS_APPROVED);
         $payment->setAmount($amount);
         $payment->setShouldCloseParentTransaction(1);
         $payment->setAdditionalInformation("worldpayOrderCode", $session->getData('wp_orderCode'));
         $payment->setLastTransId($session->getData('wp_orderCode'));
         $payment->setTransactionId($session->getData('wp_orderCode'));
         $session->setData('wp_3dscompletionNeeded', false);
         return $this;
     }
     $worldpayOrderCode = $payment->getData('last_trans_id');
     if ($worldpayOrderCode) {
         $worldpay = $this->setupWorldpay();
         try {
             $authorizationTransaction = $payment->getAuthorizationTransaction();
             if ($authorizationTransaction) {
                 $payment->setAdditionalInformation("worldpayOrderCode", $authorizationTransaction->getTxnId());
                 $worldpayOrderCode = $authorizationTransaction->getTxnId();
             } else {
                 $worldpayOrderCode = $payment->getAdditionalInformation('worldpayOrderCode');
             }
             $worldpay->captureAuthorisedOrder($worldpayOrderCode, $amount * 100);
             $payment->setShouldCloseParentTransaction(1)->setIsTransactionClosed(1);
             $logger->log('Capture Order: ' . $session->getData('wp_orderCode') . ' success');
         } catch (Exception $e) {
             $logger->log('Capture Order: ' . $session->getData('wp_orderCode') . ' failed with ' . $e->getMessage());
             Mage::throwException('Payment failed, please try again later ' . $e->getMessage());
         }
     } else {
         $payment->setAdditionalInformation('payment_type', 'capture');
         return $this->createOrder($payment, $amount, false);
     }
 }
 /**
  * Send authorize request to gateway
  *
  * @param  Varien_Object $payment
  * @param  decimal $amount
  * @return Mage_Paygate_Model_Authorizenet
  * @throws Mage_Core_Exception
  */
 public function authorize(Varien_Object $payment, $amount)
 {
     $payment->setAdditionalInformation('payment_type', $this->getConfigData('payment_action'));
 }
Example #23
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;
 }