Hps_Securesubmit - Version 1.2.8

Version Notes

Fix: Issue with Magento card type validation when not using iframes
Update: Add authorization data to payment information block for admin users
Fix: Card type during checkout. Uses value from frontend.
Fix: iframes when IWD isn't present
Fix: OPC transfer on failed payment
Fix: Issue with checkout using multi-use token
Update: Add basic velocity check based on IP
Update: Add support for partial refunds

Download this release

Release Info

Developer Heartland Payment Systems
Extension Hps_Securesubmit
Version 1.2.8
Comparing to
See all releases


Code changes from version 1.2.7 to 1.2.8

app/code/community/Hps/Securesubmit/Block/Info.php CHANGED
@@ -18,16 +18,58 @@ class Hps_SecureSubmit_Block_Info extends Mage_Payment_Block_Info
18
  $gift = '';
19
 
20
  if (isset($additionalData['giftcard_number'])) {
21
- $gift = "Gift Card" . (!$skipCC ? ' & ' : '');;
22
- }
23
 
24
  $type = $gift;
25
  if (!$skipCC) {
26
- $type .= $info->getCcLast4() . " (" . $info->getCcExpMonth() . "/" . $info->getCcExpYear() . ")";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  }
28
 
29
- $data[Mage::helper("payment")->__("Payment Type")] = $type;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
 
31
  return $transport->setData(array_merge($data, $transport->getData()));
32
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  }
18
  $gift = '';
19
 
20
  if (isset($additionalData['giftcard_number'])) {
21
+ $gift = 'Gift Card' . (!$skipCC ? ' & ' : '');
22
+ }
23
 
24
  $type = $gift;
25
  if (!$skipCC) {
26
+ $cardType = isset($additionalData['cc_type'])
27
+ ? $additionalData['cc_type']
28
+ : ($info->getCcType() ? $info->getCcType() : '');
29
+ $type .= sprintf(
30
+ '%s ending with %s (%s/%s)',
31
+ strtoupper($cardType),
32
+ $info->getCcLast4(),
33
+ $info->getCcExpMonth(),
34
+ $info->getCcExpYear()
35
+ );
36
+ }
37
+
38
+ $data[Mage::helper('payment')->__('Payment Type')] = $type;
39
+
40
+ if ($this->isAdmin() && isset($additionalData['auth_code'])) {
41
+ $data[Mage::helper('payment')->__('Authorization Code')] = $additionalData['auth_code'];
42
  }
43
 
44
+ if ($this->isAdmin() && isset($additionalData['avs_response_code'])) {
45
+ $data[Mage::helper('payment')->__('AVS Response')] = sprintf(
46
+ '%s (%s)',
47
+ $additionalData['avs_response_text'],
48
+ $additionalData['avs_response_code']
49
+ );
50
+ }
51
+
52
+ if ($this->isAdmin() && isset($additionalData['cvv_response_code'])) {
53
+ $data[Mage::helper('payment')->__('CVV Response')] = sprintf(
54
+ '%s (%s)',
55
+ $additionalData['cvv_response_text'],
56
+ $additionalData['cvv_response_code']
57
+ );
58
+ }
59
 
60
  return $transport->setData(array_merge($data, $transport->getData()));
61
  }
62
+
63
+ protected function isAdmin()
64
+ {
65
+ if (Mage::app()->getStore()->isAdmin()) {
66
+ return true;
67
+ }
68
+
69
+ if (Mage::getDesign()->getArea() == 'adminhtml') {
70
+ return true;
71
+ }
72
+
73
+ return false;
74
+ }
75
  }
app/code/community/Hps/Securesubmit/Model/Payment.php CHANGED
@@ -9,6 +9,10 @@ require_once Mage::getBaseDir('lib').DS.'SecureSubmit'.DS.'Hps.php';
9
  */
10
  class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
11
  {
 
 
 
 
12
  protected $_code = 'hps_securesubmit';
13
  protected $_isGateway = true;
14
  protected $_canCapture = true;
@@ -22,11 +26,14 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
22
  protected $_formBlockType = 'hps_securesubmit/form';
23
  protected $_formBlockTypeAdmin = 'hps_securesubmit/adminhtml_form';
24
  protected $_infoBlockType = 'hps_securesubmit/info';
 
25
  protected $_allow_fraud = null;
26
  protected $_email_fraud = null;
27
  protected $_fraud_address = null;
28
  protected $_fraud_text = null;
29
  protected $_use_iframes = null;
 
 
30
 
31
  /**
32
  * Fields that should be replaced in debug with '***'
@@ -82,6 +89,8 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
82
  */
83
  private function _authorize(Varien_Object $payment, $amount, $capture)
84
  {
 
 
85
  $order = $payment->getOrder(); /* @var $order Mage_Sales_Model_Order */
86
  $multiToken = false;
87
  $cardData = null;
@@ -104,6 +113,8 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
104
  if ($giftResponse->balanceAmount > $amount) {
105
  // 2.yes. process full to gift
106
  try {
 
 
107
  if (strpos($this->getConfigData('secretapikey'), '_cert_') !== false) {
108
  $giftresp = $giftService->sale($giftcard, 10.00);
109
  } else {
@@ -123,21 +134,33 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
123
  $this->closeTransaction($payment,$amount,$giftresp);
124
  return $this;
125
  } catch (Exception $e) {
 
 
126
  Mage::logException($e);
127
  $payment->setStatus(self::STATUS_ERROR);
128
  $this->throwUserError($e->getMessage(), null, true);
129
  }
130
  } else {
131
  // 2.no. process full gift card amt and card process remainder
132
- $giftresp = $giftService->sale($giftcard, $giftResponse->balanceAmount);
133
- $order->addStatusHistoryComment('Used Heartland Gift Card ' . $giftCardNumber . ' for amount $' . $giftResponse->balanceAmount . '. [partial payment]')->save();
134
- $payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS,
135
- array(
136
- 'gift_card_number' => $giftCardNumber,
137
- 'gift_card_transaction' => $giftresp->transactionId,
138
- 'gift_card_amount_charged' => $giftResponse->balanceAmount));
139
- $payment->setAmount($giftResponse->balanceAmount)->save();
140
- $amount = $amount - $giftResponse->balanceAmount; // remainder
 
 
 
 
 
 
 
 
 
 
141
  // 3. TODO: if the card payment fails later, refund the gift transaction
142
  }
143
  }
@@ -158,6 +181,8 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
158
  $cardOrToken->tokenValue = $secureToken;
159
 
160
  try {
 
 
161
  if ($capture) {
162
  if ($payment->getCcTransId()) {
163
  $response = $chargeService->capture(
@@ -187,7 +212,7 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
187
 
188
  $this->_debugChargeService($chargeService);
189
  // \Hps_Securesubmit_Model_Payment::closeTransaction
190
- $this->closeTransaction($payment,$amount,$response);
191
 
192
  if ($giftCardNumber) {
193
  $order->addStatusHistoryComment('Remaining amount to be charged to credit card ' .$this->_formatAmount((string)$amount) . '. [partial payment]')->save();
@@ -197,8 +222,9 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
197
  $this->saveMultiUseToken($response, $cardData, $customerId, $cardType);
198
  }
199
  } catch (HpsCreditException $e) {
 
 
200
  Mage::logException($e);
201
- $this->getFraudSettings();
202
  $this->_debugChargeService($chargeService, $e);
203
 
204
  // refund gift (if used)
@@ -250,19 +276,37 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
250
  * @param Mage_Payment_Model_Method_Abstract::STATUS_UNKNOWN|STATUS_APPROVED|STATUS_ERROR|STATUS_DECLINED|STATUS_VOID|STATUS_SUCCESS $status
251
  */
252
  protected function closeTransaction($payment, $amount, $response, $status = self::STATUS_APPROVED){
 
 
 
253
  $payment->setStatus($status);
254
  $payment->setAmount($amount);
255
- if (property_exists($response,'authorizationCode')){
256
- $payment->setCcApproval($response->authorizationCode);
257
- }
258
- if (property_exists($response,'avsResultCode')){
259
- $payment->setCcAvsStatus($response->avsResultCode);
260
- }
261
  $payment->setLastTransId($response->transactionId);
262
  $payment->setCcTransId($response->transactionId);
263
  $payment->setTransactionId($response->transactionId);
264
  $payment->setIsTransactionClosed(0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  }
 
266
  protected function saveMultiUseToken($response, $cardData, $customerId, $cardType)
267
  {
268
  $tokenData = $response->tokenData; /* @var $tokenData HpsTokenData */
@@ -284,18 +328,142 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
284
  }
285
  }
286
 
287
- protected function _formatAmount($amount) {
 
288
  return Mage::helper('core')->currency($amount, true, false);
289
  }
290
 
291
  protected function getFraudSettings()
292
  {
293
- $this->_allow_fraud = Mage::getStoreConfig('payment/hps_securesubmit/allow_fraud') == 1;
294
- $this->_email_fraud = Mage::getStoreConfig('payment/hps_securesubmit/email_fraud') == 1;
295
- $this->_fraud_address = Mage::getStoreConfig('payment/hps_securesubmit/fraud_address');
296
- $this->_fraud_text = Mage::getStoreConfig('payment/hps_securesubmit/fraud_text');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
297
  }
298
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  /**
300
  * @param Varien_Object|Mage_Sales_Model_Order_Payment $payment
301
  * @param float $amount
@@ -303,8 +471,13 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
303
  */
304
  public function refund(Varien_Object $payment, $amount)
305
  {
306
- if ($this->canVoid($payment) && $this->transactionActiveOnGateway($payment)) {
307
- $this->void($payment);
 
 
 
 
 
308
  } else {
309
  $this->_refund($payment, $amount);
310
  }
@@ -312,6 +485,27 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
312
  return $this;
313
  }
314
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
315
  public function getParentTransactionId(Varien_Object $payment)
316
  {
317
  $transaction = Mage::getModel('sales/order_payment_transaction')->getCollection()
@@ -326,21 +520,6 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
326
  }
327
  }
328
 
329
- public function transactionActiveOnGateway(Varien_Object $payment)
330
- {
331
- $transactionId = null;
332
-
333
- if (false !== ($parentId = $this->getParentTransactionId($payment))) {
334
- $transactionId = $parentId;
335
- } else {
336
- $transactionId = $payment->getCcTransId();
337
- }
338
-
339
- $service = $this->_getChargeService();
340
- $transaction = $service->get($transactionId);
341
-
342
- return $transaction->transactionStatus == 'A';
343
- }
344
 
345
  /**
346
  * Void payment abstract method
@@ -418,6 +597,45 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
418
  return $this;
419
  }
420
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
421
  /**
422
  * @param null|Mage_Sales_Model_Quote $quote
423
  * @return bool
@@ -511,12 +729,13 @@ class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
511
  }
512
 
513
  // Send checkout session back to payment section to avoid double-attempt to charge single-use token
514
- if ($goToPaymentSection && Mage::app()->getRequest()->getOriginalPathInfo() == '/checkout/onepage/saveOrder') {
515
- Mage::getSingleton('checkout/session')->setGotoSection('payment');
 
 
 
 
516
  }
517
-
518
- Mage::log('throwing user error with Mage_Core_Exception: ' . $error);
519
- throw new Mage_Core_Exception($error);
520
  }
521
 
522
  /**
9
  */
10
  class Hps_Securesubmit_Model_Payment extends Mage_Payment_Model_Method_Cc
11
  {
12
+ const FRAUD_TEXT_DEFAULT = '%s';
13
+ const FRAUD_VELOCITY_ATTEMPTS_DEFAULT = 3;
14
+ const FRAUD_VELOCITY_TIMEOUT_DEFAULT = 10;
15
+
16
  protected $_code = 'hps_securesubmit';
17
  protected $_isGateway = true;
18
  protected $_canCapture = true;
26
  protected $_formBlockType = 'hps_securesubmit/form';
27
  protected $_formBlockTypeAdmin = 'hps_securesubmit/adminhtml_form';
28
  protected $_infoBlockType = 'hps_securesubmit/info';
29
+ protected $_enable_anti_fraud = null;
30
  protected $_allow_fraud = null;
31
  protected $_email_fraud = null;
32
  protected $_fraud_address = null;
33
  protected $_fraud_text = null;
34
  protected $_use_iframes = null;
35
+ protected $_fraud_velocity_attempts = null;
36
+ protected $_fraud_velocity_timeout = null;
37
 
38
  /**
39
  * Fields that should be replaced in debug with '***'
89
  */
90
  private function _authorize(Varien_Object $payment, $amount, $capture)
91
  {
92
+ $this->getFraudSettings();
93
+
94
  $order = $payment->getOrder(); /* @var $order Mage_Sales_Model_Order */
95
  $multiToken = false;
96
  $cardData = null;
113
  if ($giftResponse->balanceAmount > $amount) {
114
  // 2.yes. process full to gift
115
  try {
116
+ $this->checkVelocity();
117
+
118
  if (strpos($this->getConfigData('secretapikey'), '_cert_') !== false) {
119
  $giftresp = $giftService->sale($giftcard, 10.00);
120
  } else {
134
  $this->closeTransaction($payment,$amount,$giftresp);
135
  return $this;
136
  } catch (Exception $e) {
137
+ $this->updateVelocity($e);
138
+
139
  Mage::logException($e);
140
  $payment->setStatus(self::STATUS_ERROR);
141
  $this->throwUserError($e->getMessage(), null, true);
142
  }
143
  } else {
144
  // 2.no. process full gift card amt and card process remainder
145
+ try {
146
+ $this->checkVelocity($e);
147
+
148
+ $giftresp = $giftService->sale($giftcard, $giftResponse->balanceAmount);
149
+ $order->addStatusHistoryComment('Used Heartland Gift Card ' . $giftCardNumber . ' for amount $' . $giftResponse->balanceAmount . '. [partial payment]')->save();
150
+ $payment->setTransactionAdditionalInfo(Mage_Sales_Model_Order_Payment_Transaction::RAW_DETAILS,
151
+ array(
152
+ 'gift_card_number' => $giftCardNumber,
153
+ 'gift_card_transaction' => $giftresp->transactionId,
154
+ 'gift_card_amount_charged' => $giftResponse->balanceAmount));
155
+ $payment->setAmount($giftResponse->balanceAmount)->save();
156
+ $amount = $amount - $giftResponse->balanceAmount; // remainder
157
+ } catch (Exception $e) {
158
+ $this->updateVelocity($e);
159
+
160
+ Mage::logException($e);
161
+ $payment->setStatus(self::STATUS_ERROR);
162
+ $this->throwUserError($e->getMessage(), null, true);
163
+ }
164
  // 3. TODO: if the card payment fails later, refund the gift transaction
165
  }
166
  }
181
  $cardOrToken->tokenValue = $secureToken;
182
 
183
  try {
184
+ $this->checkVelocity();
185
+
186
  if ($capture) {
187
  if ($payment->getCcTransId()) {
188
  $response = $chargeService->capture(
212
 
213
  $this->_debugChargeService($chargeService);
214
  // \Hps_Securesubmit_Model_Payment::closeTransaction
215
+ $this->closeTransaction($payment, $amount, $response);
216
 
217
  if ($giftCardNumber) {
218
  $order->addStatusHistoryComment('Remaining amount to be charged to credit card ' .$this->_formatAmount((string)$amount) . '. [partial payment]')->save();
222
  $this->saveMultiUseToken($response, $cardData, $customerId, $cardType);
223
  }
224
  } catch (HpsCreditException $e) {
225
+ $this->updateVelocity($e);
226
+
227
  Mage::logException($e);
 
228
  $this->_debugChargeService($chargeService, $e);
229
 
230
  // refund gift (if used)
276
  * @param Mage_Payment_Model_Method_Abstract::STATUS_UNKNOWN|STATUS_APPROVED|STATUS_ERROR|STATUS_DECLINED|STATUS_VOID|STATUS_SUCCESS $status
277
  */
278
  protected function closeTransaction($payment, $amount, $response, $status = self::STATUS_APPROVED){
279
+ $info = $this->getInfoInstance();
280
+ $details = unserialize($info->getAdditionalData());
281
+
282
  $payment->setStatus($status);
283
  $payment->setAmount($amount);
 
 
 
 
 
 
284
  $payment->setLastTransId($response->transactionId);
285
  $payment->setCcTransId($response->transactionId);
286
  $payment->setTransactionId($response->transactionId);
287
  $payment->setIsTransactionClosed(0);
288
+
289
+ $details['cc_type'] = $payment->getCcType();
290
+
291
+ if (property_exists($response, 'authorizationCode')) {
292
+ $payment->setCcApproval($response->authorizationCode);
293
+ $details['auth_code'] = $response->authorizationCode;
294
+ }
295
+
296
+ if (property_exists($response, 'avsResultCode')) {
297
+ $payment->setCcAvsStatus($response->avsResultCode);
298
+ $details['avs_response_code'] = $response->avsResultCode;
299
+ $details['avs_response_text'] = $response->avsResultText;
300
+ }
301
+
302
+ if (property_exists($response, 'cvvResultCode')) {
303
+ $details['cvv_response_code'] = $response->cvvResultCode;
304
+ $details['cvv_response_text'] = $response->cvvResultText;
305
+ }
306
+
307
+ $info->setAdditionalData(serialize($details));
308
  }
309
+
310
  protected function saveMultiUseToken($response, $cardData, $customerId, $cardType)
311
  {
312
  $tokenData = $response->tokenData; /* @var $tokenData HpsTokenData */
328
  }
329
  }
330
 
331
+ protected function _formatAmount($amount)
332
+ {
333
  return Mage::helper('core')->currency($amount, true, false);
334
  }
335
 
336
  protected function getFraudSettings()
337
  {
338
+ if ($this->_enable_anti_fraud === null) {
339
+ $this->_enable_anti_fraud = Mage::getStoreConfig('payment/hps_securesubmit/enable_anti_fraud') == 1;
340
+ $this->_allow_fraud = Mage::getStoreConfig('payment/hps_securesubmit/allow_fraud') == 1;
341
+ $this->_email_fraud = Mage::getStoreConfig('payment/hps_securesubmit/email_fraud') == 1;
342
+ $this->_fraud_address = (string)Mage::getStoreConfig('payment/hps_securesubmit/fraud_address');
343
+ $this->_fraud_text = (string)Mage::getStoreConfig('payment/hps_securesubmit/fraud_text');
344
+ $this->_fraud_velocity_attempts = (int)Mage::getStoreConfig('payment/hps_securesubmit/fraud_velocity_attempts');
345
+ $this->_fraud_velocity_timeout = (int)Mage::getStoreConfig('payment/hps_securesubmit/fraud_velocity_timeout');
346
+
347
+ if ($this->_fraud_text === null) {
348
+ $this->_fraud_text = self::FRAUD_TEXT_DEFAULT;
349
+ }
350
+
351
+ if ($this->_fraud_velocity_attempts === null
352
+ || !is_numeric($this->_fraud_velocity_attempts)
353
+ ) {
354
+ $this->_fraud_velocity_attempts = self::FRAUD_VELOCITY_ATTEMPTS_DEFAULT;
355
+ }
356
+
357
+ if ($this->_fraud_velocity_timeout === null
358
+ || !is_numeric($this->_fraud_velocity_timeout)
359
+ ) {
360
+ $this->_fraud_velocity_timeout = self::FRAUD_VELOCITY_TIMEOUT_DEFAULT;
361
+ }
362
+ }
363
+ }
364
+
365
+ protected function maybeResetVelocityTimeout()
366
+ {
367
+ $timeoutSeconds = $this->_fraud_velocity_timeout * 60;
368
+ $timeoutExpiration = (int)$this->getVelocityVar('TimeoutExpiration');
369
+
370
+ if (time() < $timeoutExpiration) {
371
+ return;
372
+ }
373
+
374
+ $this->unsVelocityVar('Count');
375
+ $this->unsVelocityVar('IssuerResponse');
376
+ $this->unsVelocityVar('TimeoutExpiration');
377
+ }
378
+
379
+ protected function checkVelocity()
380
+ {
381
+ if ($this->_enable_anti_fraud !== true) {
382
+ return;
383
+ }
384
+
385
+ $this->maybeResetVelocityTimeout();
386
+
387
+ $count = (int)$this->getVelocityVar('Count');
388
+ $issuerResponse = (string)$this->getVelocityVar('IssuerResponse');
389
+ $timeoutExpiration = (int)$this->getVelocityVar('TimeoutExpiration');
390
+
391
+ if ($count >= $this->_fraud_velocity_attempts
392
+ && time() < $timeoutExpiration) {
393
+ sleep(5);
394
+ throw new HpsException(sprintf($this->_fraud_text, $issuerResponse));
395
+ }
396
+ }
397
+
398
+ protected function updateVelocity($e)
399
+ {
400
+ if ($this->_enable_anti_fraud !== true) {
401
+ return;
402
+ }
403
+
404
+ $this->maybeResetVelocityTimeout();
405
+
406
+ $count = (int)$this->getVelocityVar('Count');
407
+ $issuerResponse = (string)$this->getVelocityVar('IssuerResponse');
408
+ if ($issuerResponse !== $e->getMessage()) {
409
+ $issuerResponse = $e->getMessage();
410
+ }
411
+ // NOW + (fraud velocity timeout in seconds)
412
+ $timeoutExpiration = time() + ($this->_fraud_velocity_timeout * 60);
413
+
414
+ $this->setVelocityVar('Count', $count + 1);
415
+ $this->setVelocityVar('IssuerResponse', $issuerResponse);
416
+ $this->setVelocityVar('TimeoutExpiration', $timeoutExpiration);
417
+ }
418
+
419
+ protected function getVelocityVar($var)
420
+ {
421
+ return Mage::getSingleton('checkout/session')
422
+ ->getData($this->getVelocityVarPrefix() . $var);
423
+ }
424
+
425
+ protected function setVelocityVar($var, $data = null)
426
+ {
427
+ return Mage::getSingleton('checkout/session')
428
+ ->setData($this->getVelocityVarPrefix() . $var, $data);
429
+ }
430
+
431
+ protected function unsVelocityVar($var)
432
+ {
433
+ return Mage::getSingleton('checkout/session')
434
+ ->unsetData($this->getVelocityVarPrefix() . $var);
435
  }
436
 
437
+ protected function getVelocityVarPrefix()
438
+ {
439
+ return sprintf('HeartlandHPS_Velocity%s', md5($this->getRemoteIP()));
440
+ }
441
+
442
+ protected function getRemoteIP()
443
+ {
444
+ static $remoteIP = '';
445
+ if ($remoteIP !== '') {
446
+ return $remoteIP;
447
+ }
448
+ if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)
449
+ && $_SERVER['HTTP_X_FORWARDED_FOR'] != ''
450
+ ) {
451
+ $remoteIPArray = array_values(
452
+ array_filter(
453
+ explode(
454
+ ',',
455
+ $_SERVER['HTTP_X_FORWARDED_FOR']
456
+ )
457
+ )
458
+ );
459
+ $remoteIP = end($remoteIPArray);
460
+ } else {
461
+ $remoteIP = $_SERVER['REMOTE_ADDR'];
462
+ }
463
+ return $remoteIP;
464
+ }
465
+
466
+
467
  /**
468
  * @param Varien_Object|Mage_Sales_Model_Order_Payment $payment
469
  * @param float $amount
471
  */
472
  public function refund(Varien_Object $payment, $amount)
473
  {
474
+ $transactionDetails = $this->getTransactionDetails($payment);
475
+ if ($this->canVoid($payment) && $this->transactionActiveOnGateway($transactionDetails)) {
476
+ if ($transactionDetails->authorizedAmount > $amount) {
477
+ $this->_reversal($payment, $transactionDetails, $amount);
478
+ } else {
479
+ $this->void($payment);
480
+ }
481
  } else {
482
  $this->_refund($payment, $amount);
483
  }
485
  return $this;
486
  }
487
 
488
+
489
+ public function getTransactionDetails(Varien_Object $payment)
490
+ {
491
+ $transactionId = null;
492
+
493
+ if (false !== ($parentId = $this->getParentTransactionId($payment))) {
494
+ $transactionId = $parentId;
495
+ } else {
496
+ $transactionId = $payment->getCcTransId();
497
+ }
498
+
499
+ $service = $this->_getChargeService();
500
+ return $service->get($transactionId);
501
+ }
502
+
503
+
504
+ public function transactionActiveOnGateway($transactionDetail)
505
+ {
506
+ return $transactionDetail->transactionStatus == 'A';
507
+ }
508
+
509
  public function getParentTransactionId(Varien_Object $payment)
510
  {
511
  $transaction = Mage::getModel('sales/order_payment_transaction')->getCollection()
520
  }
521
  }
522
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
523
 
524
  /**
525
  * Void payment abstract method
597
  return $this;
598
  }
599
 
600
+
601
+ /**
602
+ * @param Varien_Object|Mage_Sales_Model_Order_Payment $payment
603
+ * @param HpsReportTransactionDetails $transactionDetails
604
+ * @param float $newAuthAmount
605
+ * @return Hps_Securesubmit_Model_Payment
606
+ */
607
+ public function _reversal(Varien_Object $payment, $transactionDetails, $newAuthAmount)
608
+ {
609
+ $transactionId = $payment->getCcTransId();
610
+ $order = $payment->getOrder();
611
+ /* @var $order Mage_Sales_Model_Order */
612
+ $chargeService = $this->_getChargeService();
613
+ $details = $this->_getTxnDetailsData($order);
614
+ try {
615
+ $reverseResponse = $chargeService->reverse(
616
+ $transactionId,
617
+ $transactionDetails->authorizedAmount,
618
+ strtolower($order->getBaseCurrencyCode()),
619
+ $details,
620
+ $newAuthAmount
621
+ );
622
+ $payment
623
+ ->setTransactionId($reverseResponse->transactionId)
624
+ ->setParentTransactionId($transactionId)
625
+ ->setIsTransactionClosed(1)
626
+ ->setShouldCloseParentTransaction(1);
627
+ } catch (HpsException $e) {
628
+
629
+ $this->_debugChargeService($chargeService, $e);
630
+ $this->throwUserError($e->getMessage());
631
+ } catch (Exception $e) {
632
+ $this->_debugChargeService($chargeService, $e);
633
+ Mage::logException($e);
634
+ $this->throwUserError($e->getMessage());
635
+ }
636
+
637
+ return $this;
638
+ }
639
  /**
640
  * @param null|Mage_Sales_Model_Quote $quote
641
  * @return bool
729
  }
730
 
731
  // Send checkout session back to payment section to avoid double-attempt to charge single-use token
732
+ if ($goToPaymentSection === true) {
733
+ Mage::log('throwing user error with Mage_Payment_Model_Info_Exception: ' . $error);
734
+ throw new Mage_Payment_Model_Info_Exception($error);
735
+ } else {
736
+ Mage::log('throwing user error with Mage_Core_Exception: ' . $error);
737
+ throw new Mage_Core_Exception($error);
738
  }
 
 
 
739
  }
740
 
741
  /**
app/code/community/Hps/Securesubmit/etc/config.xml CHANGED
@@ -75,6 +75,8 @@
75
  <min_order_total/>
76
  <secretapikey backend_model="adminhtml/system_config_backend_encrypted" />
77
  <publicapikey backend_model="adminhtml/system_config_backend_encrypted" />
 
 
78
  <use_http_proxy>0</use_http_proxy>
79
  <debug>0</debug>
80
  </hps_securesubmit>
75
  <min_order_total/>
76
  <secretapikey backend_model="adminhtml/system_config_backend_encrypted" />
77
  <publicapikey backend_model="adminhtml/system_config_backend_encrypted" />
78
+ <fraud_velocity_attempts>3</fraud_velocity_attempts>
79
+ <fraud_velocity_timeout>10</fraud_velocity_timeout>
80
  <use_http_proxy>0</use_http_proxy>
81
  <debug>0</debug>
82
  </hps_securesubmit>
app/code/community/Hps/Securesubmit/etc/system.xml CHANGED
@@ -12,11 +12,12 @@
12
  <show_in_store>1</show_in_store>
13
  <comment><![CDATA[<a href="http://developer.heartlandpaymentsystems.com/SecureSubmit" target="_blank">Click here to sign up for SecureSubmit account</a>]]></comment>
14
  <fields>
 
15
  <active translate="label">
16
  <label>Enabled</label>
17
  <frontend_type>select</frontend_type>
18
  <source_model>adminhtml/system_config_source_yesno</source_model>
19
- <sort_order>10</sort_order>
20
  <show_in_default>1</show_in_default>
21
  <show_in_website>1</show_in_website>
22
  <show_in_store>0</show_in_store>
@@ -25,7 +26,7 @@
25
  <label>New order status</label>
26
  <frontend_type>select</frontend_type>
27
  <source_model>adminhtml/system_config_source_order_status_processing</source_model>
28
- <sort_order>4</sort_order>
29
  <show_in_default>1</show_in_default>
30
  <show_in_website>1</show_in_website>
31
  <show_in_store>0</show_in_store>
@@ -33,15 +34,16 @@
33
  <title translate="label">
34
  <label>Title</label>
35
  <frontend_type>text</frontend_type>
36
- <sort_order>20</sort_order>
37
  <show_in_default>1</show_in_default>
38
  <show_in_website>1</show_in_website>
39
  <show_in_store>1</show_in_store>
40
  </title>
 
41
  <publicapikey translate="label">
42
  <label>Public Api Key</label>
43
  <backend_model>adminhtml/system_config_backend_encrypted</backend_model>
44
- <sort_order>30</sort_order>
45
  <show_in_default>1</show_in_default>
46
  <show_in_website>1</show_in_website>
47
  <show_in_store>1</show_in_store>
@@ -50,16 +52,17 @@
50
  <label>Secret Api Key</label>
51
  <frontend_type>obscure</frontend_type>
52
  <backend_model>adminhtml/system_config_backend_encrypted</backend_model>
53
- <sort_order>40</sort_order>
54
  <show_in_default>1</show_in_default>
55
  <show_in_website>1</show_in_website>
56
  <show_in_store>1</show_in_store>
57
  </secretapikey>
 
58
  <cctypes translate="label">
59
  <label>Credit Card Types</label>
60
  <frontend_type>multiselect</frontend_type>
61
  <source_model>hps_securesubmit/source_cctype</source_model>
62
- <sort_order>50</sort_order>
63
  <show_in_default>1</show_in_default>
64
  <show_in_website>1</show_in_website>
65
  <show_in_store>0</show_in_store>
@@ -68,16 +71,17 @@
68
  <label>Payment Action</label>
69
  <frontend_type>select</frontend_type>
70
  <source_model>hps_securesubmit/source_paymentAction</source_model>
71
- <sort_order>60</sort_order>
72
  <show_in_default>1</show_in_default>
73
  <show_in_website>1</show_in_website>
74
  <show_in_store>0</show_in_store>
75
  </payment_action>
 
76
  <allow_card_saving translate="label">
77
  <label>Allow Card Saving</label>
78
  <frontend_type>select</frontend_type>
79
  <source_model>adminhtml/system_config_source_yesno</source_model>
80
- <sort_order>60</sort_order>
81
  <show_in_default>1</show_in_default>
82
  <show_in_website>1</show_in_website>
83
  <show_in_store>1</show_in_store>
@@ -85,11 +89,22 @@
85
  Heartland Account must be configured for multi-use tokenization.]]>
86
  </comment>
87
  </allow_card_saving>
 
 
 
 
 
 
 
 
 
 
 
88
  <allow_heartland_gift translate="label">
89
  <label>Allow Heartland Gift Cards</label>
90
  <frontend_type>select</frontend_type>
91
  <source_model>adminhtml/system_config_source_yesno</source_model>
92
- <sort_order>61</sort_order>
93
  <show_in_default>1</show_in_default>
94
  <show_in_website>1</show_in_website>
95
  <show_in_store>1</show_in_store>
@@ -97,57 +112,82 @@
97
  Heartland Account must already be signed up to accept Gift Cards.]]>
98
  </comment>
99
  </allow_heartland_gift>
 
 
 
 
 
 
 
 
 
 
100
  <allow_fraud translate="label">
101
- <label>Allow Suspicious</label>
102
- <frontend_type>select</frontend_type>
103
- <source_model>adminhtml/system_config_source_yesno</source_model>
104
- <sort_order>62</sort_order>
105
- <show_in_default>1</show_in_default>
106
- <show_in_website>1</show_in_website>
107
- <show_in_store>1</show_in_store>
108
- <comment><![CDATA[Note: You will have 72 hours from the original authorization date to manually review suspicious orders in the virtual terminal and make a final decision (either to accept the gateway fraud decision or to manually override).]]></comment>
 
109
  </allow_fraud>
110
  <email_fraud translate="label">
111
- <label>Email Store Owner on Suspicious Orders</label>
112
- <frontend_type>select</frontend_type>
113
- <source_model>adminhtml/system_config_source_yesno</source_model>
114
- <sort_order>63</sort_order>
115
- <show_in_default>1</show_in_default>
116
- <show_in_website>1</show_in_website>
117
- <show_in_store>1</show_in_store>
 
118
  </email_fraud>
119
  <fraud_address translate="label">
120
  <label>Notification Email Address</label>
121
  <frontend_type>text</frontend_type>
122
- <sort_order>64</sort_order>
123
  <show_in_default>1</show_in_default>
124
  <show_in_website>1</show_in_website>
125
  <show_in_store>1</show_in_store>
126
  <comment><![CDATA[This email address will be notified of suspicious orders.]]></comment>
 
127
  </fraud_address>
128
  <fraud_text translate="label">
129
  <label>Fraud Text</label>
130
  <frontend_type>textarea</frontend_type>
131
- <sort_order>65</sort_order>
132
  <show_in_default>1</show_in_default>
133
  <show_in_website>1</show_in_website>
134
  <show_in_store>1</show_in_store>
135
  <comment><![CDATA[This is the text that will display to the customer when fraud is detected and the transaction fails.]]></comment>
 
136
  </fraud_text>
137
- <use_iframes translate="label">
138
- <label>Host the payment fields on Heartland's servers</label>
139
- <frontend_type>select</frontend_type>
140
- <source_model>adminhtml/system_config_source_yesno</source_model>
141
  <sort_order>65</sort_order>
142
  <show_in_default>1</show_in_default>
143
  <show_in_website>1</show_in_website>
144
  <show_in_store>1</show_in_store>
145
- <comment><![CDATA[Note: The customer will remain on your site throughout the checkout process, and there will be no redirect. This option only helps reduce your PCI scope.]]></comment>
146
- </use_iframes>
 
 
 
 
 
 
 
 
 
 
 
 
147
  <custom_message translate="label">
148
  <label>Custom Error Message</label>
149
  <frontend_type>textarea</frontend_type>
150
- <sort_order>66</sort_order>
151
  <show_in_default>1</show_in_default>
152
  <show_in_website>1</show_in_website>
153
  <show_in_store>1</show_in_store>
@@ -159,17 +199,18 @@
159
  <sort_order translate="label">
160
  <label>Sort Order</label>
161
  <frontend_type>text</frontend_type>
162
- <sort_order>70</sort_order>
163
  <show_in_default>1</show_in_default>
164
  <show_in_website>1</show_in_website>
165
  <show_in_store>0</show_in_store>
166
  </sort_order>
 
167
  <use_http_proxy translate="label">
168
  <label>Use HTTP Proxy</label>
169
  <frontend_type>select</frontend_type>
170
  <source_model>adminhtml/system_config_source_yesno</source_model>
171
  <backend_model>hps_securesubmit/system_config_backend_proxy</backend_model>
172
- <sort_order>80</sort_order>
173
  <show_in_default>1</show_in_default>
174
  <show_in_website>1</show_in_website>
175
  <show_in_store>0</show_in_store>
@@ -177,7 +218,7 @@
177
  <http_proxy_host translate="label">
178
  <label>HTTP Proxy Host</label>
179
  <frontend_type>text</frontend_type>
180
- <sort_order>90</sort_order>
181
  <show_in_default>1</show_in_default>
182
  <show_in_website>1</show_in_website>
183
  <show_in_store>0</show_in_store>
@@ -187,13 +228,14 @@
187
  <http_proxy_port translate="label">
188
  <label>HTTP Proxy Port</label>
189
  <frontend_type>text</frontend_type>
190
- <sort_order>100</sort_order>
191
  <show_in_default>1</show_in_default>
192
  <show_in_website>1</show_in_website>
193
  <show_in_store>0</show_in_store>
194
  <comment>Example: 8888</comment>
195
  <depends><use_http_proxy>1</use_http_proxy></depends>
196
  </http_proxy_port>
 
197
  <debug translate="label">
198
  <label>Debug</label>
199
  <frontend_type>select</frontend_type>
12
  <show_in_store>1</show_in_store>
13
  <comment><![CDATA[<a href="http://developer.heartlandpaymentsystems.com/SecureSubmit" target="_blank">Click here to sign up for SecureSubmit account</a>]]></comment>
14
  <fields>
15
+ <!-- Basic -->
16
  <active translate="label">
17
  <label>Enabled</label>
18
  <frontend_type>select</frontend_type>
19
  <source_model>adminhtml/system_config_source_yesno</source_model>
20
+ <sort_order>1</sort_order>
21
  <show_in_default>1</show_in_default>
22
  <show_in_website>1</show_in_website>
23
  <show_in_store>0</show_in_store>
26
  <label>New order status</label>
27
  <frontend_type>select</frontend_type>
28
  <source_model>adminhtml/system_config_source_order_status_processing</source_model>
29
+ <sort_order>2</sort_order>
30
  <show_in_default>1</show_in_default>
31
  <show_in_website>1</show_in_website>
32
  <show_in_store>0</show_in_store>
34
  <title translate="label">
35
  <label>Title</label>
36
  <frontend_type>text</frontend_type>
37
+ <sort_order>3</sort_order>
38
  <show_in_default>1</show_in_default>
39
  <show_in_website>1</show_in_website>
40
  <show_in_store>1</show_in_store>
41
  </title>
42
+ <!-- Authentication -->
43
  <publicapikey translate="label">
44
  <label>Public Api Key</label>
45
  <backend_model>adminhtml/system_config_backend_encrypted</backend_model>
46
+ <sort_order>10</sort_order>
47
  <show_in_default>1</show_in_default>
48
  <show_in_website>1</show_in_website>
49
  <show_in_store>1</show_in_store>
52
  <label>Secret Api Key</label>
53
  <frontend_type>obscure</frontend_type>
54
  <backend_model>adminhtml/system_config_backend_encrypted</backend_model>
55
+ <sort_order>11</sort_order>
56
  <show_in_default>1</show_in_default>
57
  <show_in_website>1</show_in_website>
58
  <show_in_store>1</show_in_store>
59
  </secretapikey>
60
+ <!-- Payment -->
61
  <cctypes translate="label">
62
  <label>Credit Card Types</label>
63
  <frontend_type>multiselect</frontend_type>
64
  <source_model>hps_securesubmit/source_cctype</source_model>
65
+ <sort_order>20</sort_order>
66
  <show_in_default>1</show_in_default>
67
  <show_in_website>1</show_in_website>
68
  <show_in_store>0</show_in_store>
71
  <label>Payment Action</label>
72
  <frontend_type>select</frontend_type>
73
  <source_model>hps_securesubmit/source_paymentAction</source_model>
74
+ <sort_order>21</sort_order>
75
  <show_in_default>1</show_in_default>
76
  <show_in_website>1</show_in_website>
77
  <show_in_store>0</show_in_store>
78
  </payment_action>
79
+ <!-- Tokenization -->
80
  <allow_card_saving translate="label">
81
  <label>Allow Card Saving</label>
82
  <frontend_type>select</frontend_type>
83
  <source_model>adminhtml/system_config_source_yesno</source_model>
84
+ <sort_order>30</sort_order>
85
  <show_in_default>1</show_in_default>
86
  <show_in_website>1</show_in_website>
87
  <show_in_store>1</show_in_store>
89
  Heartland Account must be configured for multi-use tokenization.]]>
90
  </comment>
91
  </allow_card_saving>
92
+ <use_iframes translate="label">
93
+ <label>Host the payment fields on Heartland's servers</label>
94
+ <frontend_type>select</frontend_type>
95
+ <source_model>adminhtml/system_config_source_yesno</source_model>
96
+ <sort_order>31</sort_order>
97
+ <show_in_default>1</show_in_default>
98
+ <show_in_website>1</show_in_website>
99
+ <show_in_store>1</show_in_store>
100
+ <comment><![CDATA[Note: The customer will remain on your site throughout the checkout process, and there will be no redirect. This option only helps reduce your PCI scope.]]></comment>
101
+ </use_iframes>
102
+ <!-- Gift -->
103
  <allow_heartland_gift translate="label">
104
  <label>Allow Heartland Gift Cards</label>
105
  <frontend_type>select</frontend_type>
106
  <source_model>adminhtml/system_config_source_yesno</source_model>
107
+ <sort_order>40</sort_order>
108
  <show_in_default>1</show_in_default>
109
  <show_in_website>1</show_in_website>
110
  <show_in_store>1</show_in_store>
112
  Heartland Account must already be signed up to accept Gift Cards.]]>
113
  </comment>
114
  </allow_heartland_gift>
115
+ <!-- Anti-Fraud -->
116
+ <enable_anti_fraud translate="label">
117
+ <label>Enable Anti-Fraud Controls</label>
118
+ <frontend_type>select</frontend_type>
119
+ <source_model>adminhtml/system_config_source_yesno</source_model>
120
+ <sort_order>60</sort_order>
121
+ <show_in_default>1</show_in_default>
122
+ <show_in_website>1</show_in_website>
123
+ <show_in_store>1</show_in_store>
124
+ </enable_anti_fraud>
125
  <allow_fraud translate="label">
126
+ <label>Allow Suspicious</label>
127
+ <frontend_type>select</frontend_type>
128
+ <source_model>adminhtml/system_config_source_yesno</source_model>
129
+ <sort_order>61</sort_order>
130
+ <show_in_default>1</show_in_default>
131
+ <show_in_website>1</show_in_website>
132
+ <show_in_store>1</show_in_store>
133
+ <comment><![CDATA[Note: You will have 72 hours from the original authorization date to manually review suspicious orders in the virtual terminal and make a final decision (either to accept the gateway fraud decision or to manually override).]]></comment>
134
+ <depends><enable_anti_fraud>1</enable_anti_fraud></depends>
135
  </allow_fraud>
136
  <email_fraud translate="label">
137
+ <label>Email Store Owner on Suspicious Orders</label>
138
+ <frontend_type>select</frontend_type>
139
+ <source_model>adminhtml/system_config_source_yesno</source_model>
140
+ <sort_order>62</sort_order>
141
+ <show_in_default>1</show_in_default>
142
+ <show_in_website>1</show_in_website>
143
+ <show_in_store>1</show_in_store>
144
+ <depends><enable_anti_fraud>1</enable_anti_fraud></depends>
145
  </email_fraud>
146
  <fraud_address translate="label">
147
  <label>Notification Email Address</label>
148
  <frontend_type>text</frontend_type>
149
+ <sort_order>63</sort_order>
150
  <show_in_default>1</show_in_default>
151
  <show_in_website>1</show_in_website>
152
  <show_in_store>1</show_in_store>
153
  <comment><![CDATA[This email address will be notified of suspicious orders.]]></comment>
154
+ <depends><enable_anti_fraud>1</enable_anti_fraud></depends>
155
  </fraud_address>
156
  <fraud_text translate="label">
157
  <label>Fraud Text</label>
158
  <frontend_type>textarea</frontend_type>
159
+ <sort_order>64</sort_order>
160
  <show_in_default>1</show_in_default>
161
  <show_in_website>1</show_in_website>
162
  <show_in_store>1</show_in_store>
163
  <comment><![CDATA[This is the text that will display to the customer when fraud is detected and the transaction fails.]]></comment>
164
+ <depends><enable_anti_fraud>1</enable_anti_fraud></depends>
165
  </fraud_text>
166
+ <fraud_velocity_attempts translate="label">
167
+ <label>Max Velocity Attempts</label>
168
+ <frontend_type>text</frontend_type>
 
169
  <sort_order>65</sort_order>
170
  <show_in_default>1</show_in_default>
171
  <show_in_website>1</show_in_website>
172
  <show_in_store>1</show_in_store>
173
+ <comment><![CDATA[The maximum number of attempts allowed before additional attempts are blocked.]]></comment>
174
+ <depends><enable_anti_fraud>1</enable_anti_fraud></depends>
175
+ </fraud_velocity_attempts>
176
+ <fraud_velocity_timeout translate="label">
177
+ <label>Velocity Attempts Timeout</label>
178
+ <frontend_type>text</frontend_type>
179
+ <sort_order>66</sort_order>
180
+ <show_in_default>1</show_in_default>
181
+ <show_in_website>1</show_in_website>
182
+ <show_in_store>1</show_in_store>
183
+ <comment><![CDATA[The amount of time (in minutes) before recent failures are ignored.]]></comment>
184
+ <depends><enable_anti_fraud>1</enable_anti_fraud></depends>
185
+ </fraud_velocity_timeout>
186
+ <!-- Misc. -->
187
  <custom_message translate="label">
188
  <label>Custom Error Message</label>
189
  <frontend_type>textarea</frontend_type>
190
+ <sort_order>90</sort_order>
191
  <show_in_default>1</show_in_default>
192
  <show_in_website>1</show_in_website>
193
  <show_in_store>1</show_in_store>
199
  <sort_order translate="label">
200
  <label>Sort Order</label>
201
  <frontend_type>text</frontend_type>
202
+ <sort_order>91</sort_order>
203
  <show_in_default>1</show_in_default>
204
  <show_in_website>1</show_in_website>
205
  <show_in_store>0</show_in_store>
206
  </sort_order>
207
+ <!-- Proxy -->
208
  <use_http_proxy translate="label">
209
  <label>Use HTTP Proxy</label>
210
  <frontend_type>select</frontend_type>
211
  <source_model>adminhtml/system_config_source_yesno</source_model>
212
  <backend_model>hps_securesubmit/system_config_backend_proxy</backend_model>
213
+ <sort_order>100</sort_order>
214
  <show_in_default>1</show_in_default>
215
  <show_in_website>1</show_in_website>
216
  <show_in_store>0</show_in_store>
218
  <http_proxy_host translate="label">
219
  <label>HTTP Proxy Host</label>
220
  <frontend_type>text</frontend_type>
221
+ <sort_order>101</sort_order>
222
  <show_in_default>1</show_in_default>
223
  <show_in_website>1</show_in_website>
224
  <show_in_store>0</show_in_store>
228
  <http_proxy_port translate="label">
229
  <label>HTTP Proxy Port</label>
230
  <frontend_type>text</frontend_type>
231
+ <sort_order>101</sort_order>
232
  <show_in_default>1</show_in_default>
233
  <show_in_website>1</show_in_website>
234
  <show_in_store>0</show_in_store>
235
  <comment>Example: 8888</comment>
236
  <depends><use_http_proxy>1</use_http_proxy></depends>
237
  </http_proxy_port>
238
+ <!-- Debug -->
239
  <debug translate="label">
240
  <label>Debug</label>
241
  <frontend_type>select</frontend_type>
app/design/frontend/base/default/template/securesubmit/form.phtml CHANGED
@@ -29,6 +29,7 @@ if ($_loggedIn && $allow_card_saving) {
29
  <label for="<?= $_code ?>_stored_card_select_<?= $card->getId() ?>" class="<?= $_code ?>_stored_card_label">
30
  <div class="cc-option">
31
  <input type="radio" name="<?= $_code ?>_stored_card_select" id="<?= $_code ?>_stored_card_select_<?= $card->getId() ?>" value="<?= $card->getId() ?>" <?php if ($checked): ?>checked="checked"<?php $checked=false; endif ?>/>
 
32
  </div>
33
 
34
  <span class="saved-cc-number">
29
  <label for="<?= $_code ?>_stored_card_select_<?= $card->getId() ?>" class="<?= $_code ?>_stored_card_label">
30
  <div class="cc-option">
31
  <input type="radio" name="<?= $_code ?>_stored_card_select" id="<?= $_code ?>_stored_card_select_<?= $card->getId() ?>" value="<?= $card->getId() ?>" <?php if ($checked): ?>checked="checked"<?php $checked=false; endif ?>/>
32
+ <input type="hidden" id="<?= $_code ?>_stored_card_select_<?= $card->getId() ?>_card_type" value="<?= $card->getCcType() ?>" />
33
  </div>
34
 
35
  <span class="saved-cc-number">
js/securesubmit/checkout-form.js CHANGED
@@ -10,7 +10,9 @@ function securesubmitMultishipping(multiForm) {
10
 
11
  // Use stored card checked, get existing token data
12
  if (this.secureSubmitUseStoredCard()) {
13
- var storedcardId = $$('[name="hps_securesubmit_stored_card_select"]:checked')[0].value;
 
 
14
 
15
  new Ajax.Request(this.secureSubmitGetTokenDataUrl, {
16
  method: 'post',
@@ -22,6 +24,7 @@ function securesubmitMultishipping(multiForm) {
22
  $('hps_securesubmit_cc_exp_year').value = data.token.cc_exp_year;
23
  }
24
  this.secureSubmitResponseHandler({
 
25
  token_value: data.token.token_value,
26
  token_type: null, // 'supt'?
27
  token_expire: new Date().toISOString(),
@@ -46,9 +49,12 @@ function securesubmitMultishipping(multiForm) {
46
  } else {
47
  var validator = new Validation(multiForm);
48
  if (validator.validate()) {
49
- var date = $('hps_securesubmit_exp_date').value.split('/');
50
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
51
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
 
 
 
52
  (new Heartland.HPS({
53
  publicKey: this.secureSubmitPublicKey,
54
  cardNumber: $('hps_securesubmit_cc_number').value,
@@ -68,11 +74,15 @@ function securesubmitMultishipping(multiForm) {
68
  },
69
  secureSubmitResponseHandler: function (response) {
70
  var tokenField = $('hps_securesubmit_token'),
 
71
  lastFourField = $('hps_securesubmit_cc_last_four');
72
- var date = $('hps_securesubmit_exp_date').value.split('/');
73
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
74
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
75
- tokenField.value = lastFourField.value = null;
 
 
 
76
 
77
  if (SecureSubmitMagento.skipCreditCard) {
78
  SecureSubmitMagento.completeCheckout();
@@ -86,6 +96,7 @@ function securesubmitMultishipping(multiForm) {
86
  } else if (response && response.token_value) {
87
  tokenField.value = response.token_value;
88
  lastFourField.value = response.card.number.substr(-4);
 
89
 
90
  // Continue Magento checkout steps
91
  document.getElementById('payment-continue').enable();
@@ -116,7 +127,9 @@ document.observe('dom:loaded', function () {
116
 
117
  // Use stored card checked, get existing token data
118
  if (this.secureSubmitUseStoredCard()) {
119
- var storedcardId = $$('[name="hps_securesubmit_stored_card_select"]:checked')[0].value;
 
 
120
  checkout.setLoadWaiting('payment');
121
  new Ajax.Request(this.secureSubmitGetTokenDataUrl, {
122
  method: 'post',
@@ -128,6 +141,7 @@ document.observe('dom:loaded', function () {
128
  $('hps_securesubmit_cc_exp_year').value = data.token.cc_exp_year;
129
  }
130
  this.secureSubmitResponseHandler({
 
131
  token_value: data.token.token_value,
132
  token_type: null, // 'supt'?
133
  token_expire: new Date().toISOString(),
@@ -155,9 +169,13 @@ document.observe('dom:loaded', function () {
155
  var validator = new Validation(this.form);
156
  if (this.validate() && validator.validate()) {
157
  checkout.setLoadWaiting('payment');
158
- var date = $('hps_securesubmit_exp_date').value.split('/');
159
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
160
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
 
 
 
 
161
  (new Heartland.HPS({
162
  publicKey: this.secureSubmitPublicKey,
163
  cardNumber: $('hps_securesubmit_cc_number').value,
@@ -177,11 +195,15 @@ document.observe('dom:loaded', function () {
177
  },
178
  secureSubmitResponseHandler: function (response) {
179
  var tokenField = $('hps_securesubmit_token'),
 
180
  lastFourField = $('hps_securesubmit_cc_last_four');
181
- var date = $('hps_securesubmit_exp_date').value.split('/');
182
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
183
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
184
- tokenField.value = lastFourField.value = null;
 
 
 
185
 
186
  if (SecureSubmitMagento.skipCreditCard) {
187
  SecureSubmitMagento.completeCheckout();
@@ -196,6 +218,7 @@ document.observe('dom:loaded', function () {
196
  } else if (response && response.token_value) {
197
  tokenField.value = response.token_value;
198
  lastFourField.value = response.card.number.substr(-4);
 
199
 
200
  // Continue Magento checkout steps
201
  new Ajax.Request(this.saveUrl, {
@@ -230,9 +253,12 @@ document.observe('dom:loaded', function () {
230
  message: SecureSubmitMagento.options.publicKey
231
  }, 'cardNumber');
232
  } else {
233
- var date = $('hps_securesubmit_exp_date').value.split('/');
234
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
235
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
 
 
 
236
  (new Heartland.HPS({
237
  publicKey: this.secureSubmitPublicKey,
238
  cardNumber: $('hps_securesubmit_cc_number').value,
@@ -246,11 +272,15 @@ document.observe('dom:loaded', function () {
246
  },
247
  secureSubmitResponseHandler: function (response) {
248
  var tokenField = $('hps_securesubmit_token'),
 
249
  lastFourField = $('hps_securesubmit_cc_last_four');
250
- var date = $('hps_securesubmit_exp_date').value.split('/');
251
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
252
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
253
- tokenField.value = lastFourField.value = null;
 
 
 
254
 
255
  if (SecureSubmitMagento.skipCreditCard) {
256
  SecureSubmitMagento.completeCheckout();
@@ -265,6 +295,7 @@ document.observe('dom:loaded', function () {
265
  } else if (response && response.token_value) {
266
  tokenField.value = response.token_value;
267
  lastFourField.value = response.card.number.substr(-4);
 
268
 
269
  this.setLoadWaiting(true);
270
  var params = Form.serialize(this.form);
@@ -306,7 +337,9 @@ document.observe('dom:loaded', function () {
306
  $('onestepcheckout-button-place-order').removeClassName('place-order-loader');
307
  $('onestepcheckout-button-place-order').addClassName('onestepcheckout-btn-checkout');
308
  if (secureSubmitUseStoredCardOSC()) {
309
- var storedcardId = $('hps_securesubmit_stored_card_select').value;
 
 
310
  new Ajax.Request(window.payment.secureSubmitGetTokenDataUrlOSC, {
311
  method: 'post',
312
  parameters: {storedcard_id: storedcardId},
@@ -317,6 +350,7 @@ document.observe('dom:loaded', function () {
317
  $('hps_securesubmit_expiration_yr').value = data.token.cc_exp_year;
318
  }
319
  secureSubmitResponseHandlerOSC({
 
320
  token_value: data.token.token_value,
321
  token_type: null, // 'supt'?
322
  token_expire: new Date().toISOString(),
@@ -340,9 +374,12 @@ document.observe('dom:loaded', function () {
340
  message: SecureSubmitMagento.options.publicKey
341
  }, 'cardNumber');
342
  } else {
343
- var date = $('hps_securesubmit_exp_date').value.split('/');
344
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
345
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
 
 
 
346
  (new Heartland.HPS({
347
  publicKey: window.payment.secureSubmitPublicKeyOSC,
348
  cardNumber: $('hps_securesubmit_cc_number').value,
@@ -368,8 +405,15 @@ document.observe('dom:loaded', function () {
368
 
369
  secureSubmitResponseHandlerOSC = function (response, btn) {
370
  var tokenField = $('hps_securesubmit_token'),
 
371
  lastFourField = $('hps_securesubmit_cc_last_four');
372
- tokenField.value = lastFourField.value = null;
 
 
 
 
 
 
373
 
374
  if (SecureSubmitMagento.skipCreditCard) {
375
  SecureSubmitMagento.completeCheckout();
@@ -387,6 +431,7 @@ document.observe('dom:loaded', function () {
387
  } else if (response && response.token_value) {
388
  tokenField.value = response.token_value;
389
  lastFourField.value = response.card.number.substr(-4);
 
390
 
391
  $('onestepcheckout-place-order-loading').show();
392
  $('onestepcheckout-button-place-order').removeClassName('onestepcheckout-btn-checkout');
@@ -425,9 +470,12 @@ document.observe('dom:loaded', function () {
425
  message: SecureSubmitMagento.options.publicKey
426
  }, 'cardNumber');
427
  } else {
428
- var date = $('hps_securesubmit_exp_date').value.split('/');
429
- $('hps_securesubmit_cc_exp_month').value = date[0].trim();
430
- $('hps_securesubmit_cc_exp_year').value = date[1].trim();
 
 
 
431
  (new Heartland.HPS({
432
  publicKey: this.secureSubmitPublicKey,
433
  cardNumber: $('hps_securesubmit_cc_number').value,
@@ -441,8 +489,15 @@ document.observe('dom:loaded', function () {
441
  },
442
  secureSubmitResponseHandler: function (response) {
443
  var tokenField = $('hps_securesubmit_token'),
 
444
  lastFourField = $('hps_securesubmit_cc_last_four');
445
- tokenField.value = lastFourField.value = null;
 
 
 
 
 
 
446
 
447
  if (SecureSubmitMagento.skipCreditCard) {
448
  SecureSubmitMagento.completeCheckout();
@@ -457,6 +512,7 @@ document.observe('dom:loaded', function () {
457
  } else if (response && response.token_value) {
458
  tokenField.value = response.token_value;
459
  lastFourField.value = response.card.number.substr(-4);
 
460
 
461
  var form = $j_opc('#co-payment-form').serializeArray();
462
  IWD.OPC.Checkout.xhr = $j_opc.post(
@@ -670,7 +726,7 @@ document.observe('dom:loaded', function () {
670
  onSuccess: checkout.setResponse.bind(checkout),
671
  onFailure: checkout.ajaxFailure.bind(checkout)
672
  });
673
- } else if (typeof IWD.OPC !== 'undefined') {
674
  var form = $j_opc('#co-payment-form').serializeArray();
675
  IWD.OPC.Checkout.xhr = $j_opc.post(
676
  IWD.OPC.Checkout.config.baseUrl + 'onepage/json/savePayment',
10
 
11
  // Use stored card checked, get existing token data
12
  if (this.secureSubmitUseStoredCard()) {
13
+ var radio = $$('[name="hps_securesubmit_stored_card_select"]:checked')[0];
14
+ var storedcardId = radio.value;
15
+ var storedcardType = $(radio.id + '_card_type').value;
16
 
17
  new Ajax.Request(this.secureSubmitGetTokenDataUrl, {
18
  method: 'post',
24
  $('hps_securesubmit_cc_exp_year').value = data.token.cc_exp_year;
25
  }
26
  this.secureSubmitResponseHandler({
27
+ card_type: storedcardType,
28
  token_value: data.token.token_value,
29
  token_type: null, // 'supt'?
30
  token_expire: new Date().toISOString(),
49
  } else {
50
  var validator = new Validation(multiForm);
51
  if (validator.validate()) {
52
+ if ($('hps_securesubmit_exp_date').value) {
53
+ var date = $('hps_securesubmit_exp_date').value.split('/');
54
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
55
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
56
+ }
57
+
58
  (new Heartland.HPS({
59
  publicKey: this.secureSubmitPublicKey,
60
  cardNumber: $('hps_securesubmit_cc_number').value,
74
  },
75
  secureSubmitResponseHandler: function (response) {
76
  var tokenField = $('hps_securesubmit_token'),
77
+ typeField = $('hps_securesubmit_cc_type'),
78
  lastFourField = $('hps_securesubmit_cc_last_four');
79
+ tokenField.value = typeField.value = lastFourField.value = null;
80
+
81
+ if ($('hps_securesubmit_exp_date').value) {
82
+ var date = $('hps_securesubmit_exp_date').value.split('/');
83
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
84
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
85
+ }
86
 
87
  if (SecureSubmitMagento.skipCreditCard) {
88
  SecureSubmitMagento.completeCheckout();
96
  } else if (response && response.token_value) {
97
  tokenField.value = response.token_value;
98
  lastFourField.value = response.card.number.substr(-4);
99
+ typeField.value = response.card_type;
100
 
101
  // Continue Magento checkout steps
102
  document.getElementById('payment-continue').enable();
127
 
128
  // Use stored card checked, get existing token data
129
  if (this.secureSubmitUseStoredCard()) {
130
+ var radio = $$('[name="hps_securesubmit_stored_card_select"]:checked')[0];
131
+ var storedcardId = radio.value;
132
+ var storedcardType = $(radio.id + '_card_type').value;
133
  checkout.setLoadWaiting('payment');
134
  new Ajax.Request(this.secureSubmitGetTokenDataUrl, {
135
  method: 'post',
141
  $('hps_securesubmit_cc_exp_year').value = data.token.cc_exp_year;
142
  }
143
  this.secureSubmitResponseHandler({
144
+ card_type: storedcardType,
145
  token_value: data.token.token_value,
146
  token_type: null, // 'supt'?
147
  token_expire: new Date().toISOString(),
169
  var validator = new Validation(this.form);
170
  if (this.validate() && validator.validate()) {
171
  checkout.setLoadWaiting('payment');
172
+
173
+ if ($('hps_securesubmit_exp_date').value) {
174
+ var date = $('hps_securesubmit_exp_date').value.split('/');
175
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
176
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
177
+ }
178
+
179
  (new Heartland.HPS({
180
  publicKey: this.secureSubmitPublicKey,
181
  cardNumber: $('hps_securesubmit_cc_number').value,
195
  },
196
  secureSubmitResponseHandler: function (response) {
197
  var tokenField = $('hps_securesubmit_token'),
198
+ typeField = $('hps_securesubmit_cc_type'),
199
  lastFourField = $('hps_securesubmit_cc_last_four');
200
+ tokenField.value = typeField.value = lastFourField.value = null;
201
+
202
+ if ($('hps_securesubmit_exp_date').value) {
203
+ var date = $('hps_securesubmit_exp_date').value.split('/');
204
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
205
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
206
+ }
207
 
208
  if (SecureSubmitMagento.skipCreditCard) {
209
  SecureSubmitMagento.completeCheckout();
218
  } else if (response && response.token_value) {
219
  tokenField.value = response.token_value;
220
  lastFourField.value = response.card.number.substr(-4);
221
+ typeField.value = response.card_type;
222
 
223
  // Continue Magento checkout steps
224
  new Ajax.Request(this.saveUrl, {
253
  message: SecureSubmitMagento.options.publicKey
254
  }, 'cardNumber');
255
  } else {
256
+ if ($('hps_securesubmit_exp_date').value) {
257
+ var date = $('hps_securesubmit_exp_date').value.split('/');
258
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
259
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
260
+ }
261
+
262
  (new Heartland.HPS({
263
  publicKey: this.secureSubmitPublicKey,
264
  cardNumber: $('hps_securesubmit_cc_number').value,
272
  },
273
  secureSubmitResponseHandler: function (response) {
274
  var tokenField = $('hps_securesubmit_token'),
275
+ typeField = $('hps_securesubmit_cc_type'),
276
  lastFourField = $('hps_securesubmit_cc_last_four');
277
+ tokenField.value = typeField.value = lastFourField.value = null;
278
+
279
+ if ($('hps_securesubmit_exp_date').value) {
280
+ var date = $('hps_securesubmit_exp_date').value.split('/');
281
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
282
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
283
+ }
284
 
285
  if (SecureSubmitMagento.skipCreditCard) {
286
  SecureSubmitMagento.completeCheckout();
295
  } else if (response && response.token_value) {
296
  tokenField.value = response.token_value;
297
  lastFourField.value = response.card.number.substr(-4);
298
+ typeField.value = response.card_type;
299
 
300
  this.setLoadWaiting(true);
301
  var params = Form.serialize(this.form);
337
  $('onestepcheckout-button-place-order').removeClassName('place-order-loader');
338
  $('onestepcheckout-button-place-order').addClassName('onestepcheckout-btn-checkout');
339
  if (secureSubmitUseStoredCardOSC()) {
340
+ var radio = $$('[name="hps_securesubmit_stored_card_select"]:checked')[0];
341
+ var storedcardId = radio.value;
342
+ var storedcardType = $(radio.id + '_card_type').value;
343
  new Ajax.Request(window.payment.secureSubmitGetTokenDataUrlOSC, {
344
  method: 'post',
345
  parameters: {storedcard_id: storedcardId},
350
  $('hps_securesubmit_expiration_yr').value = data.token.cc_exp_year;
351
  }
352
  secureSubmitResponseHandlerOSC({
353
+ card_type: storedcardType,
354
  token_value: data.token.token_value,
355
  token_type: null, // 'supt'?
356
  token_expire: new Date().toISOString(),
374
  message: SecureSubmitMagento.options.publicKey
375
  }, 'cardNumber');
376
  } else {
377
+ if ($('hps_securesubmit_exp_date').value) {
378
+ var date = $('hps_securesubmit_exp_date').value.split('/');
379
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
380
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
381
+ }
382
+
383
  (new Heartland.HPS({
384
  publicKey: window.payment.secureSubmitPublicKeyOSC,
385
  cardNumber: $('hps_securesubmit_cc_number').value,
405
 
406
  secureSubmitResponseHandlerOSC = function (response, btn) {
407
  var tokenField = $('hps_securesubmit_token'),
408
+ typeField = $('hps_securesubmit_cc_type'),
409
  lastFourField = $('hps_securesubmit_cc_last_four');
410
+ tokenField.value = typeField.value = lastFourField.value = null;
411
+
412
+ if ($('hps_securesubmit_exp_date').value) {
413
+ var date = $('hps_securesubmit_exp_date').value.split('/');
414
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
415
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
416
+ }
417
 
418
  if (SecureSubmitMagento.skipCreditCard) {
419
  SecureSubmitMagento.completeCheckout();
431
  } else if (response && response.token_value) {
432
  tokenField.value = response.token_value;
433
  lastFourField.value = response.card.number.substr(-4);
434
+ typeField.value = response.card_type;
435
 
436
  $('onestepcheckout-place-order-loading').show();
437
  $('onestepcheckout-button-place-order').removeClassName('onestepcheckout-btn-checkout');
470
  message: SecureSubmitMagento.options.publicKey
471
  }, 'cardNumber');
472
  } else {
473
+ if ($('hps_securesubmit_exp_date').value) {
474
+ var date = $('hps_securesubmit_exp_date').value.split('/');
475
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
476
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
477
+ }
478
+
479
  (new Heartland.HPS({
480
  publicKey: this.secureSubmitPublicKey,
481
  cardNumber: $('hps_securesubmit_cc_number').value,
489
  },
490
  secureSubmitResponseHandler: function (response) {
491
  var tokenField = $('hps_securesubmit_token'),
492
+ typeField = $('hps_securesubmit_cc_type'),
493
  lastFourField = $('hps_securesubmit_cc_last_four');
494
+ tokenField.value = typeField.value = lastFourField.value = null;
495
+
496
+ if ($('hps_securesubmit_exp_date').value) {
497
+ var date = $('hps_securesubmit_exp_date').value.split('/');
498
+ $('hps_securesubmit_cc_exp_month').value = date[0].trim();
499
+ $('hps_securesubmit_cc_exp_year').value = date[1].trim();
500
+ }
501
 
502
  if (SecureSubmitMagento.skipCreditCard) {
503
  SecureSubmitMagento.completeCheckout();
512
  } else if (response && response.token_value) {
513
  tokenField.value = response.token_value;
514
  lastFourField.value = response.card.number.substr(-4);
515
+ typeField.value = response.card_type;
516
 
517
  var form = $j_opc('#co-payment-form').serializeArray();
518
  IWD.OPC.Checkout.xhr = $j_opc.post(
726
  onSuccess: checkout.setResponse.bind(checkout),
727
  onFailure: checkout.ajaxFailure.bind(checkout)
728
  });
729
+ } else if (typeof IWD !== 'undefined' && typeof IWD.OPC !== 'undefined') {
730
  var form = $j_opc('#co-payment-form').serializeArray();
731
  IWD.OPC.Checkout.xhr = $j_opc.post(
732
  IWD.OPC.Checkout.config.baseUrl + 'onepage/json/savePayment',
lib/SecureSubmit/src/Services/Gateway/HpsCreditService.php CHANGED
@@ -286,8 +286,18 @@ class HpsCreditService extends HpsSoapGatewayService
286
 
287
  return $this->_submitTransaction($hpsTransaction, 'CreditReturn', (isset($details->clientTransactionId) ? $details->clientTransationId : null));
288
  }
289
-
290
- public function reverse($cardData, $amount, $currency, $details = null)
 
 
 
 
 
 
 
 
 
 
291
  {
292
  HpsInputValidation::checkCurrency($currency);
293
  $this->_currency = $currency;
@@ -299,6 +309,10 @@ class HpsCreditService extends HpsSoapGatewayService
299
  $hpsBlock1 = $xml->createElement('hps:Block1');
300
 
301
  $hpsBlock1->appendChild($xml->createElement('hps:Amt', $amount));
 
 
 
 
302
  $cardDataElement = null;
303
  if ($cardData instanceof HpsCreditCard) {
304
  $cardDataElement = $xml->createElement('hps:CardData');
@@ -318,10 +332,10 @@ class HpsCreditService extends HpsSoapGatewayService
318
 
319
  $hpsCreditReversal->appendChild($hpsBlock1);
320
  $hpsTransaction->appendChild($hpsCreditReversal);
321
-
322
  return $this->_submitTransaction($hpsTransaction, 'CreditReversal', (isset($details->clientTransactionId) ? $details->clientTransactionId : null));
323
  }
324
 
 
325
  public function updateTokenExpiration($multiUseToken, $newExpMonth, $newExpYear)
326
  {
327
  $xml = new DOMDocument();
286
 
287
  return $this->_submitTransaction($hpsTransaction, 'CreditReturn', (isset($details->clientTransactionId) ? $details->clientTransationId : null));
288
  }
289
+ /**
290
+ * @param HpsCreditCard|HpsTokenData|int $cardData GatewayTxnId
291
+ * @param float $amount
292
+ * @param USD $currency
293
+ * @param null|HpsTransactionDetails $details
294
+ * @param null|float $authAmount
295
+ * @return HpsReversal
296
+ * @throws HpsException
297
+ * @throws HpsGatewayException
298
+ * @throws HpsInvalidRequestException
299
+ */
300
+ public function reverse($cardData, $amount, $currency, $details = null, $authAmount = null)
301
  {
302
  HpsInputValidation::checkCurrency($currency);
303
  $this->_currency = $currency;
309
  $hpsBlock1 = $xml->createElement('hps:Block1');
310
 
311
  $hpsBlock1->appendChild($xml->createElement('hps:Amt', $amount));
312
+ if ($authAmount !== null){
313
+ $hpsBlock1->appendChild($xml->createElement('hps:AuthAmt', HpsInputValidation::checkAmount($authAmount)));
314
+ }
315
+
316
  $cardDataElement = null;
317
  if ($cardData instanceof HpsCreditCard) {
318
  $cardDataElement = $xml->createElement('hps:CardData');
332
 
333
  $hpsCreditReversal->appendChild($hpsBlock1);
334
  $hpsTransaction->appendChild($hpsCreditReversal);
 
335
  return $this->_submitTransaction($hpsTransaction, 'CreditReversal', (isset($details->clientTransactionId) ? $details->clientTransactionId : null));
336
  }
337
 
338
+
339
  public function updateTokenExpiration($multiUseToken, $newExpMonth, $newExpYear)
340
  {
341
  $xml = new DOMDocument();
lib/SecureSubmit/src/Services/Gateway/HpsSoapGatewayService.php CHANGED
@@ -328,7 +328,7 @@ class HpsSoapGatewayService extends HpsGatewayServiceAbstract implements HpsGate
328
  } else if (strpos($this->_config->secretApiKey, '_uat_') !== false) {
329
  return "https://posgateway.uat.secureexchange.net/Hps.Exchange.PosGateway/PosGatewayService.asmx";
330
  } else {
331
- return "https://api2.heartlandportico.com/Hps.Exchange.PosGateway/PosGatewayService.asmx";
332
  }
333
  } else {
334
  return $this->_config->soapServiceUri;
328
  } else if (strpos($this->_config->secretApiKey, '_uat_') !== false) {
329
  return "https://posgateway.uat.secureexchange.net/Hps.Exchange.PosGateway/PosGatewayService.asmx";
330
  } else {
331
+ return "https://posgateway.secureexchange.net/Hps.Exchange.PosGateway/PosGatewayService.asmx";
332
  }
333
  } else {
334
  return $this->_config->soapServiceUri;
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Hps_Securesubmit</name>
4
- <version>1.2.7</version>
5
  <stability>stable</stability>
6
  <license uri="https://github.com/hps/heartland-magento-extension/blob/master/LICENSE">Custom</license>
7
  <channel>community</channel>
@@ -10,11 +10,19 @@
10
  <description>Use Heartland Payment Systems SecureSubmit platform to charge, authorize, void, refund and partial refund credit cards.&#xD;
11
  &#xD;
12
  Allow customers to store their cards for reduced friction at next checkout using our multi-use card tokenization process which helps reduce PCI scope.</description>
13
- <notes>remove validate-card-type class to allow submit</notes>
 
 
 
 
 
 
 
 
14
  <authors><author><name>Heartland Payment Systems</name><user>markhagan</user><email>EntApp_DevPortal@e-hps.com</email></author></authors>
15
- <date>2016-06-22</date>
16
- <time>21:22:12</time>
17
- <contents><target name="magecommunity"><dir name="Hps"><dir name="Securesubmit"><dir name="Block"><dir name="Adminhtml"><file name="Form.php" hash="ab296bcf9018c73690bb0f5ab381381d"/><dir name="Paypal"><dir name="Settlement"><dir name="Report"><dir name="Form"><file name="Form.php" hash="da5a943526a729a4e78def46c63d0109"/></dir><file name="Form.php" hash="ecc3101a2a399dc71ae544bbe7bb9595"/><file name="Grid.php" hash="35b62c9ab2fe5b5e9a9394e11167f50c"/></dir><file name="Report.php" hash="19171fb1fad872b0ebff9692de1415fd"/></dir></dir></dir><file name="Form.php" hash="031741c6abad215430305c3758b3a362"/><file name="Info.php" hash="1d1144e2543790f1b4a045294a2a24b5"/><dir name="Masterpass"><dir name="Client"><file name="Js.php" hash="ed427387b93d2753d8e8ada51c0d8f37"/></dir><file name="Connect.php" hash="b5e362f21c219ec61c4df7dff561ace6"/><file name="Form.php" hash="6abc4c67143380fad13efec247a18af4"/><file name="Info.php" hash="b8f714200c8f74cd8a0a9547fafc3637"/><dir name="Review"><file name="Billing.php" hash="c5bc2f64c2dc30e8ca1458cd286a16ee"/><file name="Details.php" hash="c324f315b2dfda8263151612ec73f513"/><file name="Shipping.php" hash="aeb5f38aa185e9d3acbb7ce5d4c4b841"/></dir><file name="Review.php" hash="b6e4dbd308c44215e50fa94dd22a32b0"/></dir><dir name="Paypal"><dir name="Credit"><file name="Form.php" hash="68fc4811e8f2d9a1b502454533fe5bca"/></dir><file name="Form.php" hash="776d2aab11db7d212061ca9a30936af1"/><dir name="Incontext"><file name="Js.php" hash="d09bf9157c0b7c5f6dba16d8cdac557d"/></dir><file name="Info.php" hash="9c1948c538383376b1dc1b4c76c31e95"/><dir name="Review"><file name="Billing.php" hash="62a22e1f5bd65c4d9369b5794779ffe9"/><file name="Details.php" hash="57d97c8a2c3b7ddac7dc4cda43e4363f"/><file name="Shipping.php" hash="694374b68714b6d58d9af8b9fb15d502"/></dir><file name="Review.php" hash="87c8f3bf319799b33170bec9f42e2544"/><file name="Shortcut.php" hash="26f13ae7afac41ce88fb1cd4042b61b5"/></dir></dir><dir name="Helper"><dir name="Altpayment"><file name="Abstract.php" hash="5fc29e9d6355660415934426d0ee624e"/></dir><file name="Data.php" hash="35a26dab0e14154f2ee80a498f788d7c"/><file name="Masterpass.php" hash="69489b7cae8b99fe216f522b19f3d448"/><file name="Paypal.php" hash="74d1d0885349c432016bd04f3211c4c2"/></dir><dir name="Model"><dir name="Altpayment"><file name="Cart.php" hash="1dc83b97c44463e954efc8ee1c9e62b8"/></dir><file name="Masterpass.php" hash="063acd12e22bdc26d7591cbabf7e3005"/><file name="Payment.php" hash="841304922d363f6360c7ce02fd99df99"/><dir name="Paypal"><file name="Credit.php" hash="3548d6c4308df9d377cc1dd0d40f0f4d"/></dir><file name="Paypal.php" hash="c3eb2058ff6860e85a9310944c989301"/><file name="Report.php" hash="7f5e5bf0c652b37cf8c42eb553c8b3e0"/><dir name="Resource"><dir name="Report"><file name="Collection.php" hash="5870728a842922bbbff9c50173a90bd4"/></dir><file name="Report.php" hash="59598e2958a864119925c6e847b66121"/><file name="Setup.php" hash="8bdfbde89d786809d8aa2637efb1d2ae"/><dir name="Storedcard"><file name="Collection.php" hash="756c3c2d6dd5384f37847a028ac12fee"/></dir><file name="Storedcard.php" hash="d43320b704eb1e37c77a5ac20401c557"/></dir><file name="Session.php" hash="136b4146cea2f596847f0b838ec3f532"/><dir name="Source"><file name="Cctype.php" hash="d2dfff6147dc5c2748c7e9767b1fd1cb"/><file name="PaymentAction.php" hash="3c900b82e9af73a372d9f5f36bc1c264"/></dir><file name="Storedcard.php" hash="50897a56669c5938d4613579b603df93"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Proxy.php" hash="29ea9cb11927cd1e43055a42101eea36"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Hps"><dir name="Paypal"><file name="ReportsController.php" hash="914711bc008ec9e240918be7e77d1d54"/></dir></dir><file name="StoredcardController.php" hash="1e968134bf3b60a5f49544ddd1df8f03"/></dir><file name="GiftcardController.php" hash="dd15a7709121a3149fb30f77c385b18f"/><file name="MasterpassController.php" hash="2fb95214db3d3d017dd022743636ec50"/><file name="PaypalController.php" hash="962ce3dc3e738689d6ec6b122ed46001"/><file name="StoredcardController.php" hash="57116e86203df6f24a12fcd93186b534"/></dir><dir name="etc"><file name="adminhtml.xml" hash="8dc53c22d22cd633ebd6c06e7262c741"/><file name="config.xml" hash="0a5d2c0241c3d737081c7e923d2f5276"/><file name="system.xml" hash="55c48cd4411bdfbc62d11a202d5764ae"/></dir><dir name="sql"><dir name="hps_securesubmit_setup"><file name="install-1.0.0.php" hash="d424731dcb784aad59dad0bcce431375"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="510826261ea81ea6a09d4ea84c59d41d"/><file name="mysql4-upgrade-1.0.1-1.1.0.php" hash="01e948ea2939f9b0b69bb6748adc53f2"/><file name="mysql4-upgrade-1.1.0-1.2.0.php" hash="84cf1a359fc5a5600e1d98ba0089d911"/></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="securesubmit"><file name="admin-checkout.js" hash="14d970828f50bb463dc3f7cdaca97e1d"/><file name="checkout-form.js" hash="02f3d2e0e5bd150b5f2980f941e06d74"/><dir name="masterpass"><file name="lightbox.js" hash="b534647c7c06b5ce90caf4cdd6166f91"/></dir><dir name="paypal"><file name="incontext.js" hash="e3810f12033fa9822db756a22622f799"/></dir><file name="secure.submit-1.0.1.js" hash="988d59dadbc272b869bc9e56cbd7518e"/></dir></dir></target><target name="magelib"><dir name="SecureSubmit"><file name="Hps.php" hash="aeeb39dae09306051eec2cf455fcb6a8"/><file name="LICENSE.txt" hash="de081f847a769f89be5a1f80862005ba"/><file name="PRIVACY.txt" hash="58cdc5fbbff24a84a838b0174b254f70"/><file name="README.md" hash="8320a396aa5544e61fe2e8f2adb09505"/><file name="index.php" hash="feabe5cc691b088d6ade3e04d6b120fc"/><dir name="src"><dir name="Abstractions"><file name="HpsAltPaymentServiceInterface.php" hash="bbbacdf42b798458ca46921b3ddb9eaf"/><file name="HpsBuilderAbstract.php" hash="6498e7b7e00716574a9dd238d1d7da5e"/><file name="HpsConfigInterface.php" hash="6541819ca5724269db6e1a9ed456d52e"/><file name="HpsGatewayServiceAbstract.php" hash="6e6631e0cfea0001a6fff4bf57d13068"/><file name="HpsGatewayServiceInterface.php" hash="c2b49802b328648d8510433b5c82f71f"/><file name="HpsPayPlanResourceAbstract.php" hash="df262df6345c4932626e60afecdeb478"/><file name="HpsPayPlanResourceInterface.php" hash="22dd33e354f46218d2872eab956d57c1"/></dir><dir name="Entities"><dir name="AltPayment"><file name="HpsAltPaymentAddToBatch.php" hash="1684714c0cd14d6d33288a44f43c9dd6"/><file name="HpsAltPaymentAuth.php" hash="4f2748e2b95cffed6bd0e62f75af71eb"/><file name="HpsAltPaymentCapture.php" hash="51a86062c15c6f8de15147b5b53f89a4"/><file name="HpsAltPaymentCreateSession.php" hash="4e83acd11a03e7dfcf904f2421d858b3"/><file name="HpsAltPaymentResponse.php" hash="860336d2015560f889c41773574b97ab"/><file name="HpsAltPaymentReturn.php" hash="0b9d8cb0f67ddf113b99ca64ab6019a3"/><file name="HpsAltPaymentSale.php" hash="f390a9a4af50f7a8a863c607f7e3357f"/><file name="HpsAltPaymentSessionInfo.php" hash="a5fdaea50db9f15eb762f4ca3512cae4"/><file name="HpsAltPaymentVoid.php" hash="429f0fbec31ae4842c494b0a8af47ddb"/><file name="HpsBuyerData.php" hash="4fd94d96a547378d2974fa386c89223f"/><file name="HpsCardinalMPIAddOrderNumberResponse.php" hash="a2f2c09eb9e7020e7af97819fe065dc3"/><file name="HpsCardinalMPIAuthenticateResponse.php" hash="6868b0bc55d8e3409684e795d1db92fc"/><file name="HpsCardinalMPIAuthorizeResponse.php" hash="566a64988246220b00da62078ae32068"/><file name="HpsCardinalMPIAuthresponseResponse.php" hash="a53fb4863feb909ccb0d2f2cc254562f"/><file name="HpsCardinalMPICaptureResponse.php" hash="29de876ce9bc632016fceab91dca22ac"/><file name="HpsCardinalMPILookupResponse.php" hash="7171aff90865b67db79559f7b2f579ba"/><file name="HpsCardinalMPIPreapprovalResponse.php" hash="e9408b385ca4f32de5f1adf96a36c42d"/><file name="HpsCardinalMPIRefundResponse.php" hash="71dbbff6f6383a19b0feb91f8771dbe5"/><file name="HpsCardinalMPIResponse.php" hash="d3729129967b1da049287e200e4d46e2"/><file name="HpsCardinalMPIVoidResponse.php" hash="2796de53634fccca806a4a4143779f81"/><file name="HpsLineItem.php" hash="4ff06a280975312365cf10a730636682"/><file name="HpsOrderData.php" hash="5d3ae0110d44f4786d4398861735a259"/><file name="HpsPaymentData.php" hash="2bd9ddc10ecdaebdbb5bf0e3cf71f642"/><file name="HpsShippingInfo.php" hash="63b621ebba4ae1711aca57073b0abec7"/></dir><dir name="Batch"><file name="HpsBatch.php" hash="d9af4664e64172cb8edaeaa1ea7c7337"/></dir><dir name="Check"><file name="HpsCheck.php" hash="8fb85bd4d608e72a9690285ec46fa6d2"/><file name="HpsCheckHolder.php" hash="58f865b34faf2790fef26066de775a15"/><file name="HpsCheckResponse.php" hash="ff3c752bc85554424e62ed7efbc053f2"/><file name="HpsCheckResponseDetails.php" hash="28928ceb2dea574603a376aed1691a90"/></dir><dir name="Credit"><file name="HpsAccountVerify.php" hash="527a69e5a39153b764e6c14e0d98bf34"/><file name="HpsAuthorization.php" hash="7ec1bbfa6efa5bc48432b5de81eda314"/><file name="HpsCPCData.php" hash="f246c4aa1eec482ba84966c563aeb970"/><file name="HpsCPCEdit.php" hash="f04b0089485ba9e7eacba8e15815ec97"/><file name="HpsCardHolder.php" hash="ffee4609a3ffa886a386a12dea3f4508"/><file name="HpsCharge.php" hash="512fb9e459b336a9e256d8f1e08e36b9"/><file name="HpsChargeExceptions.php" hash="c7df102696a205a4c5689c48878ac5f3"/><file name="HpsCreditCard.php" hash="6aa3d449b0648997c4c532c1e3603cbb"/><file name="HpsOfflineAuthorization.php" hash="6f11736d36cfde0d9d79c94e92f60c8b"/><file name="HpsRecurringBilling.php" hash="9da8f9b16179729b77615f04993b05bf"/><file name="HpsRefund.php" hash="aa4664916ebb94b8f2066fd7c17b0fd4"/><file name="HpsReportTransactionDetails.php" hash="014672dc58e5680f57f5d6cb8b0f8ee6"/><file name="HpsReportTransactionSummary.php" hash="441b01c652db42213264980e6f693b40"/><file name="HpsReversal.php" hash="350191a2d38189ef8e098ed1f922c1d3"/><file name="HpsVoid.php" hash="bf6216cea2f130789a045fc226c54cd0"/></dir><dir name="Debit"><file name="HpsDebitAddValue.php" hash="9053c701093889f864dd36af208f4f71"/><file name="HpsDebitReturn.php" hash="519cb73c6fc4ce716453d5ff94f437a0"/><file name="HpsDebitReversal.php" hash="223f6db72f0219ef25eb0f0adec4e9be"/><file name="HpsDebitSale.php" hash="74fa1e1425cfe6294146c879a4049aa8"/></dir><dir name="Fluent"><file name="HpsBuilderAction.php" hash="8649cc2c53fd961f350070193fedb5c6"/><file name="HpsUnknownPropertyException.php" hash="d019e8645fae6f984ad7b7ea3cebb546"/></dir><dir name="Gift"><file name="HpsGiftCard.php" hash="c8bad2a5336689e3192ea223a97760bf"/><file name="HpsGiftCardActivate.php" hash="097ac7c36cae11b8c40a3f1414518e49"/><file name="HpsGiftCardAddValue.php" hash="131a9d7cbc711a4e3e85c66049028f30"/><file name="HpsGiftCardAlias.php" hash="133d2d4701c5aa88fa0eece6ee69de06"/><file name="HpsGiftCardBalance.php" hash="9b9fe395d218c79c55faf28fd736b431"/><file name="HpsGiftCardDeactivate.php" hash="323ca5a67c6ff0169925192952881db5"/><file name="HpsGiftCardReplace.php" hash="f122a7d924a56fcc406bc8b1c82ac2b2"/><file name="HpsGiftCardReversal.php" hash="88ba755e52f41311206add4fa8ee5e09"/><file name="HpsGiftCardReward.php" hash="f758e8c5462d336236ae0d257789cdaf"/><file name="HpsGiftCardSale.php" hash="0f758ef6653215be643abaea4964352a"/><file name="HpsGiftCardVoid.php" hash="f0294740f5b7f545167d5fb258f4dcdd"/></dir><file name="HpsAddress.php" hash="fcc67451ff9f1c483e2943cf6ee5c5fe"/><file name="HpsConsumer.php" hash="1254142dfa0821cbb0bf154cf51f34d2"/><file name="HpsDirectMarketData.php" hash="1925c204d19cb9233ec8178e3b5cdc50"/><file name="HpsEncryptionData.php" hash="1e4845abc6c42e8f0265e2679b05efb6"/><file name="HpsTokenData.php" hash="18ab9125315bb8e5f9cb272966dac22b"/><file name="HpsTrackData.php" hash="4656f37b7c4c777d0c63b4102efe5a1a"/><file name="HpsTransaction.php" hash="f109d2d26ba237afb2dc17bc287f63a9"/><file name="HpsTransactionDetails.php" hash="4e77261d0aced118b49e26ef786beace"/><file name="HpsTransactionHeader.php" hash="ebd21539f84425f0e2fc57c6049a26a1"/><file name="HpsTransactionStatus.php" hash="a5a67f8fe3780f66b045cc4314660dc5"/><dir name="PayPlan"><file name="HpsPayPlanAmount.php" hash="25706476e264124567d704f981745b13"/><file name="HpsPayPlanCustomer.php" hash="2714a7525fb3830fc018544ea0622ab5"/><file name="HpsPayPlanPaymentMethod.php" hash="fd3077d63e6f31c2d8a4c60c78a678ea"/><file name="HpsPayPlanSchedule.php" hash="4c9fe8bd7db0810fd108e51b81bdf590"/></dir><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/><file name=".DS_Store" hash="92d42bd310aa7f6dd74d14e6cdd2b9e9"/></dir><dir name="Infrastructure"><dir name="Enums"><file name="HpsACHType.php" hash="1ff5593689a404cb0179c2b5cb5fe19e"/><file name="HpsAccountType.php" hash="760d91e120f443c326e6c7586aa61092"/><file name="HpsCardBrand.php" hash="9532bb7c40811c114a1eeeffa8b9732c"/><file name="HpsCentinelCheckoutType.php" hash="7370920cb980bbfc54c741a981cd79bb"/><file name="HpsCheckType.php" hash="d60c676d93c8ada169deb14ddc8e64e7"/><file name="HpsDataEntryMode.php" hash="c323d884a7a305f9af647ea1d9a4177e"/><file name="HpsExceptionCodes.php" hash="95322648a2093ed3982c6bb724f3507a"/><file name="HpsGiftCardAliasAction.php" hash="ebcb27c6fb800e17693ed4af2e8a8943"/><file name="HpsItemChoiceTypePosResponseVer10Transaction.php" hash="686225a07738db2233a2228bec6baabf"/><file name="HpsPayPlanAccountType.php" hash="4d383c42a990fb077fae49386c08b870"/><file name="HpsPayPlanCustomerStatus.php" hash="3ff092e8dd97f2a2474fb64103cb238f"/><file name="HpsPayPlanPaymentMethodStatus.php" hash="b020c52de7987ed3011cb97e4d440c6a"/><file name="HpsPayPlanPaymentMethodType.php" hash="1f77c5c8528815f05803c1381cb4151a"/><file name="HpsPayPlanScheduleDuration.php" hash="05101e6fe3b725b43917b59770f2dbb1"/><file name="HpsPayPlanScheduleFrequency.php" hash="0b3f029c64315ee9c8701d23319941c1"/><file name="HpsPayPlanScheduleStatus.php" hash="3579b52ccf36e576fd2dfb36118716f6"/><file name="HpsSECCode.php" hash="551661613c127c068f139083338b92d1"/><file name="HpsTaxType.php" hash="ba0e05330880810e58370f2f3490ca81"/><file name="HpsTrackDataMethod.php" hash="446069e9786f9585c3490140b29ae52f"/><file name="HpsTransactionType.php" hash="a38b3f4c654a4fa3b2c2d64b8afacf24"/></dir><file name="HpsApiConnectionException.php" hash="ac5a8064a7c2a1616035a5702f36cd50"/><file name="HpsArgumentException.php" hash="855c43e88fc24b582cfe56875d7cff42"/><file name="HpsAuthenticationException.php" hash="6feb2fdc5499b460274524aa469d9a7d"/><file name="HpsCheckException.php" hash="94870f2438217b3275d05fb943a0a8c0"/><file name="HpsConfiguration.php" hash="010996727d89c485c1d11463e5c53a8e"/><file name="HpsCreditException.php" hash="a16bf1ecd6a2c866b7b40351aab3df34"/><file name="HpsCreditExceptionDetails.php" hash="d71c54b2846283a8f97aae74a747dfd9"/><file name="HpsException.php" hash="8d2025b7fae9f0f756341b876a0dab41"/><file name="HpsGatewayException.php" hash="cdd6db6c8436e3e78ee15cdd7a043a9d"/><file name="HpsGatewayExceptionDetails.php" hash="16dd36360e2237ca89e056c61766bcdd"/><file name="HpsInvalidRequestException.php" hash="7877e48463ef3f488bb92423ae445412"/><file name="HpsProcessorError.php" hash="ff7f1f2c5327417b4997f9e36fa7c887"/><file name="HpsProcessorException.php" hash="ba28a92f0e551053506dcc391c5bc431"/><file name="HpsProcessorExceptionDetails.php" hash="6a569aacf045c19ade6472a857a3a274"/><dir name="Validation"><file name="HpsGatewayResponseValidation.php" hash="06fb818263b18b58974a569d0c986667"/><file name="HpsInputValidation.php" hash="1f51837f70c322f2a7c1cc39df752b1a"/><file name="HpsIssuerResponseValidation.php" hash="613377f8ca249df078c909e4d7674bfb"/><file name="HpsProcessorResponseValidation.php" hash="ff19a569f8bdd6ef7b58a460cf06b4e8"/></dir><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/></dir><dir name="Services"><dir name="Fluent"><dir name="Gateway"><dir name="Check"><file name="HpsCheckServiceOverrideBuilder.php" hash="5b4a49a897f87d2a332182a1ccd67d0c"/><file name="HpsCheckServiceRecurringBuilder.php" hash="c86a2fd5165a65c78e38e3bbb1b9636c"/><file name="HpsCheckServiceReturnBuilder.php" hash="5ce46356468714f65ad827e1593977cc"/><file name="HpsCheckServiceSaleBuilder.php" hash="b823e74642e165772f5cb03beffacce7"/><file name="HpsCheckServiceVoidBuilder.php" hash="17305b04474285a8b64007c549180ba5"/></dir><dir name="Credit"><file name="HpsCreditServiceAuthorizeBuilder.php" hash="51997a17ee9a1aaacd40d9d2c8d69c17"/><file name="HpsCreditServiceCaptureBuilder.php" hash="fd6512f3b72f9051eaf7c3daeff2cb48"/><file name="HpsCreditServiceChargeBuilder.php" hash="3421b227fe594f0cb1533b4496c805bd"/><file name="HpsCreditServiceCpcEditBuilder.php" hash="7401c33a56c5a3c6a23f5f70101a4926"/><file name="HpsCreditServiceEditBuilder.php" hash="cdcf661c4182625212ec724b52eb8491"/><file name="HpsCreditServiceGetBuilder.php" hash="05b0cafe715a4d3ceb3c88b99b0c8dc1"/><file name="HpsCreditServiceListTransactionsBuilder.php" hash="a7765dfadc8e21177cc453a1e7dfd715"/><file name="HpsCreditServiceOfflineAuthBuilder.php" hash="d86d2425c6bbf28854a31d09a9f802b8"/><file name="HpsCreditServiceOfflineChargeBuilder.php" hash="0ee9ecf6b499a16f01fa2a7b94af00ca"/><file name="HpsCreditServicePrepaidAddValueBuilder.php" hash="997b48104fcdbd791a3b990515f2527e"/><file name="HpsCreditServicePrepaidBalanceInquiryBuilder.php" hash="7e7dd067d79281c32417b6d338825acd"/><file name="HpsCreditServiceRecurringBuilder.php" hash="560c8b86eeb9e4e468642eaa739ebe03"/><file name="HpsCreditServiceRefundBuilder.php" hash="4d5ab9c2a11c18a47e416bd90dffc5e8"/><file name="HpsCreditServiceReverseBuilder.php" hash="7960e9efa00ceb0d0c5368715c07d424"/><file name="HpsCreditServiceVerifyBuilder.php" hash="62027b344ee5444ccd1534358a405857"/><file name="HpsCreditServiceVoidBuilder.php" hash="0029756571343a1d8c6380874f6f5b6b"/></dir><dir name="Debit"><file name="HpsDebitServiceAddValueBuilder.php" hash="5f972b68a5afa062cbf911bfb3a946bc"/><file name="HpsDebitServiceChargeBuilder.php" hash="26aafce2a87bbbd8231a039209c49657"/><file name="HpsDebitServiceReturnBuilder.php" hash="2e11267e12bdd338b953db352a373961"/><file name="HpsDebitServiceReverseBuilder.php" hash="b088431d3ba0726d44cc418e92267958"/></dir><dir name="GiftCard"><file name="HpsGiftCardServiceActivateBuilder.php" hash="65e3ebd1c6ded3860b238d03e542fe3b"/><file name="HpsGiftCardServiceAddValueBuilder.php" hash="432582c9fd6617c86b373f5fe0b14fb1"/><file name="HpsGiftCardServiceAliasBuilder.php" hash="1b096debfa6678af2d6ddecfa82a638e"/><file name="HpsGiftCardServiceBalanceBuilder.php" hash="6bebaac04d059204a2408d693f77c449"/><file name="HpsGiftCardServiceDeactivateBuilder.php" hash="92b16b331414c40ea11de330bd447273"/><file name="HpsGiftCardServiceReplaceBuilder.php" hash="063e6b33a673c23553047a6f72927b2a"/><file name="HpsGiftCardServiceReverseBuilder.php" hash="2f7b96b1f9608cb7e3526ecb9b15558f"/><file name="HpsGiftCardServiceRewardBuilder.php" hash="242fbe42ab731b138e4d74be4cde4e9a"/><file name="HpsGiftCardServiceSaleBuilder.php" hash="8af2977da26e3707e42569ad7bf4c4a5"/><file name="HpsGiftCardServiceVoidBuilder.php" hash="fff556a586bb09d22f521a90d30fb809"/></dir><file name="HpsFluentCheckService.php" hash="e89511e006e914bdd4daf6765a49e97b"/><file name="HpsFluentCreditService.php" hash="58e0d0480066fec8c5c6e31eaa275d12"/><file name="HpsFluentDebitService.php" hash="63e86fe32a92c80cc5bd163283da6c64"/><file name="HpsFluentGiftCardService.php" hash="53697a755fc90256b940c74282693b0d"/></dir></dir><dir name="Gateway"><dir name="AltPayment"><file name="HpsAltPaymentService.php" hash="3d9cdbad50ccceb45d4d888018d2bab7"/><file name="HpsMasterPassService.php" hash="f5639448d09a38377f16434351201b09"/><file name="HpsPayPalService.php" hash="c91eebb0eca8bdda2505b78c4746db28"/></dir><file name="HpsBatchService.php" hash="2a4c11a4f7c78ec1e3b461b3803826c5"/><file name="HpsCentinelGatewayService.php" hash="40300a57982ccd5325b7bd0986a8bcc4"/><file name="HpsCheckService.php" hash="17eac57a5f3a6f24e31000325ad9ac1d"/><file name="HpsCreditService.php" hash="9f96d16f735dfb6e916fb88520a2b52e"/><file name="HpsDebitService.php" hash="0ea76c01b3c817fcaea876bff28681b3"/><file name="HpsGiftCardService.php" hash="e1deb113c685845e2af2bb0ff793ea4d"/><file name="HpsPayPlanService.php" hash="ce5d2c003e72be8328634d92ab8ae6eb"/><file name="HpsRestGatewayService.php" hash="3a0b4217eb4e9d8c92d298914e539a04"/><file name="HpsSoapGatewayService.php" hash="969751eb742eeb7d7a99d5d61d2d2afb"/><file name="HpsTokenService.php" hash="b1dad4289201b399f89ad1d29a799d39"/><dir name="PayPlan"><file name="HpsPayPlanCustomerService.php" hash="cda074fca2230c26919a813cc2d71b5c"/><file name="HpsPayPlanPaymentMethodService.php" hash="61dd42308d203251f4483d68561c191b"/><file name="HpsPayPlanScheduleService.php" hash="e8c81640a7440a19ed3590894a31a1f1"/></dir></dir><file name="HpsCentinelConfig.php" hash="f43f7ea211a51883fb8a2173072027a8"/><file name="HpsServicesConfig.php" hash="f3d63dc7d089a8bcd248e4abc381e6a7"/><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/></dir><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/><file name=".DS_Store" hash="fb4d06cbd65ab29860d86984919afa4a"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="securesubmit.xml" hash="cc04e952cc17ea3462931a9e7a655316"/></dir><dir name="template"><dir name="securesubmit"><file name="form.phtml" hash="67a460ca8f034f4bfe3fbb8e7845f37f"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="securesubmit.xml" hash="410fda5ef3920f893f5a17ec379aa2da"/></dir><dir name="template"><dir name="securesubmit"><file name="form.phtml" hash="1e722ede8b902835e63c07360f6c8242"/><dir name="masterpass"><file name="connect.phtml" hash="b5f47624447a44958ce4fa004c58c319"/><file name="form.phtml" hash="039d6a174ac24c45ece0d14b92b6c9c4"/><file name="js.phtml" hash="274e871b2d8270e3224b9ce12794c2c5"/><file name="mark.phtml" hash="fe27b341b5fb034e90ac35c92ef998d4"/><dir name="review"><file name="details.phtml" hash="0dc5e1201e7e424f089c15fc83a1c70f"/><dir name="shipping"><file name="method.phtml" hash="cc426553636aa08840bee1c4778d89e4"/></dir></dir><file name="review.phtml" hash="cfc643de65b962ba27306587357f45d3"/></dir><dir name="paypal"><dir name="incontext"><file name="js.phtml" hash="16b4ad23ea05464a55bb0390cd72e248"/><file name="payment.phtml" hash="b32d269057984f656422609015dd7d91"/></dir><dir name="review"><file name="details.phtml" hash="0dc5e1201e7e424f089c15fc83a1c70f"/><dir name="shipping"><file name="method.phtml" hash="cc426553636aa08840bee1c4778d89e4"/></dir></dir><file name="review.phtml" hash="cfc643de65b962ba27306587357f45d3"/><file name="shortcut.phtml" hash="268bfac86e653ec5981cd201075f4105"/></dir><file name="storedcards.phtml" hash="2b599d437b60bab2e43efc1809892da0"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Hps_Securesubmit.xml" hash="d5aed3f48a45f8e611b68d1e6f34c959"/></dir></target></contents>
18
  <compatible/>
19
- <dependencies><required><php><min>5.2.0</min><max>5.6.22</max></php></required></dependencies>
20
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Hps_Securesubmit</name>
4
+ <version>1.2.8</version>
5
  <stability>stable</stability>
6
  <license uri="https://github.com/hps/heartland-magento-extension/blob/master/LICENSE">Custom</license>
7
  <channel>community</channel>
10
  <description>Use Heartland Payment Systems SecureSubmit platform to charge, authorize, void, refund and partial refund credit cards.&#xD;
11
  &#xD;
12
  Allow customers to store their cards for reduced friction at next checkout using our multi-use card tokenization process which helps reduce PCI scope.</description>
13
+ <notes>Fix: Issue with Magento card type validation when not using iframes&#xD;
14
+ Update: Add authorization data to payment information block for admin users&#xD;
15
+ Fix: Card type during checkout. Uses value from frontend.&#xD;
16
+ Fix: iframes when IWD isn't present&#xD;
17
+ Fix: OPC transfer on failed payment&#xD;
18
+ Fix: Issue with checkout using multi-use token&#xD;
19
+ Update: Add basic velocity check based on IP&#xD;
20
+ Update: Add support for partial refunds&#xD;
21
+ </notes>
22
  <authors><author><name>Heartland Payment Systems</name><user>markhagan</user><email>EntApp_DevPortal@e-hps.com</email></author></authors>
23
+ <date>2016-07-27</date>
24
+ <time>14:45:08</time>
25
+ <contents><target name="magecommunity"><dir name="Hps"><dir name="Securesubmit"><dir name="Block"><dir name="Adminhtml"><file name="Form.php" hash="ab296bcf9018c73690bb0f5ab381381d"/><dir name="Paypal"><dir name="Settlement"><dir name="Report"><dir name="Form"><file name="Form.php" hash="da5a943526a729a4e78def46c63d0109"/></dir><file name="Form.php" hash="ecc3101a2a399dc71ae544bbe7bb9595"/><file name="Grid.php" hash="35b62c9ab2fe5b5e9a9394e11167f50c"/></dir><file name="Report.php" hash="19171fb1fad872b0ebff9692de1415fd"/></dir></dir></dir><file name="Form.php" hash="031741c6abad215430305c3758b3a362"/><file name="Info.php" hash="f733311f2a666fdd481fb26f57f50b63"/><dir name="Masterpass"><dir name="Client"><file name="Js.php" hash="ed427387b93d2753d8e8ada51c0d8f37"/></dir><file name="Connect.php" hash="b5e362f21c219ec61c4df7dff561ace6"/><file name="Form.php" hash="6abc4c67143380fad13efec247a18af4"/><file name="Info.php" hash="b8f714200c8f74cd8a0a9547fafc3637"/><dir name="Review"><file name="Billing.php" hash="c5bc2f64c2dc30e8ca1458cd286a16ee"/><file name="Details.php" hash="c324f315b2dfda8263151612ec73f513"/><file name="Shipping.php" hash="aeb5f38aa185e9d3acbb7ce5d4c4b841"/></dir><file name="Review.php" hash="b6e4dbd308c44215e50fa94dd22a32b0"/></dir><dir name="Paypal"><dir name="Credit"><file name="Form.php" hash="68fc4811e8f2d9a1b502454533fe5bca"/></dir><file name="Form.php" hash="776d2aab11db7d212061ca9a30936af1"/><dir name="Incontext"><file name="Js.php" hash="d09bf9157c0b7c5f6dba16d8cdac557d"/></dir><file name="Info.php" hash="9c1948c538383376b1dc1b4c76c31e95"/><dir name="Review"><file name="Billing.php" hash="62a22e1f5bd65c4d9369b5794779ffe9"/><file name="Details.php" hash="57d97c8a2c3b7ddac7dc4cda43e4363f"/><file name="Shipping.php" hash="694374b68714b6d58d9af8b9fb15d502"/></dir><file name="Review.php" hash="87c8f3bf319799b33170bec9f42e2544"/><file name="Shortcut.php" hash="26f13ae7afac41ce88fb1cd4042b61b5"/></dir></dir><dir name="Helper"><dir name="Altpayment"><file name="Abstract.php" hash="5fc29e9d6355660415934426d0ee624e"/></dir><file name="Data.php" hash="35a26dab0e14154f2ee80a498f788d7c"/><file name="Masterpass.php" hash="69489b7cae8b99fe216f522b19f3d448"/><file name="Paypal.php" hash="74d1d0885349c432016bd04f3211c4c2"/></dir><dir name="Model"><dir name="Altpayment"><file name="Cart.php" hash="1dc83b97c44463e954efc8ee1c9e62b8"/></dir><file name="Masterpass.php" hash="063acd12e22bdc26d7591cbabf7e3005"/><file name="Payment.php" hash="16a45ffdfb177554945bd07451bf956c"/><dir name="Paypal"><file name="Credit.php" hash="3548d6c4308df9d377cc1dd0d40f0f4d"/></dir><file name="Paypal.php" hash="c3eb2058ff6860e85a9310944c989301"/><file name="Report.php" hash="7f5e5bf0c652b37cf8c42eb553c8b3e0"/><dir name="Resource"><dir name="Report"><file name="Collection.php" hash="5870728a842922bbbff9c50173a90bd4"/></dir><file name="Report.php" hash="59598e2958a864119925c6e847b66121"/><file name="Setup.php" hash="8bdfbde89d786809d8aa2637efb1d2ae"/><dir name="Storedcard"><file name="Collection.php" hash="756c3c2d6dd5384f37847a028ac12fee"/></dir><file name="Storedcard.php" hash="d43320b704eb1e37c77a5ac20401c557"/></dir><file name="Session.php" hash="136b4146cea2f596847f0b838ec3f532"/><dir name="Source"><file name="Cctype.php" hash="d2dfff6147dc5c2748c7e9767b1fd1cb"/><file name="PaymentAction.php" hash="3c900b82e9af73a372d9f5f36bc1c264"/></dir><file name="Storedcard.php" hash="50897a56669c5938d4613579b603df93"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Proxy.php" hash="29ea9cb11927cd1e43055a42101eea36"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Hps"><dir name="Paypal"><file name="ReportsController.php" hash="914711bc008ec9e240918be7e77d1d54"/></dir></dir><file name="StoredcardController.php" hash="1e968134bf3b60a5f49544ddd1df8f03"/></dir><file name="GiftcardController.php" hash="dd15a7709121a3149fb30f77c385b18f"/><file name="MasterpassController.php" hash="2fb95214db3d3d017dd022743636ec50"/><file name="PaypalController.php" hash="962ce3dc3e738689d6ec6b122ed46001"/><file name="StoredcardController.php" hash="57116e86203df6f24a12fcd93186b534"/></dir><dir name="etc"><file name="adminhtml.xml" hash="8dc53c22d22cd633ebd6c06e7262c741"/><file name="config.xml" hash="b2584cea4253c04257e859afa0969a8f"/><file name="system.xml" hash="2b4c4f26b48cb72f408c1c97ec3e4c21"/></dir><dir name="sql"><dir name="hps_securesubmit_setup"><file name="install-1.0.0.php" hash="d424731dcb784aad59dad0bcce431375"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="510826261ea81ea6a09d4ea84c59d41d"/><file name="mysql4-upgrade-1.0.1-1.1.0.php" hash="01e948ea2939f9b0b69bb6748adc53f2"/><file name="mysql4-upgrade-1.1.0-1.2.0.php" hash="84cf1a359fc5a5600e1d98ba0089d911"/></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="securesubmit"><file name="admin-checkout.js" hash="14d970828f50bb463dc3f7cdaca97e1d"/><file name="checkout-form.js" hash="4d4f592d25777836470814519d6e00b3"/><dir name="masterpass"><file name="lightbox.js" hash="b534647c7c06b5ce90caf4cdd6166f91"/></dir><dir name="paypal"><file name="incontext.js" hash="e3810f12033fa9822db756a22622f799"/></dir><file name="secure.submit-1.0.1.js" hash="988d59dadbc272b869bc9e56cbd7518e"/></dir></dir></target><target name="magelib"><dir name="SecureSubmit"><file name="Hps.php" hash="aeeb39dae09306051eec2cf455fcb6a8"/><file name="LICENSE.txt" hash="de081f847a769f89be5a1f80862005ba"/><file name="PRIVACY.txt" hash="58cdc5fbbff24a84a838b0174b254f70"/><file name="README.md" hash="8320a396aa5544e61fe2e8f2adb09505"/><file name="index.php" hash="feabe5cc691b088d6ade3e04d6b120fc"/><dir name="src"><dir name="Abstractions"><file name="HpsAltPaymentServiceInterface.php" hash="bbbacdf42b798458ca46921b3ddb9eaf"/><file name="HpsBuilderAbstract.php" hash="6498e7b7e00716574a9dd238d1d7da5e"/><file name="HpsConfigInterface.php" hash="6541819ca5724269db6e1a9ed456d52e"/><file name="HpsGatewayServiceAbstract.php" hash="6e6631e0cfea0001a6fff4bf57d13068"/><file name="HpsGatewayServiceInterface.php" hash="c2b49802b328648d8510433b5c82f71f"/><file name="HpsPayPlanResourceAbstract.php" hash="df262df6345c4932626e60afecdeb478"/><file name="HpsPayPlanResourceInterface.php" hash="22dd33e354f46218d2872eab956d57c1"/></dir><dir name="Entities"><dir name="AltPayment"><file name="HpsAltPaymentAddToBatch.php" hash="1684714c0cd14d6d33288a44f43c9dd6"/><file name="HpsAltPaymentAuth.php" hash="4f2748e2b95cffed6bd0e62f75af71eb"/><file name="HpsAltPaymentCapture.php" hash="51a86062c15c6f8de15147b5b53f89a4"/><file name="HpsAltPaymentCreateSession.php" hash="4e83acd11a03e7dfcf904f2421d858b3"/><file name="HpsAltPaymentResponse.php" hash="860336d2015560f889c41773574b97ab"/><file name="HpsAltPaymentReturn.php" hash="0b9d8cb0f67ddf113b99ca64ab6019a3"/><file name="HpsAltPaymentSale.php" hash="f390a9a4af50f7a8a863c607f7e3357f"/><file name="HpsAltPaymentSessionInfo.php" hash="a5fdaea50db9f15eb762f4ca3512cae4"/><file name="HpsAltPaymentVoid.php" hash="429f0fbec31ae4842c494b0a8af47ddb"/><file name="HpsBuyerData.php" hash="4fd94d96a547378d2974fa386c89223f"/><file name="HpsCardinalMPIAddOrderNumberResponse.php" hash="a2f2c09eb9e7020e7af97819fe065dc3"/><file name="HpsCardinalMPIAuthenticateResponse.php" hash="6868b0bc55d8e3409684e795d1db92fc"/><file name="HpsCardinalMPIAuthorizeResponse.php" hash="566a64988246220b00da62078ae32068"/><file name="HpsCardinalMPIAuthresponseResponse.php" hash="a53fb4863feb909ccb0d2f2cc254562f"/><file name="HpsCardinalMPICaptureResponse.php" hash="29de876ce9bc632016fceab91dca22ac"/><file name="HpsCardinalMPILookupResponse.php" hash="7171aff90865b67db79559f7b2f579ba"/><file name="HpsCardinalMPIPreapprovalResponse.php" hash="e9408b385ca4f32de5f1adf96a36c42d"/><file name="HpsCardinalMPIRefundResponse.php" hash="71dbbff6f6383a19b0feb91f8771dbe5"/><file name="HpsCardinalMPIResponse.php" hash="d3729129967b1da049287e200e4d46e2"/><file name="HpsCardinalMPIVoidResponse.php" hash="2796de53634fccca806a4a4143779f81"/><file name="HpsLineItem.php" hash="4ff06a280975312365cf10a730636682"/><file name="HpsOrderData.php" hash="5d3ae0110d44f4786d4398861735a259"/><file name="HpsPaymentData.php" hash="2bd9ddc10ecdaebdbb5bf0e3cf71f642"/><file name="HpsShippingInfo.php" hash="63b621ebba4ae1711aca57073b0abec7"/></dir><dir name="Batch"><file name="HpsBatch.php" hash="d9af4664e64172cb8edaeaa1ea7c7337"/></dir><dir name="Check"><file name="HpsCheck.php" hash="8fb85bd4d608e72a9690285ec46fa6d2"/><file name="HpsCheckHolder.php" hash="58f865b34faf2790fef26066de775a15"/><file name="HpsCheckResponse.php" hash="ff3c752bc85554424e62ed7efbc053f2"/><file name="HpsCheckResponseDetails.php" hash="28928ceb2dea574603a376aed1691a90"/></dir><dir name="Credit"><file name="HpsAccountVerify.php" hash="527a69e5a39153b764e6c14e0d98bf34"/><file name="HpsAuthorization.php" hash="7ec1bbfa6efa5bc48432b5de81eda314"/><file name="HpsCPCData.php" hash="f246c4aa1eec482ba84966c563aeb970"/><file name="HpsCPCEdit.php" hash="f04b0089485ba9e7eacba8e15815ec97"/><file name="HpsCardHolder.php" hash="ffee4609a3ffa886a386a12dea3f4508"/><file name="HpsCharge.php" hash="512fb9e459b336a9e256d8f1e08e36b9"/><file name="HpsChargeExceptions.php" hash="c7df102696a205a4c5689c48878ac5f3"/><file name="HpsCreditCard.php" hash="6aa3d449b0648997c4c532c1e3603cbb"/><file name="HpsOfflineAuthorization.php" hash="6f11736d36cfde0d9d79c94e92f60c8b"/><file name="HpsRecurringBilling.php" hash="9da8f9b16179729b77615f04993b05bf"/><file name="HpsRefund.php" hash="aa4664916ebb94b8f2066fd7c17b0fd4"/><file name="HpsReportTransactionDetails.php" hash="014672dc58e5680f57f5d6cb8b0f8ee6"/><file name="HpsReportTransactionSummary.php" hash="441b01c652db42213264980e6f693b40"/><file name="HpsReversal.php" hash="350191a2d38189ef8e098ed1f922c1d3"/><file name="HpsVoid.php" hash="bf6216cea2f130789a045fc226c54cd0"/></dir><dir name="Debit"><file name="HpsDebitAddValue.php" hash="9053c701093889f864dd36af208f4f71"/><file name="HpsDebitReturn.php" hash="519cb73c6fc4ce716453d5ff94f437a0"/><file name="HpsDebitReversal.php" hash="223f6db72f0219ef25eb0f0adec4e9be"/><file name="HpsDebitSale.php" hash="74fa1e1425cfe6294146c879a4049aa8"/></dir><dir name="Fluent"><file name="HpsBuilderAction.php" hash="8649cc2c53fd961f350070193fedb5c6"/><file name="HpsUnknownPropertyException.php" hash="d019e8645fae6f984ad7b7ea3cebb546"/></dir><dir name="Gift"><file name="HpsGiftCard.php" hash="c8bad2a5336689e3192ea223a97760bf"/><file name="HpsGiftCardActivate.php" hash="097ac7c36cae11b8c40a3f1414518e49"/><file name="HpsGiftCardAddValue.php" hash="131a9d7cbc711a4e3e85c66049028f30"/><file name="HpsGiftCardAlias.php" hash="133d2d4701c5aa88fa0eece6ee69de06"/><file name="HpsGiftCardBalance.php" hash="9b9fe395d218c79c55faf28fd736b431"/><file name="HpsGiftCardDeactivate.php" hash="323ca5a67c6ff0169925192952881db5"/><file name="HpsGiftCardReplace.php" hash="f122a7d924a56fcc406bc8b1c82ac2b2"/><file name="HpsGiftCardReversal.php" hash="88ba755e52f41311206add4fa8ee5e09"/><file name="HpsGiftCardReward.php" hash="f758e8c5462d336236ae0d257789cdaf"/><file name="HpsGiftCardSale.php" hash="0f758ef6653215be643abaea4964352a"/><file name="HpsGiftCardVoid.php" hash="f0294740f5b7f545167d5fb258f4dcdd"/></dir><file name="HpsAddress.php" hash="fcc67451ff9f1c483e2943cf6ee5c5fe"/><file name="HpsConsumer.php" hash="1254142dfa0821cbb0bf154cf51f34d2"/><file name="HpsDirectMarketData.php" hash="1925c204d19cb9233ec8178e3b5cdc50"/><file name="HpsEncryptionData.php" hash="1e4845abc6c42e8f0265e2679b05efb6"/><file name="HpsTokenData.php" hash="18ab9125315bb8e5f9cb272966dac22b"/><file name="HpsTrackData.php" hash="4656f37b7c4c777d0c63b4102efe5a1a"/><file name="HpsTransaction.php" hash="f109d2d26ba237afb2dc17bc287f63a9"/><file name="HpsTransactionDetails.php" hash="4e77261d0aced118b49e26ef786beace"/><file name="HpsTransactionHeader.php" hash="ebd21539f84425f0e2fc57c6049a26a1"/><file name="HpsTransactionStatus.php" hash="a5a67f8fe3780f66b045cc4314660dc5"/><dir name="PayPlan"><file name="HpsPayPlanAmount.php" hash="25706476e264124567d704f981745b13"/><file name="HpsPayPlanCustomer.php" hash="2714a7525fb3830fc018544ea0622ab5"/><file name="HpsPayPlanPaymentMethod.php" hash="fd3077d63e6f31c2d8a4c60c78a678ea"/><file name="HpsPayPlanSchedule.php" hash="4c9fe8bd7db0810fd108e51b81bdf590"/></dir><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/><file name=".DS_Store" hash="92d42bd310aa7f6dd74d14e6cdd2b9e9"/></dir><dir name="Infrastructure"><dir name="Enums"><file name="HpsACHType.php" hash="1ff5593689a404cb0179c2b5cb5fe19e"/><file name="HpsAccountType.php" hash="760d91e120f443c326e6c7586aa61092"/><file name="HpsCardBrand.php" hash="9532bb7c40811c114a1eeeffa8b9732c"/><file name="HpsCentinelCheckoutType.php" hash="7370920cb980bbfc54c741a981cd79bb"/><file name="HpsCheckType.php" hash="d60c676d93c8ada169deb14ddc8e64e7"/><file name="HpsDataEntryMode.php" hash="c323d884a7a305f9af647ea1d9a4177e"/><file name="HpsExceptionCodes.php" hash="95322648a2093ed3982c6bb724f3507a"/><file name="HpsGiftCardAliasAction.php" hash="ebcb27c6fb800e17693ed4af2e8a8943"/><file name="HpsItemChoiceTypePosResponseVer10Transaction.php" hash="686225a07738db2233a2228bec6baabf"/><file name="HpsPayPlanAccountType.php" hash="4d383c42a990fb077fae49386c08b870"/><file name="HpsPayPlanCustomerStatus.php" hash="3ff092e8dd97f2a2474fb64103cb238f"/><file name="HpsPayPlanPaymentMethodStatus.php" hash="b020c52de7987ed3011cb97e4d440c6a"/><file name="HpsPayPlanPaymentMethodType.php" hash="1f77c5c8528815f05803c1381cb4151a"/><file name="HpsPayPlanScheduleDuration.php" hash="05101e6fe3b725b43917b59770f2dbb1"/><file name="HpsPayPlanScheduleFrequency.php" hash="0b3f029c64315ee9c8701d23319941c1"/><file name="HpsPayPlanScheduleStatus.php" hash="3579b52ccf36e576fd2dfb36118716f6"/><file name="HpsSECCode.php" hash="551661613c127c068f139083338b92d1"/><file name="HpsTaxType.php" hash="ba0e05330880810e58370f2f3490ca81"/><file name="HpsTrackDataMethod.php" hash="446069e9786f9585c3490140b29ae52f"/><file name="HpsTransactionType.php" hash="a38b3f4c654a4fa3b2c2d64b8afacf24"/></dir><file name="HpsApiConnectionException.php" hash="ac5a8064a7c2a1616035a5702f36cd50"/><file name="HpsArgumentException.php" hash="855c43e88fc24b582cfe56875d7cff42"/><file name="HpsAuthenticationException.php" hash="6feb2fdc5499b460274524aa469d9a7d"/><file name="HpsCheckException.php" hash="94870f2438217b3275d05fb943a0a8c0"/><file name="HpsConfiguration.php" hash="010996727d89c485c1d11463e5c53a8e"/><file name="HpsCreditException.php" hash="a16bf1ecd6a2c866b7b40351aab3df34"/><file name="HpsCreditExceptionDetails.php" hash="d71c54b2846283a8f97aae74a747dfd9"/><file name="HpsException.php" hash="8d2025b7fae9f0f756341b876a0dab41"/><file name="HpsGatewayException.php" hash="cdd6db6c8436e3e78ee15cdd7a043a9d"/><file name="HpsGatewayExceptionDetails.php" hash="16dd36360e2237ca89e056c61766bcdd"/><file name="HpsInvalidRequestException.php" hash="7877e48463ef3f488bb92423ae445412"/><file name="HpsProcessorError.php" hash="ff7f1f2c5327417b4997f9e36fa7c887"/><file name="HpsProcessorException.php" hash="ba28a92f0e551053506dcc391c5bc431"/><file name="HpsProcessorExceptionDetails.php" hash="6a569aacf045c19ade6472a857a3a274"/><dir name="Validation"><file name="HpsGatewayResponseValidation.php" hash="06fb818263b18b58974a569d0c986667"/><file name="HpsInputValidation.php" hash="1f51837f70c322f2a7c1cc39df752b1a"/><file name="HpsIssuerResponseValidation.php" hash="613377f8ca249df078c909e4d7674bfb"/><file name="HpsProcessorResponseValidation.php" hash="ff19a569f8bdd6ef7b58a460cf06b4e8"/></dir><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/></dir><dir name="Services"><dir name="Fluent"><dir name="Gateway"><dir name="Check"><file name="HpsCheckServiceOverrideBuilder.php" hash="5b4a49a897f87d2a332182a1ccd67d0c"/><file name="HpsCheckServiceRecurringBuilder.php" hash="c86a2fd5165a65c78e38e3bbb1b9636c"/><file name="HpsCheckServiceReturnBuilder.php" hash="5ce46356468714f65ad827e1593977cc"/><file name="HpsCheckServiceSaleBuilder.php" hash="b823e74642e165772f5cb03beffacce7"/><file name="HpsCheckServiceVoidBuilder.php" hash="17305b04474285a8b64007c549180ba5"/></dir><dir name="Credit"><file name="HpsCreditServiceAuthorizeBuilder.php" hash="51997a17ee9a1aaacd40d9d2c8d69c17"/><file name="HpsCreditServiceCaptureBuilder.php" hash="fd6512f3b72f9051eaf7c3daeff2cb48"/><file name="HpsCreditServiceChargeBuilder.php" hash="3421b227fe594f0cb1533b4496c805bd"/><file name="HpsCreditServiceCpcEditBuilder.php" hash="7401c33a56c5a3c6a23f5f70101a4926"/><file name="HpsCreditServiceEditBuilder.php" hash="cdcf661c4182625212ec724b52eb8491"/><file name="HpsCreditServiceGetBuilder.php" hash="05b0cafe715a4d3ceb3c88b99b0c8dc1"/><file name="HpsCreditServiceListTransactionsBuilder.php" hash="a7765dfadc8e21177cc453a1e7dfd715"/><file name="HpsCreditServiceOfflineAuthBuilder.php" hash="d86d2425c6bbf28854a31d09a9f802b8"/><file name="HpsCreditServiceOfflineChargeBuilder.php" hash="0ee9ecf6b499a16f01fa2a7b94af00ca"/><file name="HpsCreditServicePrepaidAddValueBuilder.php" hash="997b48104fcdbd791a3b990515f2527e"/><file name="HpsCreditServicePrepaidBalanceInquiryBuilder.php" hash="7e7dd067d79281c32417b6d338825acd"/><file name="HpsCreditServiceRecurringBuilder.php" hash="560c8b86eeb9e4e468642eaa739ebe03"/><file name="HpsCreditServiceRefundBuilder.php" hash="4d5ab9c2a11c18a47e416bd90dffc5e8"/><file name="HpsCreditServiceReverseBuilder.php" hash="7960e9efa00ceb0d0c5368715c07d424"/><file name="HpsCreditServiceVerifyBuilder.php" hash="62027b344ee5444ccd1534358a405857"/><file name="HpsCreditServiceVoidBuilder.php" hash="0029756571343a1d8c6380874f6f5b6b"/></dir><dir name="Debit"><file name="HpsDebitServiceAddValueBuilder.php" hash="5f972b68a5afa062cbf911bfb3a946bc"/><file name="HpsDebitServiceChargeBuilder.php" hash="26aafce2a87bbbd8231a039209c49657"/><file name="HpsDebitServiceReturnBuilder.php" hash="2e11267e12bdd338b953db352a373961"/><file name="HpsDebitServiceReverseBuilder.php" hash="b088431d3ba0726d44cc418e92267958"/></dir><dir name="GiftCard"><file name="HpsGiftCardServiceActivateBuilder.php" hash="65e3ebd1c6ded3860b238d03e542fe3b"/><file name="HpsGiftCardServiceAddValueBuilder.php" hash="432582c9fd6617c86b373f5fe0b14fb1"/><file name="HpsGiftCardServiceAliasBuilder.php" hash="1b096debfa6678af2d6ddecfa82a638e"/><file name="HpsGiftCardServiceBalanceBuilder.php" hash="6bebaac04d059204a2408d693f77c449"/><file name="HpsGiftCardServiceDeactivateBuilder.php" hash="92b16b331414c40ea11de330bd447273"/><file name="HpsGiftCardServiceReplaceBuilder.php" hash="063e6b33a673c23553047a6f72927b2a"/><file name="HpsGiftCardServiceReverseBuilder.php" hash="2f7b96b1f9608cb7e3526ecb9b15558f"/><file name="HpsGiftCardServiceRewardBuilder.php" hash="242fbe42ab731b138e4d74be4cde4e9a"/><file name="HpsGiftCardServiceSaleBuilder.php" hash="8af2977da26e3707e42569ad7bf4c4a5"/><file name="HpsGiftCardServiceVoidBuilder.php" hash="fff556a586bb09d22f521a90d30fb809"/></dir><file name="HpsFluentCheckService.php" hash="e89511e006e914bdd4daf6765a49e97b"/><file name="HpsFluentCreditService.php" hash="58e0d0480066fec8c5c6e31eaa275d12"/><file name="HpsFluentDebitService.php" hash="63e86fe32a92c80cc5bd163283da6c64"/><file name="HpsFluentGiftCardService.php" hash="53697a755fc90256b940c74282693b0d"/></dir></dir><dir name="Gateway"><dir name="AltPayment"><file name="HpsAltPaymentService.php" hash="3d9cdbad50ccceb45d4d888018d2bab7"/><file name="HpsMasterPassService.php" hash="f5639448d09a38377f16434351201b09"/><file name="HpsPayPalService.php" hash="c91eebb0eca8bdda2505b78c4746db28"/></dir><file name="HpsBatchService.php" hash="2a4c11a4f7c78ec1e3b461b3803826c5"/><file name="HpsCentinelGatewayService.php" hash="40300a57982ccd5325b7bd0986a8bcc4"/><file name="HpsCheckService.php" hash="17eac57a5f3a6f24e31000325ad9ac1d"/><file name="HpsCreditService.php" hash="f7baf1cf04cd6024039ad90284f08db9"/><file name="HpsDebitService.php" hash="0ea76c01b3c817fcaea876bff28681b3"/><file name="HpsGiftCardService.php" hash="e1deb113c685845e2af2bb0ff793ea4d"/><file name="HpsPayPlanService.php" hash="ce5d2c003e72be8328634d92ab8ae6eb"/><file name="HpsRestGatewayService.php" hash="3a0b4217eb4e9d8c92d298914e539a04"/><file name="HpsSoapGatewayService.php" hash="87322fe8f0c193528c6ded0b02d9f784"/><file name="HpsTokenService.php" hash="b1dad4289201b399f89ad1d29a799d39"/><dir name="PayPlan"><file name="HpsPayPlanCustomerService.php" hash="cda074fca2230c26919a813cc2d71b5c"/><file name="HpsPayPlanPaymentMethodService.php" hash="61dd42308d203251f4483d68561c191b"/><file name="HpsPayPlanScheduleService.php" hash="e8c81640a7440a19ed3590894a31a1f1"/></dir></dir><file name="HpsCentinelConfig.php" hash="f43f7ea211a51883fb8a2173072027a8"/><file name="HpsServicesConfig.php" hash="f3d63dc7d089a8bcd248e4abc381e6a7"/><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/></dir><file name="index.php" hash="ce407ff5715c837d02b1aba7975bf512"/><file name=".DS_Store" hash="fb4d06cbd65ab29860d86984919afa4a"/></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="securesubmit.xml" hash="cc04e952cc17ea3462931a9e7a655316"/></dir><dir name="template"><dir name="securesubmit"><file name="form.phtml" hash="67a460ca8f034f4bfe3fbb8e7845f37f"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="securesubmit.xml" hash="410fda5ef3920f893f5a17ec379aa2da"/></dir><dir name="template"><dir name="securesubmit"><file name="form.phtml" hash="8e758ba36b58194a554e3cf3e274fe6e"/><dir name="masterpass"><file name="connect.phtml" hash="b5f47624447a44958ce4fa004c58c319"/><file name="form.phtml" hash="039d6a174ac24c45ece0d14b92b6c9c4"/><file name="js.phtml" hash="274e871b2d8270e3224b9ce12794c2c5"/><file name="mark.phtml" hash="fe27b341b5fb034e90ac35c92ef998d4"/><dir name="review"><file name="details.phtml" hash="0dc5e1201e7e424f089c15fc83a1c70f"/><dir name="shipping"><file name="method.phtml" hash="cc426553636aa08840bee1c4778d89e4"/></dir></dir><file name="review.phtml" hash="cfc643de65b962ba27306587357f45d3"/></dir><dir name="paypal"><dir name="incontext"><file name="js.phtml" hash="16b4ad23ea05464a55bb0390cd72e248"/><file name="payment.phtml" hash="b32d269057984f656422609015dd7d91"/></dir><dir name="review"><file name="details.phtml" hash="0dc5e1201e7e424f089c15fc83a1c70f"/><dir name="shipping"><file name="method.phtml" hash="cc426553636aa08840bee1c4778d89e4"/></dir></dir><file name="review.phtml" hash="cfc643de65b962ba27306587357f45d3"/><file name="shortcut.phtml" hash="268bfac86e653ec5981cd201075f4105"/></dir><file name="storedcards.phtml" hash="2b599d437b60bab2e43efc1809892da0"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Hps_Securesubmit.xml" hash="d5aed3f48a45f8e611b68d1e6f34c959"/></dir></target></contents>
26
  <compatible/>
27
+ <dependencies><required><php><min>5.2.0</min><max>5.6.24</max></php></required></dependencies>
28
  </package>