/**
  * Process a card transaction using a token.
  *
  * @param  Varien_Object $info
  * @return array
  */
 public function tokenTransaction(Varien_Object $info)
 {
     $sessT = $this->getSageSuiteSession()->getLastSavedTokenccid();
     $tokenLoadId = !is_null($sessT) ? $sessT : $info->getPayment()->getSagepayTokenCcId();
     $_t = Mage::getModel('sagepaysuite2/sagepaysuite_tokencard')->load($tokenLoadId);
     $_t->setIsDefault(1)->save();
     $isGuest = Mage::getSingleton('checkout/type_onepage')->getCheckoutMethod() == Mage_Checkout_Model_Type_Onepage::METHOD_GUEST;
     if ($this->_getIsAdmin()) {
         $isGuest = FALSE;
     }
     $postData = array();
     $postData += $this->_getGeneralTrnData($info->getPayment(), $info->getParameters())->getData();
     $postData['vendortxcode'] = substr($postData['vendor_tx_code'], 0, 40);
     $postData['txtype'] = $info->getPayment()->getTransactionType();
     $postData['InternalTxtype'] = $postData['txtype'];
     $postData['token'] = $_t->getToken();
     $postData['storetoken'] = $isGuest ? '0' : '1';
     $postData['description'] = '.';
     $postData['CV2'] = $this->getSageSuiteSession()->getTokenCvv();
     $postData['vendor'] = $this->getConfigData('vendor');
     //@TODO: Check this for token MOTO transactions.
     if (array_key_exists('integration', $postData) && strtolower($postData['integration']) == 'server') {
         $postData['Profile'] = 'LOW';
     }
     if (isset($postData['c_v2']) && empty($postData['CV2'])) {
         $postData['CV2'] = $postData['c_v2'];
     }
     $postData = Mage::helper('sagepaysuite')->arrayKeysToCamelCase($postData);
     if (isset($postData['Storetoken'])) {
         $postData['StoreToken'] = $postData['Storetoken'];
         unset($postData['Storetoken']);
     }
     // Do not perform 3D checks on MS checkout
     if ($this->_isMultishippingCheckout()) {
         $postData['Apply3DSecure'] = 2;
     } else {
         $postData['Apply3DSecure'] = (int) Mage::getStoreConfig("payment/sagepaydirectpro/secure3d");
     }
     if ($this->forceCardChecking($_t->getCardType()) === true) {
         $postData['Apply3DSecure'] = 3;
     }
     $postData['ApplyAVSCV2'] = (int) $this->getConfigData('avscv2');
     $urlPost = $this->getTokenUrl('post', isset($postData['Integration']) ? $postData['Integration'] : 'direct');
     $rs = $this->requestPost($urlPost, $postData);
     $rs['request'] = new Varien_Object($postData);
     $objRs = new Varien_Object($rs);
     $objRs->setResponseStatus($objRs->getData('Status'))->setResponseStatusDetail($objRs->getData('StatusDetail'));
     $info->getPayment()->setSagePayResult($objRs);
     return $rs;
 }
 public function registerTransaction($params = null)
 {
     if (isset($params['payment'])) {
         $this->_postPayment = $params['payment'];
         //Added on Magento EE 1.13.0.0
         if ($this->getCode() == 'sagepayserver_moto' && Mage::helper('sagepaysuite')->isMagentoEE113OrUp()) {
             $this->_postPayment['checks'] = Mage_Payment_Model_Method_Abstract::CHECK_USE_INTERNAL | Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_COUNTRY | Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_CURRENCY | Mage_Payment_Model_Method_Abstract::CHECK_ORDER_TOTAL_MIN_MAX | Mage_Payment_Model_Method_Abstract::CHECK_ZERO_TOTAL;
         }
     }
     if ($this->getCode() == 'sagepayserver_moto' && $this->_getIsAdmin()) {
         if (isset($this->_postPayment['sagepay_token_cc_id'])) {
             $this->getSageSuiteSession()->setLastSavedTokenccid($this->_postPayment['sagepay_token_cc_id']);
         } else {
             $this->getSageSuiteSession()->setLastSavedTokenccid(null);
         }
         $err = new Varien_Object();
         $err['response_status'] = 'ERROR';
         if (!$this->_getAdminQuote()->hasItems()) {
             $err['response_status_detail'] = $this->_sageHelper()->__('There are no items in quote');
         } else {
             if (!$this->_getAdminQuote()->getIsVirtual() && !$this->_getAdminQuote()->getShippingAddress()->getShippingMethod()) {
                 $err['response_status_detail'] = $this->_sageHelper()->__('Please, select a shipping method');
             } else {
                 if ((int) $this->_getAdminQuote()->getCustomerId() === 0) {
                     //Check if customer exists
                     $cs = Mage::helper('sagepaysuite')->existsCustomerForEmail($this->_getAdminQuote()->getCustomerEmail(), $this->_getAdminQuote()->getStore()->getWebsite()->getId());
                     if ($cs) {
                         $err['response_status_detail'] = $this->_sageHelper()->__('Customer already exists.');
                     }
                 }
             }
         }
         if (isset($err['response_status_detail'])) {
             return $err;
         }
     }
     $this->_getSagePayServerSession()->setRemoteAddr($this->getClientIp());
     $quoteObj = $this->_getQuote();
     //Only collect totals for frontend orders, if you do for moto orders, it breaks for example discounts application.
     if (!$this->_getIsAdmin()) {
         //@TODO: Dont collect totals if Amasty_Promo or Qian_Bxgy is present
         //$quoteObj->setTotalsCollectedFlag(false)->collectTotals();
     }
     //$amount = $this->formatAmount($quoteObj->getGrandTotal(), $quoteObj->getQuoteCurrencyCode());
     $payment = $this->_getBuildPaymentObject($quoteObj);
     /**
      * Token Transaction
      */
     $this->_tokenPresent();
     if (true === $this->_tokenPresent()) {
         $payment->setIntegra('server');
         $_info = new Varien_Object(array('payment' => $payment, 'parameters' => $params));
         $result = $this->getTokenModel()->tokenTransaction($_info);
         if ($result['Status'] != 'OK') {
             Mage::throwException(Mage::helper('sagepaysuite')->__($result['StatusDetail']));
         }
         $requestObject = $result['request'];
         $vendorTxCode = $requestObject->getData('VendorTxCode');
         $this->getSageSuiteSession()->setLastVendorTxCode($vendorTxCode);
         if (strtoupper($requestObject->getData('Txtype')) == 'PAYMENT') {
             $this->getSageSuiteSession()->setInvoicePayment(true);
         }
         // Set values on SagePayServer session's namespace
         $this->_getSagePayServerSession()->setSecurityKey($result['SecurityKey'])->setVendorTxCode($vendorTxCode)->setVpsTxId($result['VPSTxId'])->setNextUrl($result['NextURL']);
         $trn = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($vendorTxCode)->setVendorTxCode($vendorTxCode)->setToken($requestObject->getData('Token'))->setVendorname($requestObject->getData('Vendor'))->setSecurityKey($result['SecurityKey'])->setMode($this->getConfigData('mode'))->setTrnCurrency($requestObject->getData('Currency'))->setTrnAmount($requestObject->getData('Amount'))->setCustomerContactInfo($requestObject->getData('ContactNumber'))->setIntegration('server')->setTrndate($this->getDate())->save();
         $rs = new Varien_Object();
         $rs->setResponseStatus($result['Status'])->setResponseStatusDetail(Mage::helper('sagepaysuite')->__($result['StatusDetail']))->setNextUrl($result['NextURL'])->setVPSTxID($result['VPSTxId']);
         return $rs;
     }
     /**
      * Token Transaction
      */
     $request = $this->_buildRequest($params);
     $response = $this->_postRequest($request);
     $this->getSageSuiteSession()->setLastVendorTxCode($request->getData('VendorTxCode'));
     if (strtoupper($request->getData('TxType')) == 'PAYMENT') {
         $this->getSageSuiteSession()->setInvoicePayment(true);
     }
     $token_nickname = array_key_exists("cc_nickname", $this->_postPayment) ? $this->_postPayment['cc_nickname'] : null;
     $trn = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($request->getData('VendorTxCode'))->setVendorTxCode($request->getData('VendorTxCode'))->setVpsProtocol($response->getData('vps_protocol'))->setVendorname($request->getData('Vendor'))->setCustomerContactInfo($request->getData('ContactNumber'))->setMode($this->getConfigData('mode'))->setTxType($request->getData('TxType'))->setTrnCurrency($request->getCurrency())->setIntegration('server')->setCardType($request->getData('CardType'))->setStatus($response->getResponseStatus())->setSecurityKey($response->getSecurityKey())->setStatusDetail($response->getResponseStatusDetail())->setVpsTxId($response->getData('v_ps_tx_id'))->setTrnCurrency($request->getData('Currency'))->setTrnAmount($request->getData('Amount'))->setNickname($token_nickname)->setTrndate($this->getDate());
     $trn->save();
     return $response;
 }
 public function nitTransaction(Varien_Object $info)
 {
     $postData = array();
     $postData += $this->_getGeneralTrnData($info->getPayment(), $info->getParameters())->getData();
     $postData['VendorTxCode'] = substr($postData['vendor_tx_code'], 0, 40);
     $postData['Txtype'] = $info->getPayment()->getTransactionType();
     $postData['InternalTxtype'] = $postData['Txtype'];
     $postData['Token'] = $info->getPayment()->getNitCardIdentifier();
     $postData['ECDType'] = 1;
     $postData['Description'] = 'Purchased Goods.';
     $postData['Vendor'] = $this->getConfigData('vendor');
     //@TODO: Check this for token MOTO transactions.
     //remove unused fields
     if (array_key_exists("c_v2", $postData)) {
         unset($postData["c_v2"]);
     }
     if (array_key_exists("card_holder", $postData)) {
         unset($postData["card_holder"]);
     }
     if (array_key_exists("card_number", $postData)) {
         unset($postData["card_number"]);
     }
     if (array_key_exists("card_type", $postData)) {
         unset($postData["card_type"]);
     }
     if (array_key_exists("expiry_date", $postData)) {
         unset($postData["expiry_date"]);
     }
     //surcharge XML
     if (Mage::helper('sagepaysuite')->surchargesModuleEnabled() == true) {
         $surchargeXML = $this->getSurchargeXml($this->_getQuote());
         if (!is_null($surchargeXML)) {
             $postData['SurchargeXML'] = $surchargeXML;
         }
     }
     $postData = Mage::helper('sagepaysuite')->arrayKeysToCamelCase($postData);
     //$postData['Apply3DSecure'] = (int) Mage::getStoreConfig("payment/sagepaydirectpro/secure3d");
     $urlPost = $this->getTokenUrl('post', 'nit');
     $rs = $this->requestPost($urlPost, $postData);
     $rs['request'] = new Varien_Object($postData);
     $objRs = new Varien_Object($rs);
     $objRs->setResponseStatus($objRs->getData('Status'))->setResponseStatusDetail($objRs->getData('StatusDetail'));
     $info->getPayment()->setSagePayResult($objRs);
     return $rs;
 }
Example #4
0
 public function registerTransaction($params = null)
 {
     if ($this->_getIsAdmin()) {
         $this->_postPayment = $params['payment'];
         $err = new Varien_Object();
         $err['response_status'] = 'ERROR';
         if (!$this->_getAdminQuote()->hasItems()) {
             $err['response_status_detail'] = $this->_sageHelper()->__('There are no items in quote');
         } else {
             if (!$this->_getAdminQuote()->getIsVirtual() && !$this->_getAdminQuote()->getShippingAddress()->getShippingMethod()) {
                 $err['response_status_detail'] = $this->_sageHelper()->__('Please, select a shipping method');
             } else {
                 if ((int) $this->_getAdminQuote()->getCustomerId() === 0) {
                     //Check if customer exists
                     $cs = Mage::getModel('customer/customer')->setWebsiteId($this->_getAdminQuote()->getStore()->getWebsite()->getId())->loadByEmail($this->_getAdminQuote()->getCustomerEmail());
                     if ($cs->getId()) {
                         $err['response_status_detail'] = $this->_sageHelper()->__('Customer already exists.');
                     }
                 }
             }
         }
         if (isset($err['response_status_detail'])) {
             return $err;
         }
     }
     $this->_getSagePayServerSession()->setRemoteAddr($this->getClientIp());
     $quoteObj = $this->_getQuote();
     $amount = $this->formatAmount($quoteObj->getGrandTotal(), $quoteObj->getQuoteCurrencyCode());
     $payment = $this->_getBuildPaymentObject($quoteObj);
     /**
      * Token Transaction
      */
     $this->_tokenPresent();
     if (true === $this->_tokenPresent()) {
         $payment->setIntegra('server');
         $_info = new Varien_Object(array('payment' => $payment));
         $result = $this->getTokenModel()->tokenTransaction($_info);
         if ($result['Status'] != 'OK') {
             Mage::throwException($result['StatusDetail']);
         }
         $requestObject = $result['request'];
         $vendorTxCode = $requestObject->getData('VendorTxCode');
         $this->getSageSuiteSession()->setLastVendorTxCode($vendorTxCode);
         if (strtoupper($requestObject->getData('Txtype')) == 'PAYMENT') {
             $this->getSageSuiteSession()->setInvoicePayment(true);
         }
         // Set values on SagePayServer session's namespace
         $this->_getSagePayServerSession()->setSecurityKey($result['SecurityKey'])->setVendorTxCode($vendorTxCode)->setVpsTxId($result['VPSTxId'])->setNextUrl($result['NextURL']);
         $trn = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($vendorTxCode)->setVendorTxCode($vendorTxCode)->setToken($requestObject->getData('Token'))->setVendorname($requestObject->getData('Vendor'))->setSecurityKey($result['SecurityKey'])->setMode($this->getConfigData('mode'))->setTrnCurrency($requestObject->getData('Currency'))->setCustomerContactInfo($requestObject->getData('ContactNumber'))->setIntegration('server')->setTrndate($this->getDate())->save();
         $rs = new Varien_Object();
         $rs->setResponseStatus($result['Status'])->setResponseStatusDetail($result['StatusDetail'])->setNextUrl($result['NextURL'])->setVPSTxID($result['VPSTxId']);
         return $rs;
     }
     /**
      * Token Transaction
      */
     $request = $this->_buildRequest($params);
     $response = $this->_postRequest($request);
     $this->getSageSuiteSession()->setLastVendorTxCode($request->getData('VendorTxCode'));
     if (strtoupper($request->getData('TxType')) == 'PAYMENT') {
         $this->getSageSuiteSession()->setInvoicePayment(true);
     }
     $trn = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($request->getData('VendorTxCode'))->setVendorTxCode($request->getData('VendorTxCode'))->setVpsProtocol($response->getData('vps_protocol'))->setVendorname($request->getData('Vendor'))->setCustomerContactInfo($request->getData('ContactNumber'))->setMode($this->getConfigData('mode'))->setTxType($request->getData('TxType'))->setTrnCurrency($request->getCurrency())->setIntegration('server')->setCardType($request->getData('CardType'))->setStatus($response->getResponseStatus())->setSecurityKey($response->getSecurityKey())->setStatusDetail($response->getResponseStatusDetail())->setVpsTxId($response->getData('v_ps_tx_id'))->setTrnCurrency($request->getData('Currency'))->setTrndate($this->getDate());
     $trn->save();
     return $response;
 }