/** * 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; }
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; }