BBSNetAxept_Norway - Version 2.2.0

Version Notes


  • Direct payment for Sverige.

  • Gavekoret.

  • Mobil tilpasset versjon.

Download this release

Release Info

Developer Roy Andre Tollefsen
Extension BBSNetAxept_Norway
Version 2.2.0
Comparing to
See all releases


Code changes from version 1.6.4 to 2.2.0

Files changed (27) hide show
  1. app/code/community/Trollweb/BBSNetAxept/Block/Form.php +6 -6
  2. app/code/community/Trollweb/BBSNetAxept/Block/PaymentInfo.php +5 -0
  3. app/code/community/Trollweb/BBSNetAxept/Block/Redirect.php +13 -42
  4. app/code/community/Trollweb/BBSNetAxept/Model/Api/Bbs.php +449 -228
  5. app/code/community/Trollweb/BBSNetAxept/Model/Api/BbsRequest.php +62 -35
  6. app/code/community/Trollweb/BBSNetAxept/Model/Api/SoapClient.php +26 -12
  7. app/code/community/Trollweb/BBSNetAxept/Model/Cron.php +16 -15
  8. app/code/community/Trollweb/BBSNetAxept/Model/Info.php +94 -69
  9. app/code/community/Trollweb/BBSNetAxept/Model/Observer.php +45 -0
  10. app/code/community/Trollweb/BBSNetAxept/Model/Updates.php +176 -0
  11. app/code/community/Trollweb/BBSNetAxept/Model/WithGUI.php +947 -293
  12. app/code/community/Trollweb/BBSNetAxept/controllers/ReturnController.php +41 -14
  13. app/code/community/Trollweb/BBSNetAxept/etc/config.xml +104 -56
  14. app/code/community/Trollweb/BBSNetAxept/etc/system.xml +203 -97
  15. app/code/community/Trollweb/BBSNetAxept/{Model/BBSNetterminal/Result.php → sql/bbsnetaxept_setup/mysql4-upgrade-1.9.9-2.0.0.php} +28 -23
  16. app/design/adminhtml/default/default/template/bbsnetaxept/form.phtml +1 -1
  17. app/design/adminhtml/default/default/template/bbsnetaxept/paymentinfo.phtml +3 -0
  18. app/design/frontend/base/default/layout/bbsnetaxept.xml +17 -0
  19. app/design/frontend/base/default/template/bbsnetaxept/form.phtml +18 -10
  20. app/design/frontend/base/default/template/bbsnetaxept/paymentinfo.phtml +4 -2
  21. app/locale/nb_NO/Trollweb_BBSNetaxept.csv +3 -3
  22. js/bbsnetaxept/modernizr_touch.js +4 -0
  23. package.xml +5 -19
  24. skin/frontend/base/default/images/bbsnetaxept/dancard.png +0 -0
  25. skin/frontend/base/default/images/bbsnetaxept/logo.png +0 -0
  26. skin/frontend/base/default/images/bbsnetaxept/nets-payment.png +0 -0
  27. skin/frontend/base/default/images/bbsnetaxept/technology_logo.png +0 -0
app/code/community/Trollweb/BBSNetAxept/Block/Form.php CHANGED
@@ -3,18 +3,18 @@
3
  * BBS NetAxept, Norge
4
  *
5
  * LICENSE AND USAGE INFORMATION
6
- * It is NOT allowed to modify, copy or re-sell this file or any
7
- * part of it. Please contact us by email at post@trollweb.no or
8
  * visit us at www.trollweb.no/bbs if you have any questions about this.
9
  * Trollweb is not responsible for any problems caused by this file.
10
  *
11
  * Visit us at http://www.trollweb.no today!
12
- *
13
  * @category Trollweb
14
  * @package Trollweb_BBSNetAxept
15
  * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
  * @license Single-site License
17
- *
18
  */
19
 
20
  class Trollweb_BBSNetAxept_Block_Form extends Mage_Payment_Block_Form
@@ -24,12 +24,12 @@ class Trollweb_BBSNetAxept_Block_Form extends Mage_Payment_Block_Form
24
  $this->setTemplate('bbsnetaxept/form.phtml');
25
  parent::_construct();
26
  }
27
-
28
  protected function getLogo()
29
  {
30
  return $this->getMethod()->getLogoUrl();
31
  }
32
-
33
  protected function getRedirectText()
34
  {
35
  return $this->getMethod()->getRedirectText();
3
  * BBS NetAxept, Norge
4
  *
5
  * LICENSE AND USAGE INFORMATION
6
+ * It is NOT allowed to modify, copy or re-sell this file or any
7
+ * part of it. Please contact us by email at post@trollweb.no or
8
  * visit us at www.trollweb.no/bbs if you have any questions about this.
9
  * Trollweb is not responsible for any problems caused by this file.
10
  *
11
  * Visit us at http://www.trollweb.no today!
12
+ *
13
  * @category Trollweb
14
  * @package Trollweb_BBSNetAxept
15
  * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
  * @license Single-site License
17
+ *
18
  */
19
 
20
  class Trollweb_BBSNetAxept_Block_Form extends Mage_Payment_Block_Form
24
  $this->setTemplate('bbsnetaxept/form.phtml');
25
  parent::_construct();
26
  }
27
+
28
  protected function getLogo()
29
  {
30
  return $this->getMethod()->getLogoUrl();
31
  }
32
+
33
  protected function getRedirectText()
34
  {
35
  return $this->getMethod()->getRedirectText();
app/code/community/Trollweb/BBSNetAxept/Block/PaymentInfo.php CHANGED
@@ -30,6 +30,11 @@ class Trollweb_BBSNetAxept_Block_PaymentInfo extends Mage_Payment_Block_Info
30
  return $this->getMethod()->getLogoUrl();
31
  }
32
 
 
 
 
 
 
33
  protected function _prepareSpecificInformation($transport = null)
34
  {
35
  $transport = parent::_prepareSpecificInformation($transport);
30
  return $this->getMethod()->getLogoUrl();
31
  }
32
 
33
+ public function isMobileDevice()
34
+ {
35
+ return $this->getInfo()->getAdditionalInformation(Trollweb_BBSNetAxept_Model_WithGUI::MOBILE_CLIENT);
36
+ }
37
+
38
  protected function _prepareSpecificInformation($transport = null)
39
  {
40
  $transport = parent::_prepareSpecificInformation($transport);
app/code/community/Trollweb/BBSNetAxept/Block/Redirect.php CHANGED
@@ -22,49 +22,20 @@ class Trollweb_BBSNetAxept_Block_Redirect extends Mage_Core_Block_Abstract
22
  protected function _toHtml()
23
  {
24
 
25
- $standard = Mage::getModel('bbsnetaxept/withGUI');
26
-
27
- $bbsTransKey = $standard->getBBSTransKey();
28
-
29
- if (!$bbsTransKey) {
30
- Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
31
- return false;
32
- }
33
-
34
- $form = new Varien_Data_Form();
35
- $form->setAction($standard->getBBSUrl())
36
- ->setId('BBS_WithGUI_checkout')
37
- ->setName('BBS_WithGUI_checkout')
38
- ->setMethod('POST')
39
- ->setUseContainer(true);
40
 
41
-
42
- if ($standard->useInternalGUI()) {
43
- $ccInfo = $standard->getCheckout()->getCardInfo();
44
- if (!($ccInfo instanceof Varien_Object)) {
45
- $ccInfo = new Varien_Object($ccInfo);
46
- }
47
-
48
- switch ($ccInfo->getCcType()) {
49
- case 'VI': $prefix = 'v'; break;
50
- case 'MC': $prefix = 'm'; break;
51
- case 'AE': $prefix = 'a'; break;
52
- case 'DI': $prefix = 'd'; break;
53
- default: $prefix = 'v'; break;
54
- }
55
-
56
- $form->addField($prefix.'a','hidden', array('name' => $prefix.'a', "value" => $ccInfo->getCcNumber()));
57
- $form->addField($prefix.'m','hidden', array('name' => $prefix.'m', "value" => sprintf("%02u",(int)$ccInfo->getCcExpMonth())));
58
- $form->addField($prefix.'y','hidden', array('name' => $prefix.'y', "value" => substr($ccInfo->getCcExpYear(),-2)));
59
- $form->addField($prefix.'c','hidden', array('name' => $prefix.'c', "value" => $ccInfo->getCcCid()));
60
- }
61
-
62
- $form->addField('BBSePay_transaction','hidden', array("name"=>'BBSePay_transaction', "value"=>$bbsTransKey));
63
- $html = '<html><body>';
64
- $html.= $this->__('You will be redirected to BBS NetAxept in a few seconds.');
65
- $html.= $form->toHtml();
66
- $html.= '<script type="text/javascript">document.getElementById("BBS_WithGUI_checkout").submit();</script>';
67
- $html.= '</body></html>';
68
 
69
  return $html;
70
  }
22
  protected function _toHtml()
23
  {
24
 
25
+ $url = $this->getNetsUrl();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
+ $html = '<html>';
28
+ $html .= '<head>';
29
+ $html .= '<title>'.$this->getNetsMessage().'</title>';
30
+ $html .= '</head>';
31
+ $html .= '<body>';
32
+ $html .= $this->getNetsMessage().'<br />';
33
+ $html .= '<a href="'.$url.'">'.$this->__('Click here if you are not redirected within 10 seconds.').'</a>';
34
+ $html .= '<script type="text/javascript">';
35
+ $html .= ' setTimeout(function(){ window.location="'.$url.'"; },100);';
36
+ $html .= '</script>';
37
+ $html .= '</body>';
38
+ $html .= '</html>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
 
40
  return $html;
41
  }
app/code/community/Trollweb/BBSNetAxept/Model/Api/Bbs.php CHANGED
@@ -1,228 +1,449 @@
1
- <?php //003ab
2
- if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');@dl($__ln);if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the site administrator.');exit(199);
3
- ?>
4
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- E0VxbFDEK+1qqPPBWDNj8WMnSR1xjsjdkWVjhBG7GgJJUK5XoH8HZfX3GSUMM6kkvBXAUJNHOX4l
16
- 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
- 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
- 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
- VJNUOF4ab13TfqxlR9Sq1wMXXQ6jFfp3eBVky8qTEPpWgC1Z3u7wkmOmiW9Ta6WOgCtM4MQvzSrr
20
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- UrJM1H14dUp7AhBLGcNa2/IEinzPON99ybNvTNz09DtcwcnE7lfVMwENW2HYtAADelOSmBsfbnvN
35
- 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
- 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
- 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
- sgzzLDGWNAMSsukf56QSf2Jplz4P2XfkkxVHKjzDr8JdvPXc3IhdqQYSTVPosEzogNEq8NwHrlrE
39
- 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
- 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
- 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
- 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
- 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
- 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
- dOlqljssbBeGOhmJYOzkgDwbFnyLyCZ0KVo2E47sx530RHuSeUS2MGg7kBYNECcfc07+AqBtQD7T
46
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- wjghmDF8iffswOYuNCgP7waN5EL3g2TrmpkXZ8HVTVr7e1YwTTS+LFX7glr6cXZ4BAFecWzJunDj
55
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ey8KWIAbb83xPIkVSNbHACWRS8Fx14p58ooAYR1kxGF1I3fUjEKS0ww8NcoRCAbU1+TUWYRWBXwK
65
- 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
- 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
- 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
- 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
- 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
- 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
- Jx4Nn7lIRavWH2s44ORsJahS1hPo6FcCi/wk5ndKHlFgle9DlmwBeL/1hhUKXiKLBVQiGCjeEirl
72
- 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
- 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
- th2PNho1E8MxupM2ToZUNQNDHyNR7dflJinEv4lXXxmkT5lv0lg2OLDNpDH3PbzKlgDcEIQ4ALRE
75
- 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
- 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
- rFxpHut64z1ifVvixAT/uo2ShxybSgIVPyRfuGtMRYlJA9bnUDj6EK4HTBcenb8GiiU+pDhEiUHa
78
- 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
- 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
- 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
- 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
- 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
- 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
- Y1pRju8iAs+xoPavoWiWRFms6unV9b9ytbMQfju18hWwQdHg1b7Qj4+PPZBd77VA98mubphA/PNb
85
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- RwfeWwhe//rFlhvTzdPLHDFajKF/cJrVMpA4DJMtrmNF/ZjKcXn5v94f+ZlDE8F2NdKLCicfomR0
98
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 6SLNu8cUZImo2eHpRMjEQP6c+imCJYSDBgdFc0KQ4pNeUxMR7/7shZaFBLeC0cnqCx5Y0anHuzuU
131
- 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
- qMzyTE52EXT/DExXlBCOHFFpGLZ0kjavpk/Mf+i7WlO+Y5ai0dfniA8nMj5oYCTTQTcf4QizzeOY
133
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- xwRDysGXudjJz9o2JE7soctn9Xmi+ITTa9Yyf7tZOugPtrrbZAMAAGKY43jZiYdqaL7vLWRN45K6
145
- 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
- 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
- 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
- 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
- gtgEXJxbdcYCOxSw+BRSZFBP6ibJsFt7dxQfrhIayA+dsY1PAl+5bmOO1O36h8b3B7xG11JQYnyw
150
- 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
- mOSZXc5ZXmCTD9A5mgEHrSimKFMTN9aLjBDeMR8zwb0/10qc07of5LRLLP76CqvRQW0i8HPyV764
152
- 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
- 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
- 22vJB2YaV6e+/uTHB0MROKEobvNg4faf+sAJS3zuUXaLmMAfRJFrhxHYvOFb5JItjeNYJPM/tKt5
155
- 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
- 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
- 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
- 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
- msoL/L5bf8IUPyONuvfNZOwdlGAyQxFaLOmX4NzifXWTp2UHMLtIiEcFrZNhyi+4DrlSOy6jb0A+
160
- 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
- 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
- 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
- LlN2JVIBu2DIvfd+TtkPi1c3hxSl9YhzpxNyE6bgXNJv9y3YoiFxLY7ZssxUn9pOiq8AfPg2f6Ik
164
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- yhvHXvV7XESKptr/2qeJpr5SbaR/V+hyaTHgy+B/F/XiTee/cytQiGnu1ZfTqIv6bdPV/enk1boM
173
- 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
- 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
- /kXVjlOClQEzTBnNIju1SYrzdBQT8BX1jPJv8dS6dw3oJIfGKKPr4gLOgO6SUY36Ost9Sj2ao7y2
176
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- wH4IecfzWM1PNbOf1BQwGLf8QT2ThCseHPzCwrxj5kPdorqk2anczjU/rLBi62NORiQ3KYUshMnS
203
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 2i+15foER2JTcMHQ9gxbLEo/izFlxCHw5GAL8tuCs68Y/dg0IFdEObc0d0Nx8Z22McgWWIw2gv88
218
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
228
- 9nxZpQmzZyHRhE4brbNJplIYBiEbIPW+90==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BBS NetAxept, Norge
4
+ *
5
+ * LICENSE AND USAGE INFORMATION
6
+ * It is NOT allowed to modify, copy or re-sell this file or any
7
+ * part of it. Please contact us by email at post@trollweb.no or
8
+ * visit us at www.trollweb.no/bbs if you have any questions about this.
9
+ * Trollweb is not responsible for any problems caused by this file.
10
+ *
11
+ * Visit us at http://www.trollweb.no today!
12
+ *
13
+ * @category Trollweb
14
+ * @package Trollweb_BBSNetAxept
15
+ * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
+ * @license Single-site License
17
+ *
18
+ */
19
+
20
+
21
+ /**
22
+ * BBS Api
23
+ */
24
+ class Trollweb_BBSNetAxept_Model_Api_Bbs extends Varien_Object
25
+ {
26
+
27
+ protected $_result;
28
+
29
+ /**
30
+ * Auth with BBS and return the key.
31
+ *
32
+ * @param none
33
+ * @return array
34
+ */
35
+ public function getTransKey($storeId = null) {
36
+ $result = false;
37
+
38
+ $response = $this->doClientRequest('Register',$this->getRequest($storeId));
39
+ if ($response && isset($response->TransactionId)) {
40
+ $result = (string)$response->TransactionId;
41
+ }
42
+
43
+ if ($this->getError()) {
44
+ $this->doLog('ERROR: [TransKey] '.$this->getErrorMessage());
45
+ }
46
+
47
+ return $result;
48
+ }
49
+
50
+ /**
51
+ * Authorize the request from BBS.
52
+ *
53
+ * @param String $TransactionId
54
+ * @return string|false
55
+ */
56
+ public function auth($TransactionId) {
57
+
58
+ $result = false;
59
+ $params = array(
60
+ 'operation' => 'AUTH',
61
+ 'transactionId' => $TransactionId,
62
+ );
63
+
64
+
65
+ $response = $this->doClientRequest('Process',$params);
66
+
67
+ if ($response) {
68
+ $this->Result()->setResponseCode((string)$response->ResponseCode);
69
+ $this->Result()->setIssuerId((string)$response->IssuerId);
70
+ $this->Result()->setAuthorizationId((string)$response->AuthorizationId);
71
+ $this->Result()->setTransactionId((string)$response->TransactionId);
72
+ $this->Result()->setAuthenticatedWith('');
73
+ $this->Result()->setAuthenticatedStatus('');
74
+
75
+ if (isset($response->ResponseCode) && ($response->ResponseCode == "OK")) {
76
+ $this->query($TransactionId); // Fetch additional information.
77
+
78
+ $result = (string)$response->TransactionId;
79
+ }
80
+ else {
81
+ $this->setError(true);
82
+ $this->setErrorMessage('('.(string)$response->ResponseSource.') '.(string)$response->ResponseText);
83
+ }
84
+ }
85
+
86
+ if ($this->getError()) {
87
+ $this->doLog('ERROR: [Auth] '.$this->getErrorMessage());
88
+ }
89
+
90
+ return $result;
91
+ }
92
+
93
+
94
+ /**
95
+ * Sale transaction to Nets.
96
+ *
97
+ * @param String $TransactionId, [String $description]
98
+ * @return string|false
99
+ */
100
+ public function sale($TransactionId, $description='') {
101
+ $result = false;
102
+ $params = array(
103
+ 'operation' => 'SALE',
104
+ 'transactionId' => $TransactionId,
105
+ 'description' => $description,
106
+ 'transactionReconRef' => $description,
107
+ );
108
+
109
+ $response = $this->doClientRequest('Process',$params);
110
+
111
+ if ($response) {
112
+ $this->Result()->setResponseCode((string)$response->ResponseCode);
113
+ $this->Result()->setAuthorizationId((string)$response->AuthorizationId);
114
+ $this->Result()->setTransactionId((string)$response->TransactionId);
115
+ $this->Result()->setAuthenticatedWith('');
116
+ $this->Result()->setAuthenticatedStatus('');
117
+
118
+ if (isset($response->ResponseCode) && ($response->ResponseCode == "OK")) {
119
+ $this->query($TransactionId); // Fetch additional information.
120
+
121
+ $result = (string)$response->TransactionId;
122
+ }
123
+ else {
124
+ $this->setError(true);
125
+ $this->setErrorMessage('('.(string)$response->ResponseSource.') '.(string)$response->ResponseText);
126
+ }
127
+ }
128
+
129
+ if ($this->getError()) {
130
+ $this->doLog('ERROR: [Sales] '.$this->getErrorMessage());
131
+ }
132
+
133
+ return $result;
134
+ }
135
+
136
+
137
+ /**
138
+ * Capture from Nets.
139
+ *
140
+ * @param String $TransactionId, Integer $amount, [String $description]
141
+ * @return Trollweb_BBSNetAxept_Model_BBSNetterminal_Result
142
+ */
143
+ public function capture($TransactionId, $amount, $description='') {
144
+ $result = false;
145
+ $params = array(
146
+ 'operation' => 'CAPTURE',
147
+ 'transactionId' => $TransactionId,
148
+ 'transactionAmount' => $amount,
149
+ 'description' => $description,
150
+ 'transactionReconRef' => $description,
151
+ );
152
+
153
+ $response = $this->doClientRequest('Process',$params);
154
+
155
+ if ($response) {
156
+ $this->Result()->setResponseCode((string)$response->ResponseCode);
157
+ $this->Result()->setIssuerId((string)$response->IssuerId);
158
+ $this->Result()->setAuthorizationId((string)$response->AuthorizationId);
159
+ $this->Result()->setTransactionId((string)$response->TransactionId);
160
+ $this->Result()->setAuthenticatedWith('');
161
+ $this->Result()->setAuthenticatedStatus('');
162
+
163
+ if (isset($response->ResponseCode) && ($response->ResponseCode == "OK")) {
164
+
165
+ $result = true;
166
+ }
167
+ else {
168
+ $this->setError(true);
169
+ $this->setErrorMessage('('.(string)$response->ResponseSource.') '.(string)$response->ResponseText);
170
+ }
171
+ }
172
+
173
+ if ($this->getError()) {
174
+ $this->doLog('ERROR: [Capture] '.$this->getErrorMessage());
175
+ }
176
+
177
+ return $result;
178
+ }
179
+
180
+ /**
181
+ * Refund with BBS.
182
+ *
183
+ * @param String $TransactionId, Integer $amount, [String $description]
184
+ * @return Trollweb_BBSNetAxept_Model_BBSNetterminal_Result
185
+ */
186
+ public function refund($TransactionId, $amount, $description='') {
187
+
188
+ $result = false;
189
+ $params = array(
190
+ 'operation' => 'CREDIT',
191
+ 'transactionId' => $TransactionId,
192
+ 'transactionAmount' => $amount,
193
+ 'description' => $description,
194
+ 'transactionReconRef' => $description,
195
+ );
196
+
197
+ $response = $this->doClientRequest('Process',$params);
198
+
199
+ if ($response) {
200
+ $this->Result()->setResponseCode((string)$response->ResponseCode);
201
+ $this->Result()->setIssuerId((string)$response->IssuerId);
202
+ $this->Result()->setAuthorizationId((string)$response->AuthorizationId);
203
+ $this->Result()->setTransactionId((string)$response->TransactionId);
204
+ $this->Result()->setAuthenticatedWith('');
205
+ $this->Result()->setAuthenticatedStatus('');
206
+
207
+ if (isset($response->ResponseCode) && ($response->ResponseCode == "OK")) {
208
+
209
+ $result = (string)$response->TransactionId;
210
+ }
211
+ else {
212
+ $this->setError(true);
213
+ $this->setErrorMessage('('.(string)$response->ResponseSource.') '.(string)$response->ResponseText);
214
+ }
215
+ }
216
+
217
+ if ($this->getError()) {
218
+ $this->doLog('ERROR: [Refund] '.$this->getErrorMessage());
219
+ }
220
+
221
+ return $result;
222
+ }
223
+
224
+ /**
225
+ * Void on BBS.
226
+ *
227
+ * @param String $TransactionId, [String $description]
228
+ * @return Trollweb_BBSNetAxept_Model_BBSNetterminal_Result
229
+ */
230
+ public function void($TransactionId, $description='') {
231
+
232
+ $result = false;
233
+ $params = array(
234
+ 'operation' => 'ANNUL',
235
+ 'transactionId' => $TransactionId,
236
+ );
237
+
238
+ $response = $this->doClientRequest('Process',$params);
239
+
240
+ if ($response) {
241
+ $this->Result()->setResponseCode((string)$response->ResponseCode);
242
+ $this->Result()->setIssuerId((string)$response->IssuerId);
243
+ $this->Result()->setAuthorizationId((string)$response->AuthorizationId);
244
+ $this->Result()->setTransactionId((string)$response->TransactionId);
245
+ $this->Result()->setAuthenticatedWith('');
246
+ $this->Result()->setAuthenticatedStatus('');
247
+
248
+ if (isset($response->ResponseCode) && ($response->ResponseCode == "OK")) {
249
+
250
+ $result = (string)$response->TransactionId;
251
+ }
252
+ else {
253
+ $this->setError(true);
254
+ $this->setErrorMessage('('.(string)$response->ResponseSource.') '.(string)$response->ResponseText);
255
+ }
256
+ }
257
+
258
+ if ($this->getError()) {
259
+ $this->doLog('ERROR: [Void] '.$this->getErrorMessage());
260
+ }
261
+
262
+ return $result;
263
+ }
264
+
265
+ public function query($TransactionId)
266
+ {
267
+ $result = false;
268
+ $params = array(
269
+ 'transactionId' => $TransactionId,
270
+ );
271
+
272
+ $this->Result()->setChildTransactionId('');
273
+
274
+
275
+ $response = $this->doClientRequest('Query',$params);
276
+
277
+ if ($response) {
278
+
279
+ $this->addResult('issuer',$response->CardInformation->Issuer);
280
+
281
+ $this->Result()->setIssuer((string)$response->CardInformation->Issuer);
282
+ $this->Result()->setIssuerCountry((string)$response->CardInformation->IssuerCountry);
283
+ $this->Result()->setPaymentMethod((string)$response->CardInformation->PaymentMethod);
284
+ $this->Result()->setMaskedPAN((string)$response->CardInformation->MaskedPAN);
285
+
286
+ $this->Result()->setAuthorized((((string)$response->Summary->Authorized) == "true"));
287
+ $this->Result()->setAuthorizationId((string)$response->Summary->AuthorizationId);
288
+
289
+ $this->Result()->setTransactionId((string)$response->TransactionId);
290
+
291
+ $this->Result()->setAnulled(((string)$response->Summary->Annulled) == "true");
292
+ $this->Result()->setAmountCaptured((float)$response->Summary->AmountCaptured);
293
+ $this->Result()->setChildTransactionId((string)$response->ChildTransactionId);
294
+
295
+ if (isset($response->AuthenticationInformation->AuthenticatedWith)) {
296
+ $this->Result()->setAuthenticatedWith((string)$response->AuthenticationInformation->AuthenticatedWith);
297
+ }
298
+ if (isset($response->AuthenticationInformation->AuthenticatedStatus)) {
299
+ $this->Result()->setAuthenticatedStatus((string)$response->AuthenticationInformation->AuthenticatedStatus);
300
+ }
301
+
302
+ $result = true;
303
+ }
304
+
305
+ if ($this->getError()) {
306
+ $this->doLog('ERROR: [Query] '.$this->getErrorMessage());
307
+ }
308
+
309
+ return $result;
310
+ }
311
+
312
+ /**
313
+ * Check BBS Transaction
314
+ *
315
+ * @param String $TransactionId
316
+ * @return Trollweb_BBSNetAxept_Model_BBSNetterminal_Result
317
+ */
318
+ public function checkStatus($TransactionId) {
319
+
320
+ $result = false;
321
+ if ($this->query($TransactionId)) {
322
+ $result = $this->Result()->getAuthorized();
323
+ }
324
+
325
+ return $result;
326
+ }
327
+
328
+ public function Result() {
329
+ if (!is_object($this->_result)) {
330
+ $this->_result = new Varien_Object;
331
+ }
332
+
333
+ return $this->_result;
334
+ }
335
+
336
+ protected function addResult($field,$object)
337
+ {
338
+ if (isset($object)) {
339
+ $this->Result()->setData($field,(string)$object);
340
+ }
341
+ }
342
+
343
+ private function doClientRequest($function,$params)
344
+ {
345
+
346
+ $netsResult = false;
347
+ $url = 'https://'.$this->getHost().'/Netaxept/'.$function.'.aspx';
348
+ $bbsClient = new Zend_Http_Client($url);
349
+ $bbsClient->setParameterGet('merchantId',$this->getMerchantId());
350
+ $bbsClient->setParameterGet('token',$this->getMerchantToken());
351
+
352
+ foreach ($params as $key => $value)
353
+ {
354
+ $bbsClient->setParameterGet($key,$value);
355
+ }
356
+
357
+ try {
358
+ $response = $bbsClient->request();
359
+ //$this->doLog($bbsClient->getLastRequest());
360
+ }
361
+ catch (Exception $e) {
362
+ $this->setError(true);
363
+ $this->setErrorMessage($e->getMessage());
364
+ $response = false;
365
+ }
366
+
367
+ if ($response) {
368
+ $netsResult = $this->parseResult($response->getBody());
369
+ }
370
+
371
+ if ($this->getError()) {
372
+ $this->doLog('ERROR: ['.$function.'] '.$this->getErrorMessage());
373
+ }
374
+
375
+ return $netsResult;
376
+ }
377
+
378
+ private function parseResult($xml)
379
+ {
380
+ $dom = simplexml_load_string($xml);
381
+
382
+ if (isset($dom->Error)) {
383
+ $this->setErrorMessage((string)$dom->Error->Message);
384
+ $this->setError(true);
385
+ if (isset($dom->Error->Result)) {
386
+ return $dom->Error->Result;
387
+ }
388
+ else {
389
+ return false;
390
+ }
391
+ }
392
+
393
+ return $dom;
394
+ }
395
+
396
+
397
+ private function getRequest($storeId) {
398
+
399
+ // Set default norwegian language
400
+ if ($this->getLanguage() == false) {
401
+ $this->setLanguage('no_NO');
402
+ }
403
+
404
+ if (Mage::getStoreConfig('payment/bbsnetaxept_withgui/alternate_redirect', $storeId)) {
405
+ $redirectUrl = Mage::getStoreConfig('payment/bbsnetaxept_withgui/alternate_redirect', $storeId);
406
+ }
407
+ else {
408
+ $redirectUrlConfig = 'bbsnetaxept/return/check';
409
+ $redirectUrl = Mage::getUrl($redirectUrlConfig, array('_secure' => true, '_query' => false, '_nosid' => true));
410
+ }
411
+
412
+ $_singlePage = 'false';
413
+ if (Mage::getStoreConfig('payment/bbsnetaxept_withgui/singlepage', $storeId)) {
414
+ $_singlePage = 'true';
415
+ }
416
+
417
+ $request = array(
418
+ 'serviceType' => ($this->getInternalGUI() ? 'M' : 'B'),
419
+ 'transactionId' => $this->getTransactionId(),
420
+ 'orderNumber' => $this->getOrderNumber(),
421
+ 'currencyCode' => $this->getCurrencyCode(),
422
+ 'amount' => $this->getAmount(),
423
+ 'orderDescription' => $this->getOrderDescription(),
424
+ 'language' => $this->getLanguage(),
425
+ 'redirectUrl' => $redirectUrl,
426
+ 'customerEmail' => $this->getCustomerEmail(),
427
+ 'customerPhoneNumber' => $this->getCustomerPhoneNumber(),
428
+ 'terminalSinglePage' => $_singlePage,
429
+ // 'paymentMethodList' => $this->getPaymentMethodList(), // TODO: implement this
430
+ );
431
+
432
+
433
+ return $request;
434
+
435
+ }
436
+
437
+ public function doLog($logline,$force=false) {
438
+ $logDir = Mage::getBaseDir('log');
439
+
440
+ if ($force or $this->getLogactive()) {
441
+ $fh = fopen($logDir."/trollweb_bbsnetaxept.log","a");
442
+ if ($fh) {
443
+ fwrite($fh,"[".date("d.m.Y h:i:s")."] ".$logline."\n");
444
+ fclose($fh);
445
+ }
446
+ }
447
+ }
448
+ }
449
+
app/code/community/Trollweb/BBSNetAxept/Model/Api/BbsRequest.php CHANGED
@@ -1,35 +1,62 @@
1
- <?php //003ab
2
- if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');@dl($__ln);if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the site administrator.');exit(199);
3
- ?>
4
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- wQTNlyZg7xm/s9zMKDVZKNroYxXotEu49fkqAwzxg6lPNBzgNie7MQIvtIbcZeqqQ4onBgInX1io
12
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
35
- tZii3RY5P6Ni4uRMH7APzWYcB0rTj0==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BBS NetAxept, Norge
4
+ *
5
+ * LICENSE AND USAGE INFORMATION
6
+ * It is NOT allowed to modify, copy or re-sell this file or any
7
+ * part of it. Please contact us by email at post@trollweb.no or
8
+ * visit us at www.trollweb.no/bbs if you have any questions about this.
9
+ * Trollweb is not responsible for any problems caused by this file.
10
+ *
11
+ * Visit us at http://www.trollweb.no today!
12
+ *
13
+ * @category Trollweb
14
+ * @package Trollweb_BBSNetAxept
15
+ * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
+ * @license Single-site License
17
+ *
18
+ */
19
+
20
+ class Trollweb_BBSNetAxept_Model_Api_BbsRequest {
21
+
22
+ public $Amount;
23
+ public $CurrencyCode;
24
+ public $CustomerEmail;
25
+ public $CustomerPhoneNumber;
26
+ public $Description;
27
+ public $Language;
28
+ public $OrderDescription;
29
+ public $OrderNumber;
30
+ public $PanHash;
31
+ public $RecurringExpiryDate;
32
+ public $RecurringFrequency;
33
+ public $RecurringType;
34
+ public $RedirectUrl;
35
+ public $ServiceType;
36
+ public $SessionId;
37
+ public $TransactionId;
38
+
39
+ function Trollweb_BBSNetAxept_Model_Api_BbsRequest
40
+ (
41
+ $Amount,
42
+ $CurrencyCode,
43
+ $OrderDescription,
44
+ $OrderNumber,
45
+ $RedirectUrl,
46
+ $ServiceType, /* B : BBS Hosted UI ; M : Merchant Hosted UI ; C : Call Center Solution */
47
+ $SessionId,
48
+ $TransactionId
49
+ )
50
+ {
51
+ $this->Amount = $Amount;
52
+ $this->CurrencyCode = $CurrencyCode;
53
+ $this->OrderDescription = $OrderDescription;
54
+ $this->OrderNumber = $OrderNumber;
55
+ $this->RedirectUrl = $RedirectUrl;
56
+ $this->ServiceType = $ServiceType;
57
+ $this->SessionId = $SessionId;
58
+ $this->TransactionId = $TransactionId;
59
+ }
60
+
61
+ };
62
+
app/code/community/Trollweb/BBSNetAxept/Model/Api/SoapClient.php CHANGED
@@ -1,12 +1,26 @@
1
- <?php //003ab
2
- if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');@dl($__ln);if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the site administrator.');exit(199);
3
- ?>
4
- 4+oV5CNMUiMh8r/hfc/lviY4eFeQpyiwkrU9TeMiTAqphIP/NMOwv6BFj8jR2MF662yAV7hShA53
5
- U+1kCzCo4LGm7+gb4O+DIE4J624PVexsM+cjOR0rreHx7as1Z6500e8hEEn9KiC/95/ibqMv6nC+
6
- RkDp46AmmskjHaWq6isBsYUUWInhmrJH6j/WFuwsftsoqMTIaYTeCC8DdnxR9TqTQS5z/ohBvGmt
7
- a9JWKPJcYH246yOIkyFtIQuZFywOQSM3NZsa1lyO2LDVNTOTXJh/KNoPcAkJzwCb/znH91Js99Y1
8
- zi2z++mcbiOqyXqlGCzzFbK6wgB6fCbVOX6HbR9LTCaq89WcmCrxvbVrmyYeaUu/W2JzpFH78tSz
9
- wVp9pw6sZl+ICWx+KxigZkEmwHdizmltJGYn/FpJ53BT4II742tEXD1oBCR0fyb797ZmqdMKfdOs
10
- CNLRvYsTAepsbNmuwn7zUdR6j8J7kJfyguOlEOP9QbB+MUhRx9Q/XQn0rM/WnZTdrnsQ6MeTQFem
11
- yiaMI9kBUqsseEnuN18wwJ+QAq/FW65A63x7XmtMnsmPzL/1ON0/UIz//KelHduSkDspLyYkIhn5
12
- SyyOtq7VgaKvrxWIul5ksWRY678BzFjm/0sGBEkKLaMgOuu+uW==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BBS NetAxept, Norge
4
+ *
5
+ * LICENSE AND USAGE INFORMATION
6
+ * It is NOT allowed to modify, copy or re-sell this file or any
7
+ * part of it. Please contact us by email at post@trollweb.no or
8
+ * visit us at www.trollweb.no/bbs if you have any questions about this.
9
+ * Trollweb is not responsible for any problems caused by this file.
10
+ *
11
+ * Visit us at http://www.trollweb.no today!
12
+ *
13
+ * @category Trollweb
14
+ * @package Trollweb_BBSNetAxept
15
+ * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
+ * @license Single-site License
17
+ *
18
+ */
19
+
20
+ /**
21
+ * BBS Soap Client
22
+ */
23
+ class Trollweb_BBSNetAxept_Model_Api_SoapClient extends SoapClient
24
+ {
25
+
26
+ }
app/code/community/Trollweb/BBSNetAxept/Model/Cron.php CHANGED
@@ -3,54 +3,55 @@
3
  * BBS NetAxept, Norge
4
  *
5
  * LICENSE AND USAGE INFORMATION
6
- * It is NOT allowed to modify, copy or re-sell this file or any
7
- * part of it. Please contact us by email at post@trollweb.no or
8
  * visit us at www.trollweb.no/bbs if you have any questions about this.
9
  * Trollweb is not responsible for any problems caused by this file.
10
  *
11
  * Visit us at http://www.trollweb.no today!
12
- *
13
  * @category Trollweb
14
  * @package Trollweb_BBSNetAxept
15
  * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
  * @license Single-site License
17
- *
18
  */
19
 
20
  class Trollweb_BBSNetAxept_Model_Cron
21
  {
22
-
23
  public function checkOrders($schedule)
24
  {
25
  $collection = Mage::getResourceModel('sales/order_collection')
26
  ->addAttributeToSelect('*')
27
- ->addAttributeToFilter('status','pending_bbs');
 
28
 
29
-
30
  foreach ($collection as $key => $order) {
31
  $bbs = Mage::getModel('bbsnetaxept/withGUI')->getApi();
32
  // Cancel all orders older than X minutes. (change in admin)
33
  $timeout = $order->getPayment()->getMethodInstance()->getPendingTimeout();
34
-
35
  if (($timeout > 0) and (strtotime($order->getUpdatedAt())+($timeout*60) < time()))
36
  {
37
  $transid = $order->getPayment()->getAdditionalInformation(Trollweb_BBSNetAxept_Model_WithGUI::TRANSACTION_ID);
38
  $status = $bbs->checkStatus($transid);
39
  if ($status == false) {
40
  $bbs->doLog('Order number '.$order->getIncrementId().' is automatic canceled due to missing payment (Timeout: '.$timeout.')',true);
41
- $order->cancel()->save();
 
 
42
  }
43
  else {
44
-
45
  // If marked as captured in BBS, lets try to find the correct invoice and mark it as captured here aswell.
46
- $captured = $bbs->getAmountCaptured();
47
  if ($captured > 0) {
48
  if ($order->hasInvoices()) {
49
-
50
  foreach ($order->getInvoiceCollection() as $id => $invoice) {
51
- $amount = $invoice->getGrandTotal();
52
  if ($invoice->canCapture() and ($amount*100 == $captured)) {
53
- $bbs->doLog('Invoice number '.$invoice->getIncrementId().' was marked as captured on BBS and is automaticly marked as paied in magento. (Amount: '.$amount.')',true);
54
  $invoice->setIsPaid(true);
55
  $invoice->pay()->save();
56
  $message = Mage::helper('bbsnetaxept')->__('Registered notification about captured amount of %s.', $amount);
@@ -63,6 +64,6 @@ class Trollweb_BBSNetAxept_Model_Cron
63
  }
64
  }
65
  }
66
-
67
  }
68
  }
3
  * BBS NetAxept, Norge
4
  *
5
  * LICENSE AND USAGE INFORMATION
6
+ * It is NOT allowed to modify, copy or re-sell this file or any
7
+ * part of it. Please contact us by email at post@trollweb.no or
8
  * visit us at www.trollweb.no/bbs if you have any questions about this.
9
  * Trollweb is not responsible for any problems caused by this file.
10
  *
11
  * Visit us at http://www.trollweb.no today!
12
+ *
13
  * @category Trollweb
14
  * @package Trollweb_BBSNetAxept
15
  * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
  * @license Single-site License
17
+ *
18
  */
19
 
20
  class Trollweb_BBSNetAxept_Model_Cron
21
  {
22
+
23
  public function checkOrders($schedule)
24
  {
25
  $collection = Mage::getResourceModel('sales/order_collection')
26
  ->addAttributeToSelect('*')
27
+ ->addAttributeToFilter('status',Trollweb_BBSNetAxept_Model_WithGUI::ORDER_STATUS);
28
+
29
 
 
30
  foreach ($collection as $key => $order) {
31
  $bbs = Mage::getModel('bbsnetaxept/withGUI')->getApi();
32
  // Cancel all orders older than X minutes. (change in admin)
33
  $timeout = $order->getPayment()->getMethodInstance()->getPendingTimeout();
34
+
35
  if (($timeout > 0) and (strtotime($order->getUpdatedAt())+($timeout*60) < time()))
36
  {
37
  $transid = $order->getPayment()->getAdditionalInformation(Trollweb_BBSNetAxept_Model_WithGUI::TRANSACTION_ID);
38
  $status = $bbs->checkStatus($transid);
39
  if ($status == false) {
40
  $bbs->doLog('Order number '.$order->getIncrementId().' is automatic canceled due to missing payment (Timeout: '.$timeout.')',true);
41
+ $order->cancel();
42
+ $order->addStatusToHistory($order->getStatus(),Mage::helper('bbsnetaxept')->__('Automatic canceled due to missing authorization (Timeout: '.$timeout.')'),false);
43
+ $order->save();
44
  }
45
  else {
 
46
  // If marked as captured in BBS, lets try to find the correct invoice and mark it as captured here aswell.
47
+ $captured = $bbs->Result()->getAmountCaptured();
48
  if ($captured > 0) {
49
  if ($order->hasInvoices()) {
50
+
51
  foreach ($order->getInvoiceCollection() as $id => $invoice) {
52
+ $amount = $invoice->getBaseGrandTotal();
53
  if ($invoice->canCapture() and ($amount*100 == $captured)) {
54
+ $bbs->doLog('Invoice number '.$invoice->getIncrementId().' was marked as captured on Nets and is automaticly marked as paied in magento. (Amount: '.$amount.')',true);
55
  $invoice->setIsPaid(true);
56
  $invoice->pay()->save();
57
  $message = Mage::helper('bbsnetaxept')->__('Registered notification about captured amount of %s.', $amount);
64
  }
65
  }
66
  }
67
+
68
  }
69
  }
app/code/community/Trollweb/BBSNetAxept/Model/Info.php CHANGED
@@ -3,96 +3,121 @@
3
  * BBS NetAxept, Norge
4
  *
5
  * LICENSE AND USAGE INFORMATION
6
- * It is NOT allowed to modify, copy or re-sell this file or any
7
- * part of it. Please contact us by email at post@trollweb.no or
8
  * visit us at www.trollweb.no/bbs if you have any questions about this.
9
  * Trollweb is not responsible for any problems caused by this file.
10
  *
11
  * Visit us at http://www.trollweb.no today!
12
- *
13
  * @category Trollweb
14
  * @package Trollweb_BBSNetAxept
15
  * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
  * @license Single-site License
17
- *
18
  */
19
 
20
  class Trollweb_BBSNetAxept_Model_Info
21
  {
22
- protected $_publicMap = array();
 
 
 
 
 
 
 
 
 
23
 
24
- protected $_secureMap = array('transaction_id',
25
- 'authorization_id',
26
- 'authenticated_status',
27
- 'authenticated_with',
28
- 'issuer_id',
29
- 'issuer_country'
30
- );
31
-
32
  public function getPublicPaymentInfo($payment) {
33
- return $this->_makeMap($this->_publicMap,$payment);
34
- }
35
 
36
  public function getPaymentInfo($payment) {
37
  return $this->_makeMap($this->_secureMap,$payment);
38
- }
39
-
40
  protected function _makeMap($map,$payment) {
41
  $result = array();
42
  foreach ($map as $key) {
43
- $result[$this->_getLabel($key)] = $this->_getValue($key,$payment);
 
 
 
44
  }
45
-
46
  return $result;
47
  }
48
-
49
- protected function _getLabel($key) {
50
- switch ($key) {
51
- case 'transaction_id':
52
- return Mage::helper('bbsnetaxept')->__('Transaction id');
53
- case 'authorization_id':
54
- return Mage::helper('bbsnetaxept')->__('Authorization id');
55
- case 'authenticated_status':
56
- return Mage::helper('bbsnetaxept')->__('Authenticated status');
57
- case 'authenticated_with':
58
- return Mage::helper('bbsnetaxept')->__('Authenticated with');
59
- case 'issuer_id':
60
- return Mage::helper('bbsnetaxept')->__('Issuer');
61
- case 'issuer_country':
62
- return Mage::helper('bbsnetaxept')->__('Issuer country');
63
- }
64
- }
65
-
66
- protected function _getValue($key,$payment) {
67
- $value = $payment->getAdditionalInformation('bbs_'.$key);
68
- if ($value == null) {
69
- switch ($key) {
70
- case 'transaction_id':
71
- $value = $payment->getBbsTransactionId();
72
- break;
73
- case 'authorization_id':
74
- $value = $payment->getBbsAuthorizationId();
75
- break;
76
- case 'authenticated_status':
77
- $value = $payment->getBbsAuthenticatedStatus();
78
- break;
79
- case 'authenticated_with':
80
- $value = $payment->getBbsAuthenticatedWith();
81
- break;
82
- case 'issuer_id':
83
- $value = $payment->getBbsIssuerId();
84
- break;
85
- case 'issuer_country':
86
- $value = $payment->getBbsIssuerCountry();
87
- break;
88
- }
89
-
90
- if (!$value) {
91
- $value = '';
92
- }
93
- }
94
-
95
- return $value;
96
- }
97
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  }
3
  * BBS NetAxept, Norge
4
  *
5
  * LICENSE AND USAGE INFORMATION
6
+ * It is NOT allowed to modify, copy or re-sell this file or any
7
+ * part of it. Please contact us by email at post@trollweb.no or
8
  * visit us at www.trollweb.no/bbs if you have any questions about this.
9
  * Trollweb is not responsible for any problems caused by this file.
10
  *
11
  * Visit us at http://www.trollweb.no today!
12
+ *
13
  * @category Trollweb
14
  * @package Trollweb_BBSNetAxept
15
  * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
  * @license Single-site License
17
+ *
18
  */
19
 
20
  class Trollweb_BBSNetAxept_Model_Info
21
  {
22
+ protected $_publicMap = array();
23
+
24
+ protected $_secureMap = array('transaction_id',
25
+ 'authorization_id',
26
+ 'authenticated_status',
27
+ 'authenticated_with',
28
+ 'issuer_id',
29
+ 'issuer_country',
30
+ 'giftcard_amount',
31
+ );
32
 
 
 
 
 
 
 
 
 
33
  public function getPublicPaymentInfo($payment) {
34
+ return $this->_makeMap($this->_publicMap,$payment);
35
+ }
36
 
37
  public function getPaymentInfo($payment) {
38
  return $this->_makeMap($this->_secureMap,$payment);
39
+ }
40
+
41
  protected function _makeMap($map,$payment) {
42
  $result = array();
43
  foreach ($map as $key) {
44
+ $value = $this->_getValue($key,$payment);
45
+ if ($value !== false) {
46
+ $result[$this->_getLabel($key)] = $this->_getValue($key,$payment);
47
+ }
48
  }
49
+
50
  return $result;
51
  }
52
+
53
+ protected function _getLabel($key) {
54
+ switch ($key) {
55
+ case 'transaction_id':
56
+ return Mage::helper('bbsnetaxept')->__('Transaction id');
57
+ case 'authorization_id':
58
+ return Mage::helper('bbsnetaxept')->__('Authorization id');
59
+ case 'authenticated_status':
60
+ return Mage::helper('bbsnetaxept')->__('Authenticated status');
61
+ case 'authenticated_with':
62
+ return Mage::helper('bbsnetaxept')->__('Authenticated with');
63
+ case 'issuer_id':
64
+ return Mage::helper('bbsnetaxept')->__('Issuer');
65
+ case 'issuer_country':
66
+ return Mage::helper('bbsnetaxept')->__('Issuer country');
67
+ case 'payment_method':
68
+ return Mage::helper('bbsnetaxept')->__('Payment method');
69
+ case 'giftcard_amount':
70
+ return Mage::helper('bbsnetaxept')->__('Giftcard amount');
71
+
72
+ }
73
+ }
74
+
75
+ protected function _getValue($key,$payment) {
76
+ $value = $payment->getAdditionalInformation('bbs_'.$key);
77
+ if ($value == null) {
78
+ switch ($key) {
79
+ case 'transaction_id':
80
+ $value = $payment->getBbsTransactionId();
81
+ break;
82
+ case 'authorization_id':
83
+ $value = $payment->getBbsAuthorizationId();
84
+ break;
85
+ case 'authenticated_status':
86
+ $value = $payment->getBbsAuthenticatedStatus();
87
+ break;
88
+ case 'authenticated_with':
89
+ $value = $payment->getBbsAuthenticatedWith();
90
+ break;
91
+ case 'issuer_id':
92
+ $value = $payment->getBbsIssuerId();
93
+ break;
94
+ case 'issuer_country':
95
+ $value = $payment->getBbsIssuerCountry();
96
+ break;
97
+ }
98
+
99
+ if ($key == "issuer_id") {
100
+ $additional = $this->_getValue('issuer', $payment);
101
+ if ($additional) {
102
+ $value .= ' '.$additional;
103
+ }
104
+ }
105
+
106
+ if (!$value) {
107
+ $value = '';
108
+ }
109
+ }
110
+
111
+ if ($key == "giftcard_amount") {
112
+ if ($payment->getAdditionalInformation(Trollweb_BBSNetAxept_Model_WithGUI::IS_GIFTCARD)) {
113
+ $value = number_format($value/100,2);
114
+ }
115
+ else {
116
+ $value = false;
117
+ }
118
+ }
119
+
120
+ return $value;
121
+ }
122
+
123
  }
app/code/community/Trollweb/BBSNetAxept/Model/Observer.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Trollweb_BBSNetAxept_Model_Observer
4
+ {
5
+
6
+ public function voidPayment($observer)
7
+ {
8
+
9
+ $payment = $observer->getEvent()->getPayment();
10
+ if ($payment->getMethod() == "bbsnetaxept_withgui") {
11
+ $methodInstance = $payment->getMethodInstance();
12
+ $methodInstance->void($payment);
13
+ }
14
+
15
+ }
16
+
17
+ public function core_config_data_save_after($observer) {
18
+ $configData = $observer->getEvent()->getConfigData();
19
+
20
+ if ($configData && $configData->getPath() == 'payment/bbsnetaxept_withgui/active' && $configData->getValue() == 1) {
21
+ Mage::register('bbsnetaxept_licens_status', true);
22
+ }
23
+
24
+ if ($configData && $configData->getPath() == 'payment/bbsnetaxept_withgui/test_mode' && $configData->getValue() == 0) {
25
+ Mage::register('bbsnetaxept_licens_mode', true);
26
+ }
27
+
28
+ if ($configData && $configData->getPath() == 'payment/bbsnetaxept_withgui/merchant_id' && $configData->getValue() != '') {
29
+ Mage::register('bbsnetaxept_licens_merchant', true);
30
+ }
31
+
32
+ if (Mage::registry('bbsnetaxept_licens_status') AND Mage::registry('bbsnetaxept_licens_mode') AND Mage::registry('bbsnetaxept_licens_merchant')) {
33
+ if (Mage::registry('bbsnetaxept_licens_updated')) {
34
+ return $this;
35
+ }
36
+ else {
37
+ Mage::register('bbsnetaxept_licens_updated', true);
38
+ }
39
+ Mage::getModel('bbsnetaxept/withGUI')->saveConfigData();
40
+ }
41
+
42
+ return $this;
43
+ }
44
+
45
+ }
app/code/community/Trollweb/BBSNetAxept/Model/Updates.php ADDED
@@ -0,0 +1,176 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * BBS NetAxept, Norge
4
+ *
5
+ * LICENSE AND USAGE INFORMATION
6
+ * It is NOT allowed to modify, copy or re-sell this file or any
7
+ * part of it. Please contact us by email at post@trollweb.no or
8
+ * visit us at www.trollweb.no/bbs if you have any questions about this.
9
+ * Trollweb is not responsible for any problems caused by this file.
10
+ *
11
+ * Visit us at http://www.trollweb.no today!
12
+ *
13
+ * @category Trollweb
14
+ * @package Trollweb_BBSNetAxept
15
+ * @copyright Copyright (c) 2009 Trollweb (http://www.trollweb.no)
16
+ * @license Single-site License
17
+ *
18
+ */
19
+
20
+ class Trollweb_BBSNetAxept_Model_Updates
21
+ {
22
+ // Config paths
23
+ const FEED_URL_PATH = 'trollweb/updates/url';
24
+ const FEED_ENABLED = 'trollweb/updates/enabled';
25
+ const FEED_CHECK_FREQUENCY = 'trollweb/updates/check_frequencey';
26
+
27
+ const CACHE_PREFIX = 'trollweb_notification';
28
+
29
+ protected $_feedUrl;
30
+ protected $_module;
31
+
32
+ function check(Varien_Event_Observer $observer) {
33
+ if (Mage::getSingleton('admin/session')->isLoggedIn()) {
34
+ $this->getModule();
35
+ $this->checkUpdate();
36
+ }
37
+ }
38
+
39
+
40
+ function checkUpdate()
41
+ {
42
+ if (($this->getFrequency() + $this->getLastUpdate()) > time()) {
43
+ // return $this;
44
+ }
45
+
46
+ $feedData = array();
47
+
48
+ $feedXml = $this->getFeedData();
49
+ if ($feedXml && $feedXml->channel && $feedXml->channel->item) {
50
+
51
+ foreach ($feedXml->channel->item as $item) {
52
+ $feedData[] = array(
53
+ 'severity' => (int)$item->severity,
54
+ 'date_added' => $this->getDate((string)$item->pubDate),
55
+ 'title' => (string)$item->title,
56
+ 'description' => (string)$item->description,
57
+ 'url' => (string)$item->link,
58
+ );
59
+ }
60
+
61
+ if ($feedData) {
62
+ Mage::getModel('adminnotification/inbox')->parse(array_reverse($feedData));
63
+ }
64
+
65
+ }
66
+ $this->setLastUpdate();
67
+ return $this;
68
+ }
69
+
70
+ public function getModule()
71
+ {
72
+ if (!isset($this->_module)) {
73
+ $tags = explode("_",get_class($this));
74
+ // Check if this is a trollweb module.
75
+ if (strtolower($tags[0]) == "trollweb") {
76
+ $this->_module = strtolower($tags[1]);
77
+ }
78
+ }
79
+ return $this->_module;
80
+ }
81
+
82
+ /**
83
+ * Retrieve DB date from RSS date
84
+ *
85
+ * @param string $rssDate
86
+ * @return string YYYY-MM-DD YY:HH:SS
87
+ */
88
+ public function getDate($rssDate)
89
+ {
90
+ return gmdate('Y-m-d H:i:s', strtotime($rssDate));
91
+ }
92
+
93
+ /**
94
+ * Retrieve Update Frequency
95
+ *
96
+ * @return int
97
+ */
98
+ public function getFrequency()
99
+ {
100
+ return Mage::getStoreConfig(self::FEED_CHECK_FREQUENCY);
101
+ }
102
+
103
+ /**
104
+ * Retrieve Last update time
105
+ *
106
+ * @return int
107
+ */
108
+ public function getLastUpdate()
109
+ {
110
+ return Mage::app()->loadCache(self::CACHE_PREFIX."_".$this->getModule().'_lastcheck');
111
+ }
112
+
113
+ /**
114
+ * Retrieve Last update time
115
+ *
116
+ * @return int
117
+ */
118
+ public function setLastUpdate()
119
+ {
120
+ Mage::app()->saveCache(time(), self::CACHE_PREFIX."_".$this->getModule().'_lastcheck');
121
+ }
122
+
123
+ public function getVersion()
124
+ {
125
+ $v = (array)Mage::getConfig()->getNode('modules')->children();
126
+ $module = implode("_",array_slice(explode("_",get_class($this)),0,2));
127
+ $ver = (string)$v[$module]->version;
128
+
129
+ return ($ver ? $ver : '0.0.1');
130
+ }
131
+
132
+
133
+ /**
134
+ * Retrieve feed url
135
+ *
136
+ * @return string
137
+ */
138
+ public function getFeedUrl()
139
+ {
140
+ if (is_null($this->_feedUrl)) {
141
+ $this->_feedUrl = 'http://' . Mage::getStoreConfig(self::FEED_URL_PATH).'?module='.$this->getModule().'&ver='.$this->getVersion();
142
+ }
143
+ return $this->_feedUrl;
144
+ }
145
+
146
+ /**
147
+ * Retrieve feed data as XML element
148
+ *
149
+ * @return SimpleXMLElement
150
+ */
151
+ public function getFeedData()
152
+ {
153
+ $curl = new Varien_Http_Adapter_Curl();
154
+ $curl->setConfig(array(
155
+ 'timeout' => 2
156
+ ));
157
+ $curl->write(Zend_Http_Client::GET, $this->getFeedUrl(), '1.0');
158
+ $data = $curl->read();
159
+ if ($data === false) {
160
+ return false;
161
+ }
162
+ $data = preg_split('/^\r?$/m', $data, 2);
163
+ $data = trim($data[1]);
164
+ $curl->close();
165
+
166
+ try {
167
+ $xml = new SimpleXMLElement($data);
168
+ }
169
+ catch (Exception $e) {
170
+ return false;
171
+ }
172
+
173
+ return $xml;
174
+ }
175
+
176
+ }
app/code/community/Trollweb/BBSNetAxept/Model/WithGUI.php CHANGED
@@ -1,293 +1,947 @@
1
- <?php //003ab
2
- if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');@dl($__ln);if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}@dl($__ln);}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the site administrator.');exit(199);
3
- ?>
4
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- UqnyC6/3LPHbRjZmvP8cnJCBTjaTOlyrQ+YJy0dWUPQprQLRk+K1o6+f5Y/AkPuOTpZzabSoRr6C
34
- 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
- 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
- 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
- VhYQ1XO7okygcdJexTKLRN1Qg/QTvBLXdI07eD5tBeG/JxTaFMKNdVhpILPTKpl8Aeac74SnYcA4
38
- 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
- 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
- 0hYGqkWiVp1IFVFW2MVhI5irnRF+1WF8lZTaM13SLikpNFpI8hHsgyaenX20nqk99xOqAqeua7zE
41
- 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
- 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
- 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
- SFIRplJnUHxcY0XhpBJnfXU7gz03cbvreGtrxOcgpKjPUnyu3iLFgVFela23SrDitklVQC9xFdCk
45
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- gh59NKAMG29EgtD9wLINXlP775VhLROxTkbHm8D1YOXZtqYiXsPPQPO2udr8slHSaQSFpxJ0Gr/0
68
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- nVFcipiNdGMD8RSaHZWIxdb5Rr6qhX/nXs1BTHEn/UG529BUDWvejKiD16nbJhLC90+l+U5MpBzp
84
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- YB5ROVRTDfSMbEHg9xvQhDGzQ55qFO0lsIG+vTEGxtTT6XZCVbR+7wL/Z4C1Psuc5fFpH5wDTXeW
111
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- xIewcEWdyd6naVCMCZdcSzX/Z2l0/2wngrk8RYKUTf3lS5XF0mZjHemLjk2tCgoFFU8rlvqQG0sm
121
- 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
- wvxntAmagnwUrniLpU7TjOlFD50JgQ62gkswbwtOPZxsqEXcTvp5keKN/0lW83w7I4k4+5/hxdnr
123
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- SsFnjpGL4LdE2evKZ6f6UikLqzUtP4pMwkbNg4QssbNnOCbIJuvmyNWZkU357bopNYgQePhzdecR
133
- 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
- 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
- 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
- +tkJiPYEC+CH4cLBpQEE+NUXHlHfBdAjpSAkRT9lkHS0iPaAJnxXvDe7/z9ezp12fNABsxZJ5G/1
137
- 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
- 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
- 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
- Yg80Qe69GOX+IbeNj3T3Kjy5SAcufWCFzv+yBIQGk1XlyLmEPUsiGpCTuPAlThTXdVj0sFOr95tb
141
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- LDnSwpUAc36h1Dtwhj7KWyuSCUoJp5uDaQwYfmHQdfEa9/+9Y0gmaZ8Ngo34PUUzvsPOEWQ3Ufya
154
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- uW2VKRomqAhSk1Y2vtfupMWrMg4nSw/YXDqr5s4iT2C0qnZ1Z/+kbvYuP73/TRCIdw7GXM15YCB7
194
- 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
- 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
- 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
- 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
- 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
- ltG5xmtksXz9qmTO+WilCIlfg6CcI6i1CfgI3VUqrc/a1UiqXBqMuRwsrrLHSD0Q1tAsu/6A/UwK
200
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- evXRsyy0dvcTibreRMrbQ+ehg0LtHH6mhVhJ2gI/kZ3Wv/EHe2BMW6IleaIWJXHhJMVhzsEDLuDp
212
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- SbAXwwkKvvumz729BHtJH/tYxurzmsh4il7v6EtpInES+znpUR8gBRSEz3w7A+HaTFPjC0hnNuHS
224
- /eua5wHHlWLYZvQdBTLyWVhhW5Lpg0IDr//BV4gEKVua7HP3xIOMVumK7ayTkYG3/50ZVKK0CWlk
225
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- /M11o2z5aKXOge4iKyKbpxrXIocILXvlP9FLvsx4YlQI9moc+V2xgwLP289LMyMqz+vL/OplIAnq
234
- 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
- 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
- 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
- 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
- jcHm8O7U6Z2VOnP9GATVW9Z0BAxhf/pdMxQPouiqJ04QvdDLiZu/8lqp/qP4uXLyWSY95ZKOecha
239
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- VeSK86ubkaZQH90lVeVxvmThAY4RMP2QfQz11tFKvHLc3Erzy3lVeqTLwHHHbn7ZAjO3RJViYfHy
247
- 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
- yw0HuP1QZpdwxDb1Iev6BILtPnOWAsPoMHhIpfVNFnpa9vPzkY1uR4fMg34ZbDuaaVZFAc8RZGPv
249
- 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
- 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
- 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
- agvPAWswFSUl6gMBOWjHFvV6EdRO0O2HKWA+Oqh99NHafViz7HbO9hM3NAnUNlRdjW9JabSgMHBB
253
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 3t/XgxJ/IFKQcyz/14Sg0GT6/xfT4NNv+FI0joQcVXDQH6ei3HioE27wJs3iNsQHoJ72WVbXI2gC
282
- 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
- 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
- +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
- tT1JSSSc3gNYu8pK6EY+FKUScIByloIWa+5fUwqDf3Z/qTdhs/ZjCaKOq8ze1X7/swG0tJqf7Mj6
286
- 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
- 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
- 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
- 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
- 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
- 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
- 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
293
- jlupLFXYya5cbH0bG/A1raQ2fzc+8ds6cm==