Index: /changelog
===================================================================
--- /changelog	(revision 7753)
+++ /changelog	(revision 7754)
@@ -379,3 +379,5 @@
 - Bugfix: Lieferschein: Vorschau beachtet nun wieder die Produktauswahl
 - Bugfix: Korrektur Paketverfolgung-URL fÃŒr DPD, neu: Fedex-URL
-
+- Bugfix: Problem beim Import von Varianten behoben
+- Bugfix: Deinstallation von Produkten lÃ¶scht abhÃ€ngigkeiten (Produktartikelwerte, Varianten)
+
Index: /classes/M1.class.php
===================================================================
--- /classes/M1.class.php	(revision 7754)
+++ /classes/M1.class.php	(revision 7754)
@@ -0,0 +1,41 @@
+<?php
+
+    namespace wpsg;
+
+    abstract class M1 {
+
+        /**
+         * Maskierung fÃŒr Datenbankabfragen
+         * @param $value
+         * @return array|string
+         */
+        final public static function q($value) {
+
+            return \esc_sql($value);
+
+        }
+
+        /**
+         * PrÃŒft einen Wert auf Numerische Werte
+         * @param $value
+         * @param $testValue
+         * @return bool
+         */
+        final public static function isSizedInt(&$value, $testValue = null) {
+
+            if (!isset($value)) return false;
+
+            if ($testValue === null) {
+
+                return is_numeric($value);
+
+            } else {
+
+                if (is_numeric($value) && itnval($testValue) === intval($value)) return true;
+                else return false;
+
+            }
+
+        }
+
+    }
Index: /controller/wpsg_AdminController.class.php
===================================================================
--- /controller/wpsg_AdminController.class.php	(revision 7753)
+++ /controller/wpsg_AdminController.class.php	(revision 7754)
@@ -998,4 +998,6 @@
 			if (isset($_REQUEST['submit'])) {
 
+                @set_time_limit(3600);
+
 				check_admin_referer('wpsg-admin-deinstall');
 				
@@ -1005,10 +1007,14 @@
 						$_REQUEST[$k] = wpsg_sinput("key", $v);
 
-				if ($_REQUEST['wpsg_deinstall_products'] == '1')
-				{
-
-					// Produkte lÃ¶schen
-					$this->db->Query("TRUNCATE TABLE `".WPSG_TBL_PRODUCTS."`");
-					$this->db->Query("DELETE FROM `".WPSG_TBL_META."` WHERE `meta_table` = 'WPSG_TBL_PRODUCTS' ");
+				if ($_REQUEST['wpsg_deinstall_products'] == '1') {
+
+				    $arProductIDs = array_map('intval', $this->db->fetchAssocField("SELECT `id` FROM `".WPSG_TBL_PRODUCTS."` "));
+
+				    foreach ($arProductIDs as $product_id) {
+
+				        $oProduct = wpsg_product::getInstance($product_id);
+				        $oProduct->deletePermanently();
+
+                    }
 
 					$this->shop->addBackendMessage(__('Produkte erfolgreich gelÃ¶scht.', 'wpsg'));
Index: /controller/wpsg_ProduktController.class.php
===================================================================
--- /controller/wpsg_ProduktController.class.php	(revision 7753)
+++ /controller/wpsg_ProduktController.class.php	(revision 7754)
@@ -724,5 +724,13 @@
 
                                 // Eintrag in products_variation prÃŒfen
-                                $exist_row = wpsg_ShopController::getShop()->db->fetchRow("SELECT * FROM `".WPSG_TBL_PRODUCTS_VARIATION."` WHERE `variation_id` = '".intval($data['PV_VARI_variation_id'])."' AND `product_id` = '".intval($product_id)."' ");
+                                $exist_row = wpsg_ShopController::getShop()->db->fetchRow("
+                                    SELECT
+                                        * 
+                                    FROM 
+                                        `".WPSG_TBL_PRODUCTS_VARIATION."` 
+                                    WHERE
+                                        `variation_id` = '".intval($data['PV_VARI_variation_id'])."' AND 
+                                        `product_id` = '".intval($product_id)."' 
+                                ");
 
                                 foreach (['images', 'images_set'] as $col) {
@@ -740,4 +748,6 @@
 
                                 }
+
+                                unset($vari_data['id']);
 
                                 if (isset($exist_row['id'])) {
Index: /controller/wpsg_ShopController.class.php
===================================================================
--- /controller/wpsg_ShopController.class.php	(revision 7753)
+++ /controller/wpsg_ShopController.class.php	(revision 7754)
@@ -2663,4 +2663,19 @@
 		} // public function setOrderStatus($order_id, $status_id, $inform)
 
+        public function getOrderSecret($order_id) {
+
+            $secret = $this->db->fetchOne("SELECT `secret` FROM `".WPSG_TBL_ORDER."` WHERE `id` = '".wpsg_q($order_id)."' ");
+
+            if (!wpsg_isSizedString($secret)) {
+
+                $secret = wpsg_genCode(128);
+                $this->db->UpdateQuery(WPSG_TBL_ORDER, ['secret' => wpsg_q($secret)], " `id` = '".wpsg_q($order_id)."' ");
+
+            }
+
+            return $secret;
+
+        }
+
 		/**
 		 * Gibt den Link zur Seite nach der Bestellung zurâÂºck
@@ -2670,13 +2685,5 @@
 			$basket_url = $this->getURL(wpsg_ShopController::URL_BASKET);
 
-			$secret = $this->db->fetchOne("SELECT `secret` FROM `".WPSG_TBL_ORDER."` WHERE `id` = '".wpsg_q($order_id)."' ");
-
-			if (!wpsg_isSizedString($secret)) {
-
-                $secret = wpsg_genCode(128);
-			    $this->db->UpdateQuery(WPSG_TBL_ORDER, ['secret' => wpsg_q($secret)], " `id` = '".wpsg_q($order_id)."' ");
-
-            }
-
+            $secret = $this->getOrderSecret($order_id);
 			$code = md5($secret.$order_id.$secret);
 			
Index: /lib/functions.inc.php
===================================================================
--- /lib/functions.inc.php	(revision 7753)
+++ /lib/functions.inc.php	(revision 7754)
@@ -1850,5 +1850,5 @@
 
 		if (!isset($value)) return $default;
-		else return doubleval($value);
+		else return floatval($value);
 
 	}
Index: /lib/helper_functions.inc.php
===================================================================
--- /lib/helper_functions.inc.php	(revision 7753)
+++ /lib/helper_functions.inc.php	(revision 7754)
@@ -397,20 +397,35 @@
 	} // function wpsg_drawForm_Checkbox($field_name, $field_label, $conf = array())
 
-	function wpsg_drawForm_AdminboxStart($title = false, $wrap_class = '', $arConf = array())
-	{
-		
-		echo '<div class="panel panel-default '.$wrap_class.'" style="'.wpsg_getStr($arConf['style']).'">';
-
-		if (wpsg_isSizedString($title))
-		{
-
-			echo '<div class="panel-heading clearfix">';
-			echo '<h3 class="panel-title">'.$title.'</h3>';
+	function wpsg_drawForm_AdminboxStart($title = false, $wrap_class = '', $arConf = array()) {
+
+        $strDisplayBody = '';
+        $strDisplayHeader = '';
+        $strDisplayWrap = wpsg_getStr($arConf['style']);
+
+        $strOnClick = '';
+
+        if (wpsg_isTrue($arConf['collapsed'])) $strDisplayBody .= 'display:none;';
+
+        if (wpsg_isTrue($arConf['collapsable'])) {
+
+            $strOnClick = 'jQuery(this).next().toggle(); return false;';
+            $strDisplayHeader .= 'cursor:pointer;';
+
+        }
+
+		echo '<div class="panel panel-default '.$wrap_class.'" style="'.$strDisplayWrap.'">';
+
+		if (wpsg_isSizedString($title)) {
+
+			echo '<div class="panel-heading clearfix" style="'.$strDisplayHeader.'" onclick="'.$strOnClick.'">';
+			echo '<h3 class="panel-title">';
+			echo $title;
+			echo '</h3>';
 			echo '</div>';
 
 		}
 
-		echo '<div class="panel-body '.wpsg_getStr($arConf['panel-body-class']).'">';
-				
+		echo '<div class="panel-body '.wpsg_getStr($arConf['panel-body-class']).'" style="'.$strDisplayBody.'">';
+
 	}
 	
Index: /model/wpsg_order.class.php
===================================================================
--- /model/wpsg_order.class.php	(revision 7753)
+++ /model/wpsg_order.class.php	(revision 7754)
@@ -466,5 +466,11 @@
 
 		} // public function getProductKeys()
- 
+
+        public function getStatusCode() {
+
+		    return intval($this->__get('status'));
+
+        }
+
 		/**
 		 * Gibt die Bezeichnung des Status der Bestellung zurÃŒck
Index: /model/wpsg_product.class.php
===================================================================
--- /model/wpsg_product.class.php	(revision 7753)
+++ /model/wpsg_product.class.php	(revision 7754)
@@ -1,3 +1,5 @@
 <?php
+
+    use \wpsg\M1;
 
 	/**
@@ -72,6 +74,5 @@
 		} // public function appendData($arData)
 
-		public function delete()
-		{
+		public function delete() {
 
 			$this->db->UpdateQuery(WPSG_TBL_PRODUCTS, array(
@@ -86,5 +87,18 @@
 			), "`lang_parent` = '".wpsg_q($this->id)."'");
 
+            wpsg_product::clearInstance($this->id);
+
 		} // public function delete()
+
+        public function deletePermanently() {
+
+            $this->db->Query("DELETE FROM `".WPSG_TBL_PRODUCTS."` WHERE `id` = '".M1::q($this->getId())."' ");
+            $this->db->Query("DELETE FROM `".WPSG_TBL_META."` WHERE `meta_table` = 'WPSG_TBL_PRODUCTS' AND `target_id` = '".M1::q($this->getId())."' ");
+
+            $this->shop->callMods('product_deletePermanently', [$this->getId()]);
+
+            wpsg_product::clearInstance($this->id);
+
+        }
 
 		/**
@@ -645,5 +659,5 @@
 		public function getMenuOrder() {
 			
-			return $this->loadedData['menu_order'];
+			return wpsg_getInt($this->loadedData['menu_order']);
 			
 		}
@@ -982,6 +996,9 @@
 				return $arReturn;
 				
-			} else if (is_array($product_key)) return array();
-			else {
+			} else if (is_array($product_key)) {
+
+			    return array();
+
+            } else {
 			
 				if (!array_key_exists($class_name.'_'.$product_key, self::$_objCache) || $noCache === true) {
@@ -1003,3 +1020,11 @@
 		} // public static function getInstance($id, $noCache = false)
 
+        public static function clearInstance($product_key) {
+
+            $class_name = get_called_class();
+
+		    unset(self::$_objCache[$class_name.'_'.$product_key]);
+
+        }
+
 	} // class wpsg_product extends wpsg_model
Index: /mods/wpsg_mod_basic.class.php
===================================================================
--- /mods/wpsg_mod_basic.class.php	(revision 7753)
+++ /mods/wpsg_mod_basic.class.php	(revision 7754)
@@ -413,4 +413,7 @@
         public function wpsg_deinstall_sites() { } // public function wpsg_deinstall_sites()
 
+        /** Wird beim deinstallieren / kompletten lÃ¶schen von Produkten aufgerufen */
+        public function product_deletePermanently($product_id) { } // public function wpsg_deinstall_products()
+
 		/** Wird wÃ€hrend der Anzeige der Produkte im Frontend aufgerufen um das Template fÃŒr die Anzeige zu verÃ€ndern. */
 		public function renderProdukt_templateSelect(&$produkt_data, &$template_file) { }
Index: ds/wpsg_mod_micropayment.class.php
===================================================================
--- /mods/wpsg_mod_micropayment.class.php	(revision 7753)
+++ 	(revision )
@@ -1,991 +1,0 @@
-<?php
-
-	/**
-	 * Klasse, die verschiedene Zahlungsarten ÃŒber den micropayment.de Dienstleister ermÃ¶glicht
-	 * Ist nur fÃŒr die Lizenztypen Pro und Enterpreise zulÃ€ssig
-	 * @author Daschmi (05.07.2013)
-	 */
-	class wpsg_mod_micropayment extends wpsg_mod_basic
-	{
-		
-		var $lizenz = 2;
-		var $id = 1750;
-		var $hilfeURL = 'http://wpshopgermany.de/?p=3424';
-		
-		var $event_creditcard_url = 'http://billing.micropayment.de/creditcard/event/';
-		var $event_directdebit_url = 'http://billing.micropayment.de/lastschrift/event/';
-		var $event_ebank2pay_url = 'http://billing.micropayment.de/ebank2pay/event/';				
-		var $event_prepayment_url = 'http://billing.micropayment.de/prepay/event/';
-		var $event_call2pay_url = 'http://billing.micropayment.de/call2pay/event/';
-		var $event_handypay_url = 'http://billing.micropayment.de/handypay/event/';
-		
-		var $dispatcher = false;
-		
-		/**
-		 * Costructor
-		 */
-		public function __construct()
-		{
-				
-			parent::__construct();
-				
-			$this->name = __('micropaymentâ¢', 'wpsg');
-			$this->group = __('Zahlungsarten', 'wpsg');
-			$this->desc = __('ErmÃ¶glicht die Zahlung ÃŒber den Zahlungsdienstleister <a href="http://r132.micropayment.de">micropaymentâ¢</a>.', 'wpsg');
-		 			
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_creditcard_url'))) $this->event_creditcard_url = $this->shop->get_option('wpsg_mod_micropayment_event_creditcard_url');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_directdebit_url'))) $this->event_directdebit_url = $this->shop->get_option('wpsg_mod_micropayment_event_directdebit_url');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_ebank2pay_url'))) $this->event_ebank2pay_url = $this->shop->get_option('wpsg_mod_micropayment_event_ebank2pay_url');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_prepayment_url'))) $this->event_prepayment_url = $this->shop->get_option('wpsg_mod_micropayment_event_prepayment_url');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_call2pay_url'))) $this->event_call2pay_url = $this->shop->get_option('wpsg_mod_micropayment_event_call2pay_url');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_handypay_url'))) $this->event_handypay_url = $this->shop->get_option('wpsg_mod_micropayment_event_handypay_url');
-			
-		} // public function __construct()
-		
-		public function install()
-		{
-
-			// Kundentabelle erweitern
-			require_once(WPSG_PATH_WP.'/wp-admin/includes/upgrade.php');
-			
-			$sql = "CREATE TABLE ".WPSG_TBL_ORDER." (
-		   		wpsg_mod_micropayment_customerid VARCHAR(255) NOT NULL,
-				wpsg_mod_micropayment_sessionid VARCHAR(255) NOT NULL,
-				wpsg_mod_micropayment_transactionid VARCHAR(255) NOT NULL			
-		   	) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
-			
-			dbDelta($sql);
-			
-			// Kreditkarte
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_name', 'Kreditkarte micropaymentâ¢', false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_hint', __('Abrechnung per Kreditkarte', 'wpsg'), false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_mwst', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_mwstland', '0', false, false);
-						
-			// Kreditkarte mit Reserivierung
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_name', 'Kreditkarte micropaymentâ¢ (Reservierung)', false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_hint', __('Abrechnung per Kreditkarte (Reservierung)', 'wpsg'), false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_mwst', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_mwstland', '0', false, false);
-			
-			// Lastschrift
-			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_name', 'Lastschrift micropaymentâ¢', false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_hint', __('Abrechnung per Lastschrift', 'wpsg'), false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_mwst', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_mwstland', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_subject', 'O%order_id% - K%kunde_id%', false, true);
-			
-			// eBank2Pay
-			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_name', 'Online Ãberweisung micropaymentâ¢', false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_hint', __('Abrechnung per Online Banking', 'wpsg'), false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_mwst', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_mwstland', '0', false, false);
-						
-			// Vorkasse
-			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_name', 'Vorkasse micropaymentâ¢', false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_hint', __('Abrechnung per Vorkasse', 'wpsg'), false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_mwst', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_mwstland', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_subject', 'O%order_id% - K%kunde_id%', false, true);
-			
-			// Call2Pay
-			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_name', 'Call2Pay micropaymentâ¢', false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_hint', __('Abrechnung per Anruf / Telefon', 'wpsg'), false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_mwst', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_mwstland', '0', false, false);
-						
-			// HandyPay
-			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_name', 'HandyPay micropaymentâ¢', false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_hint', __('Abrechnung per SMS / TAN', 'wpsg'), false, true);
-			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_mwst', '0', false, false);
-			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_mwstland', '0', false, false);
-						
-		} // public function install()
-		
-		public function settings_edit()
-		{
-			
-			$pages = get_pages();
-			
-			$arPages = array(
-					'-1' => __('Neu anlegen und zuordnen', 'wpsg')
-			);
-			
-			foreach ($pages as $k => $v)
-			{
-				$arPages[$v->ID] = $v->post_title.' (ID:'.$v->ID.')';
-			}
-			
-			$this->shop->view['wpsg_mod_micropayment']['arPages'] = $arPages;
-			
-			$api_url = $this->shop->getURL(wpsg_ShopController::URL_BASKET);
-				
-			if (strpos($api_url, '?') === false)
-			{
-			
-				$api_url .= '?wpsg_plugin=wpsg_mod_micropayment&confirm=micropayment';
-			
-			}
-			else
-			{
-			
-				$api_url .= '&wpsg_plugin=wpsg_mod_micropayment&confirm=micropayment';
-			
-			}
-			
-			$this->shop->view['wpsg_mod_micropayment']['apiURL'] = $api_url;
-			
-			$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_micropayment/settings_edit.phtml');
-			
-		} // public function settings_edit()
-		
-		public function settings_save()
-		{
-					
-			// Allgemein
-		    $this->shop->update_option('wpsg_mod_micropayment_projectid', $_REQUEST['wpsg_mod_micropayment_projectid'], false, false, WPSG_SANITIZE_APIKEY);
-		    $this->shop->update_option('wpsg_mod_micropayment_accountid', $_REQUEST['wpsg_mod_micropayment_accountid'], false, false, WPSG_SANITIZE_APIKEY);
-		    $this->shop->update_option('wpsg_mod_micropayment_accesskey', $_REQUEST['wpsg_mod_micropayment_accesskey'], false, false, WPSG_SANITIZE_APIKEY);
-		    $this->shop->createPage(__('Erfolgreiche Zahlung', 'wpsg'), 'wpsg_mod_micropayment_successPage', wpsg_sinput(WPSG_SANITIZE_INT, $_REQUEST['wpsg_mod_micropayment_successPage']));
-			$this->shop->update_option('wpsg_mod_micropayment_paystart', $_REQUEST['wpsg_mod_micropayment_paystart'], false, false, WPSG_SANITIZE_CHECKBOX);
-			
-			$this->shop->update_option('wpsg_mod_micropayment_account', $_REQUEST['wpsg_mod_micropayment_account'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_layout', $_REQUEST['wpsg_mod_micropayment_layout'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_bgcolor', $_REQUEST['wpsg_mod_micropayment_bgcolor'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_campaign', $_REQUEST['wpsg_mod_micropayment_campaign'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_sandbox', $_REQUEST['wpsg_mod_micropayment_sandbox'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_bggfx', $_REQUEST['wpsg_mod_micropayment_bggfx'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			
-			// Kreditkarte
-			$this->shop->update_option('wpsg_mod_micropayment_creditcard_activ', $_REQUEST['wpsg_mod_micropayment_creditcard_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcard_name', $_REQUEST['wpsg_mod_micropayment_creditcard_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcard_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcard_name']));
-			$this->shop->update_option('wpsg_mod_micropayment_creditcard_hint', $_REQUEST['wpsg_mod_micropayment_creditcard_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcard_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcard_hint']));
-			$this->shop->update_option('wpsg_mod_micropayment_creditcard_logo', $_REQUEST['wpsg_mod_micropayment_creditcard_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcard_gebuehr', $_REQUEST['wpsg_mod_micropayment_creditcard_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcard_mwst', $_REQUEST['wpsg_mod_micropayment_creditcard_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcard_mwstland', $_REQUEST['wpsg_mod_micropayment_creditcard_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
-			
-			// Kreditkarte (Reservierung)
-			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_activ', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_name', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcardreservation_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcardreservation_name']));
-			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_hint', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcardreservation_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcardreservation_hint']));
-			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_logo', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_gebuehr', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_mwst', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
-			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_mwstland', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
-						
-			// Lastschrift
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_activ', $_REQUEST['wpsg_mod_micropayment_directdebit_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_name', $_REQUEST['wpsg_mod_micropayment_directdebit_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_directdebit_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_directdebit_name']));
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_hint', $_REQUEST['wpsg_mod_micropayment_directdebit_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_directdebit_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_directdebit_hint']));
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_logo', $_REQUEST['wpsg_mod_micropayment_directdebit_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_gebuehr', $_REQUEST['wpsg_mod_micropayment_directdebit_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_mwst', $_REQUEST['wpsg_mod_micropayment_directdebit_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_mwstland', $_REQUEST['wpsg_mod_micropayment_directdebit_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_directdebit_subject', $_REQUEST['wpsg_mod_micropayment_directdebit_subject'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			
-			// eBank2Pay
-			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_activ', $_REQUEST['wpsg_mod_micropayment_ebank2pay_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_name', $_REQUEST['wpsg_mod_micropayment_ebank2pay_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_ebank2pay_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_ebank2pay_name']));
-			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_hint', $_REQUEST['wpsg_mod_micropayment_ebank2pay_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_ebank2pay_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_ebank2pay_hint']));
-			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_logo', $_REQUEST['wpsg_mod_micropayment_ebank2pay_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_gebuehr', $_REQUEST['wpsg_mod_micropayment_ebank2pay_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
-			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_mwst', $_REQUEST['wpsg_mod_micropayment_ebank2pay_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
-			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_mwstland', $_REQUEST['wpsg_mod_micropayment_ebank2pay_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
-						
-			// Vorkasse
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_activ', $_REQUEST['wpsg_mod_micropayment_prepayment_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_name', $_REQUEST['wpsg_mod_micropayment_prepayment_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_prepayment_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_prepayment_name']));
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_hint', $_REQUEST['wpsg_mod_micropayment_prepayment_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_prepayment_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_prepayment_hint']));
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_logo', $_REQUEST['wpsg_mod_micropayment_prepayment_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_gebuehr', $_REQUEST['wpsg_mod_micropayment_prepayment_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_mwst', $_REQUEST['wpsg_mod_micropayment_prepayment_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_mwstland', $_REQUEST['wpsg_mod_micropayment_prepayment_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_prepayment_subject', $_REQUEST['wpsg_mod_micropayment_prepayment_subject'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			
-			// Call2Pay
-			$this->shop->update_option('wpsg_mod_micropayment_call2pay_activ', $_REQUEST['wpsg_mod_micropayment_call2pay_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_call2pay_name', $_REQUEST['wpsg_mod_micropayment_call2pay_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_call2pay_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_call2pay_name']));
-			$this->shop->update_option('wpsg_mod_micropayment_call2pay_hint', $_REQUEST['wpsg_mod_micropayment_call2pay_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_call2pay_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_call2pay_hint']));
-			$this->shop->update_option('wpsg_mod_micropayment_call2pay_logo', $_REQUEST['wpsg_mod_micropayment_call2pay_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_call2pay_gebuehr', $_REQUEST['wpsg_mod_micropayment_call2pay_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
-			$this->shop->update_option('wpsg_mod_micropayment_call2pay_mwst', $_REQUEST['wpsg_mod_micropayment_call2pay_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
-			$this->shop->update_option('wpsg_mod_micropayment_call2pay_mwstland', $_REQUEST['wpsg_mod_micropayment_call2pay_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
-						
-			// HandyPay
-			$this->shop->update_option('wpsg_mod_micropayment_handypay_activ', $_REQUEST['wpsg_mod_micropayment_handypay_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
-			$this->shop->update_option('wpsg_mod_micropayment_handypay_name', $_REQUEST['wpsg_mod_micropayment_handypay_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_handypay_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_handypay_name']));
-			$this->shop->update_option('wpsg_mod_micropayment_handypay_hint', $_REQUEST['wpsg_mod_micropayment_handypay_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->addTranslationString('wpsg_mod_micropayment_handypay_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_handypay_hint']));
-			$this->shop->update_option('wpsg_mod_micropayment_handypay_logo', $_REQUEST['wpsg_mod_micropayment_handypay_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
-			$this->shop->update_option('wpsg_mod_micropayment_handypay_gebuehr', $_REQUEST['wpsg_mod_micropayment_handypay_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
-			$this->shop->update_option('wpsg_mod_micropayment_handypay_mwst', $_REQUEST['wpsg_mod_micropayment_handypay_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
-			$this->shop->update_option('wpsg_mod_micropayment_handypay_mwstland', $_REQUEST['wpsg_mod_micropayment_handypay_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
-						
-			$this->getBillingURLs();
-			
-		} // public function settings_save()
-
-        public function wpsg_deinstall_sites() {
-
-            wp_delete_post($this->shop->get_option('wpsg_mod_micropayment_successPage'));
-
-        } // public function wpsg_deinstall_sites()
-
-		public function addPayment(&$arPayment) {
-			
-			// Neue ZustÃ€nde hinzufÃŒgen
-			$this->shop->arStatus['700'] = __('Zahlung reserviert', 'wpsg');
-			$this->shop->arStatus['701'] = __('Reservierung eingelÃ¶st', 'wpsg');
-			
-			// Kreditkarte
-			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_creditcard_activ') == '1') {
-				 
-				$arPayment[$this->id.'_1'] = array(
-					'id' => $this->id.'_1',
-					'name' => __($this->shop->get_option('wpsg_mod_micropayment_creditcard_name'), 'wpsg'),
-					'price' => $this->shop->get_option('wpsg_mod_micropayment_creditcard_gebuehr'),
-					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_creditcard_mwst'),
-					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_creditcard_mwstland'),
-					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_creditcard_hint')),
-					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcard_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcard_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
-				);
-						
-			}
-			
-			// Kreditkartenreservierung
-			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_activ')) {
-				
-				$arPayment[$this->id.'_7'] = array(
-					'id' => $this->id.'_7',
-					'name' => __($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_name'), 'wpsg'),
-					'price' => $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_gebuehr'),
-					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_mwst'),
-					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_mwstland'),
-					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_hint')),
-					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
-				);
-								
-			}
-			
-			// Lastschrift
-			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_directdebit_activ') == '1') {
-
-				$arPayment[$this->id.'_2'] = array(
-					'id' => $this->id.'_2',
-					'name' => __($this->shop->get_option('wpsg_mod_micropayment_directdebit_name'), 'wpsg'),
-					'price' => $this->shop->get_option('wpsg_mod_micropayment_directdebit_gebuehr'),
-					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_directdebit_mwst'),
-					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_directdebit_mwstland'),
-					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_directdebit_hint')),
-					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_directdebit_logo')))?$this->shop->get_option('wpsg_mod_micropayment_directdebit_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
-				);
-					 
-			}
-			
-			// eBank2Pay
-			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_activ') == '1') {
-
-				$arPayment[$this->id.'_3'] = array(
-					'id' => $this->id.'_3',
-					'name' => __($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_name'), 'wpsg'),
-					'price' => $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_gebuehr'),
-					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_mwst'),
-					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_mwstland'),
-					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_hint')),
-					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
-				);
-				 			
-			}
-			
-			// Vorkasse
-			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_prepayment_activ') == '1') {
-				
-				$arPayment[$this->id.'_4'] = array(
-					'id' => $this->id.'_4',
-					'name' => __($this->shop->get_option('wpsg_mod_micropayment_prepayment_name'), 'wpsg'),
-					'price' => $this->shop->get_option('wpsg_mod_micropayment_prepayment_gebuehr'),
-					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_prepayment_mwst'),
-					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_prepayment_mwstland'),
-					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_prepayment_hint')),
-					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_prepayment_logo')))?$this->shop->get_option('wpsg_mod_micropayment_prepayment_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
-				);
-			
-			}
-			
-			// Call2Pay
-			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_call2pay_activ') == '1') {
-				 	
-				$arPayment[$this->id.'_5'] = array(
-					'id' => $this->id.'_5',
-					'name' => __($this->shop->get_option('wpsg_mod_micropayment_call2pay_name'), 'wpsg'),
-					'price' => $this->shop->get_option('wpsg_mod_micropayment_call2pay_gebuehr'),
-					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_call2pay_mwst'),
-					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_call2pay_mwstland'),
-					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_call2pay_hint')),
-					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_call2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_call2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
-				);
-					 			
-			}
-			
-			// HandyPay
-			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_handypay_activ') == '1') {
-					
-				
-				$arPayment[$this->id.'_6'] = array(
-					'id' => $this->id.'_6',
-					'name' => __($this->shop->get_option('wpsg_mod_micropayment_handypay_name'), 'wpsg'),
-					'price' => $this->shop->get_option('wpsg_mod_micropayment_handypay_gebuehr'),
-					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_handypay_mwst'),
-					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_handypay_mwstland'),
-					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_handypay_hint')),
-					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_handypay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_handypay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
-				);
-					 
-			}
-				
-		} // public function addPayment(&$arPayment)
-		 
-		public function order_done(&$order_id, &$done_view)
-		{
-			
-			$oOrder = wpsg_order::getInstance($order_id);
-			
-			// Bestellungen mit 0 geben nix aus
-			if ($oOrder->getToPay() <= 0) return;
-				
-			if (preg_match('/^'.$this->id.'_\d+$/', $this->shop->view['basket']['checkout']['payment']))
-			{
-
-				$payment = $this->shop->view['basket']['checkout']['payment'];
-				
-				switch ($payment)
-				{
-										
-					case $this->id.'_1': // Kreditkarte
-						
-						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcard_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcard_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/creditcard.png'));						
-						break;
-						
-					case $this->id.'_7': // Kreditkarte mit Reservierung
-						
-						//$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/creditcard.png'));
-						$logo = false;
-						
-						break;
-						
-					case $this->id.'_2': // Lastschrift
-
-						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_directdebit_logo')))?$this->shop->get_option('wpsg_mod_micropayment_directdebit_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/directdebit.png'));
-						break;
-						
-					case $this->id.'_3': // eBankPay
-
-						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/bank2pay.png'));
-						break;
-						
-					case $this->id.'_4': // Vorkasse
-
-						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_prepayment_logo')))?$this->shop->get_option('wpsg_mod_micropayment_prepayment_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/prepayment.png'));
-						break;
-						
-					case $this->id.'_5': // Call2Pay
-
-						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_call2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_call2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/call2pay.png'));
-						break;
-						
-					case $this->id.'_6': // HandyPay
-						  
-						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_handypay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_handypay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/handypay.png'));
-						break;
-						
-					default: throw new \wpsg\Exception(__('Im Basket Array war eine Micropayment Zahlungsart die nicht definiert ist (Innerhalb calcPayment)', 'wpsg'));
-					
-				}
-				
-				$this->shop->view['wpsg_mod_micropayment']['logo'] = $logo;
-				
-				if ($payment != $this->id.'_7')
-				{
-				
-					$this->shop->view['wpsg_mod_micropayment']['payLink'] = $this->getPayLink($order_id);
-									
-				}
-				else
-				{
-					
-					$this->shop->view['wpsg_mod_micropayment']['payLink'] = false;
-						
-				}
-					
-				$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_micropayment/order_done.phtml');
-				
-			}
-		
-		} // public function order_done(&$order_id)
-		 
-		public function mail_payment()
-		{
-		
-			if (!preg_match('/^'.$this->id.'_\d+$/', $this->shop->view['basket']['checkout']['payment'])) return;
-			
-			if ($this->shop->htmlMail === true)
-			{
-				
-				echo '<a href="'.$this->shop->getDoneURL($this->shop->view['o_id']).'">'.__('Zahlungslink', 'wpsg').'</a>'.__(', um die Zahlung durchzufÃŒhren', 'wpsg');						
-				
-			}
-			else
-			{
-			
-				echo wpsg_pad_right(__('Zahlungslink', 'wpsg').':', 35).$this->shop->getDoneURL($this->shop->view['o_id']);
-				
-			}
-				
-		} // public function mail_payment()
-		
-		public function template_redirect() 
-		{
-			
-			if (wpsg_getStr($_REQUEST['wpsg_plugin']) == 'wpsg_mod_micropayment' && $_REQUEST['module_action'] == 'pay')
-			{
-
-				$_REQUEST['order_id'] = wpsg_sinput("key", $_REQUEST['order_id']);
-
-				$form_data = null;
-				parse_str(wpsg_sinput("text_field", $_REQUEST['form_data']), $form_data);
-				
-				if (!wpsg_isSizedString($form_data['number'])) die(__('Bitte die Kreditkartennummer angeben.', 'wpsg'));
-				if (!wpsg_isSizedString($form_data['cvc2'])) die(__('Bitte die PrÃŒfziffer der Kreditkarte angeben.', 'wpsg'));
-								
-				$oOrder = $this->shop->cache->loadOrderObject($_REQUEST['order_id']);
-				$this->api_init();
-				
-				$api_customer_id = null;
-				
-				if (!wpsg_isSizedString($oOrder->wpsg_mod_micropayment_customerid))
-				{
-										
-					$api_customer_id = $this->api_customerCreate($oOrder);
-					$oOrder->wpsg_mod_micropayment_customerid = $api_customer_id;
-					
-					$this->db->UpdateQuery(WPSG_TBL_ORDER, array(
-						'wpsg_mod_micropayment_customerid' => wpsg_q($api_customer_id)
-					), " `id` = '".wpsg_q($oOrder->id)."' ");
-										
-				}
-				else
-				{
-					
-					$api_customer_id = $oOrder->wpsg_mod_micropayment_customerid;
-					
-				}
-								 
-				try 
-				{
-				
-					// Kreditkartendaten ÃŒbermitteln
-					$result = $this->api_creditcardDataSet($oOrder, $api_customer_id, $form_data['number'], $form_data['expiryYear'], $form_data['expiryMonth']);
-					
-					// Session erstellen
-					$result = $this->api_sessionCreate($oOrder, $api_customer_id);
-
-					if (wpsg_isSizedString($result['sessionId']))
-					{
-						
-						$session_id = $result['sessionId'];
-						$result = $this->api_transactionAuthorization($oOrder, $result['sessionId'], $form_data['cvc2']);
-						
-						if (wpsg_isSizedString($result['transactionId']) && $result['transactionStatus'] == 'SUCCESS')
-						{
-							
-							// Authorisierung erfolgreich
-							$this->db->UpdateQuery(WPSG_TBL_ORDER, array(
-								'wpsg_mod_micropayment_sessionid' => wpsg_q($session_id),
-								'wpsg_mod_micropayment_transactionid' => wpsg_q($result['transactionId'])								
-							), " `id` = '".wpsg_q($oOrder->id)."' ");
-							
-							// Status setzen
-							$this->shop->setOrderStatus($oOrder->id, '700', false);
-							
-							$oOrder->log(
-								__('Erfolgreiche Micropayment Authorisierung', 'wpsg'),
-								print_r($result, 1)
-							);
-							
-						}
-						else
-						{
-														
-							die(__('Authorisierung konnte nicht durchgefÃŒhrt werden.', 'wpsg'));
-							
-						}
-						
-					}
-					else
-					{
-			 
-						die(__('Session fÃŒr Zahlung konnte nicht aufgebaut werden.', 'wpsg'));
-						
-					}
-					
-				}
-				catch (Exception $e)
-				{
-
-					wpsg_debug($e);
-					die(__('Die Kreditkartendaten wurden nicht akzeptiert.', 'wpsg'));
-					
-				}
-				
-				die("1");
-				
-			}
-			else if ($_REQUEST['wpsg_plugin'] == 'wpsg_mod_micropayment' && $_REQUEST['confirm'] == 'micropayment')
-			{
-
-				$_REQUEST['title'] = wpsg_sinput("text_field", $_REQUEST['title']);
-				$_REQUEST['amount'] = wpsg_sinput("key", $_REQUEST['amount']);
-
-				$title = explode('|', $_REQUEST['title']);
-				$order_id = $title[0];
-				$token = base64_decode($title[1]);
-				
-				$order_data = $this->shop->cache->loadOrder($order_id);
-				
-				if ($order_data['id'] != $order_id || $order_id <= 0) throw new \wpsg\Exception(__('UngÃŒltiger Titel oder Bestellung nicht gefunden bei MP Request', 'wpsg'));
-				
-				$token_check = md5($this->shop->get_option('wpsg_mod_micropayment_accesskey').$order_data['cdate']);
-				
-				if ($token_check != $token) throw new \wpsg\Exception(__('UngÃŒltiger Sicherheitstoken bei MP Request', 'wpsg'));
-				
-				$this->db->ImportQuery(WPSG_TBL_OL, array(
-					"title" => __("Micropayment REQUEST", "wpsg"),
-					"cdate" => "NOW()",
-					"o_id" => wpsg_q($order_id),
-					"mailtext" => wpsg_q(wpsg_hspc(print_r($_REQUEST, 1)))
-				));
-				
-				switch ($_REQUEST['function'])
-				{
-					
-					case 'billing':
-						
-						if ($this->shop->setPayMent($order_id, $_REQUEST['amount'] / 100))
-						{
-								
-							$this->shop->setOrderStatus($order_id, 100, true);
-							
-						}
-						
-						break; 
-					
-				}
-				
-				$url = get_permalink($this->shop->get_option('wpsg_mod_micropayment_successPage'));
-				die("status=ok\nurl=".$url."\ntarget=_top\nforward=1");
-				
-			}
-				
-		} // public function template_redirect()			
-		
-		public function admin_debugInfo() 
-		{ 
-			
-			echo $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_micropayment/debugInfo.phtml', true);			
-			
-		} // public function admin_debugInfo()
-		
-		public function setOrderStatus($order_id, $status_id, $inform) 
-		{ 
-			
-			if (!in_array($status_id, array('500', '701'))) return;
-			
-			$oOrder = $this->shop->cache->loadOrderObject($order_id);
-			$bError = false; $ol_text = "";
-			
-			$this->api_init();
-			
-			if ($status_id == '701')
-			{
-												
-				// Wechsel auf "Reservierung eingelÃ¶st"
-				try 
-				{
-					
-					$result = $this->api_transactionCapture($oOrder);
-									
-					if ($result['transactionStatus'] == "SUCCESS" && $result['sessionStatus'] == "SUCCESS")
-					{
-						
-						$oOrder->log(
-							__('Micropayment: Zahlung wurde gebucht', 'wpsg'),
-							print_r($result, 1)								
-						);
-						
-					}
-					else
-					{
-						
-						$bError = true;
-						$ol_text = print_r($result, 1);
-												
-					}
-					
-				} 
-				catch (Exception $e)
-				{
-					
-					$bError = true;
-					$ol_text = $e->getMessage();
-					
-				}
-
-				if ($bError === true)
-				{
-					
-					// Sonst ist die Meldung mit dem erfolgreichem Statuswechsel sichtbar
-					unset($_SESSION['wpsg']['backendMessage']);
-					
-					// Statuswechsel abrechen					
-					$this->shop->addBackendError(
-						wpsg_translate(
-							__('Reservierung konnte nicht gebucht werden. Status auf #1# zurÃŒckgesetzt.', 'wpsg'),
-							$this->shop->arStatus[$this->shop->view['order']['status']]
-						)
-					);
-						
-					$oOrder->log(
-						wpsg_translate(
-							__('Micropayment: Zahlung konnte nicht freigegeben werden / Status auf #1# zurÃŒckgesetzt.', 'wpsg'),
-							$this->shop->arStatus[$this->shop->view['order']['status']]
-						),
-						$ol_text
-					);
-					
-					$this->db->UpdateQuery(WPSG_TBL_ORDER, array(
-						'status' => wpsg_q($this->shop->view['order']['status'])
-					), " `id` = '".wpsg_q($oOrder->id)."' ");
-						 
-				}
-				
-			}
-			else if ($status_id == '500' && $this->shop->view['order']['status'] == '700')
-			{
-				
-				// Storniert
-				
-				try 
-				{
-				
-					$result = $this->api_transactionReversal($oOrder);
-					
-					if ($result['sessionStatus'] === "SUCCESS" && $result['transactionStatus'] === "SUCCESS")
-					{
-						
-						$oOrder->log(
-							__('Micropayment: Zahlungsreservierung wurde erfolgreich storniert', 'wpsg'),
-							print_r($result, 1)								
-						);
-										
-					}
-					else
-					{
-						
-						$bError = true;
-						$ol_text = print_r($result, 1);
-						
-					}
-					
-				} 
-				catch (Exception $e)
-				{
-					
-					$bError = true;
-					$ol_text = $e->getMessage();
-					
-				}
-				
-				if ($bError === true)
-				{
-					
-					// Kein zurÃŒcksetzen, ich denke es macht Sinn das der Status denoch auf storniert geht 
-					$this->shop->addBackendError(__('Zahlungsreservierung konnte nicht aufgehoben werden', 'wpsg'));
-					
-					$oOrder->log(
-						__('Micropayment: Zahlungsreservierung konnte nicht aufgehoben werden', 'wpsg'),
-						$ol_text
-					);
-					
-				}
-				 
-			}
-			
-			
-		} // public function setOrderStatus($order_id, $status_id, $inform)
-		
-		/** Modulfunktionen */
-		
-		private function api_init()
-		{
-			
-			require_once WPSG_PATH_MOD.'mod_micropayment/mcp-serviceclient_1_17/lib/init.php';
-			require_once WPSG_PATH_MOD.'mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2.php';
-			require_once MCP__SERVICELIB_DISPATCHER.'TNvpServiceDispatcher.php';
-			
-			$this->dispatcher = new TNvpServiceDispatcher('IMcpCreditcardService_v1_2', 'https://sipg.micropayment.de/public/creditcard/v1.2/nvp/');
-			
-		} // private function api_init()
-		
-		private function api_customerCreate(&$oOrder)
-		{
-			  			
-			$result = $this->dispatcher->customerCreate(
-				$this->shop->get_option('wpsg_mod_micropayment_accesskey'),
-				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'),
-				null,
-				null, //  Liste mit freien Parametern, die dem Kunden zugeordnet werden
-				$oOrder->getInvoiceFirstName(),
-				$oOrder->getInvoiceName(), 
-				$oOrder->getCustomer()->getEMail(), 
-				'de-DE' // 	Sprache & Land des Kunden | gÃŒltige Beispielwerte sind 'de', 'de-DE', 'en-US'
-			); 
-			
-			return $result;
-	 
-		} // private function api_customerCreate($order_id)
-		
-		private function api_sessionCreate(&$oOrder, $api_customer_id)
-		{ 
-			  
-			$_SERVER['REMOTE_ADDR'] = '134.97.73.195';
-			$result = $this->dispatcher->sessionCreate(
-				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
-				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
-				$api_customer_id, // ID des Kunden
-				null, // eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
-				$this->shop->get_option('wpsg_mod_micropayment_projectid'), // das ProjektkÃŒrzel fÃŒr den Vorgang
-				((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_campaign')))?$this->shop->get_option('wpsg_mod_micropayment_campaign'):null), // ein KampagnenkÃŒrzel des Projektbetreibers
-				((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_account')))?$this->shop->get_option('wpsg_mod_micropayment_account'):null), // Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der WebmasterfÃ€higkeit des Projekts vorraus - Hinweis: WebmasterfÃ€higkeit steht momentan nicht zur VerfÃŒgung
-				null, // ein KampagnenkÃŒrzel des Webmasters
-				wpsg_round($oOrder->getAmount(), 2) * 100, // abzurechnender Betrag, wird kein Betrag ÃŒbergeben, wird der Betrag aus der Konfiguration verwendet
-				'EUR', // WÃ€hrung
-				null, // Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert ÃŒbergeben, wird Der aus der Konfiguration verwendet
-				null, // Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wÃŒnschen
-				$_SERVER['REMOTE_ADDR'], // IPv4 des Benutzers
-				null, // Liste mit freien Parametern, die dem Vorgang zugeordnet werden
-				false // sendMail ?
-			);
-			
-			return $result;
-			
-		}
-		
-		public function api_transactionAuthorization(&$oOrder, $session_id, $cvc2)
-		{
-
-			$result = $this->dispatcher->transactionAuthorization(
-				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
-				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
-				$session_id,
-				$cvc2					
-			);
-			
-			return $result;
-			
-		} // public function api_transactionAuthorization(&$oOrder, $session_id, $cvc2)
-		
-		public function api_transactionReversal(&$oOrder)
-		{
-			
-			$result = $this->dispatcher->transactionReversal(
-				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
-				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung	
-				$oOrder->wpsg_mod_micropayment_sessionid,
-				$oOrder->wpsg_mod_micropayment_transactionid
-			);
-			
-			return $result;
-			
-		} // public function api_transactionReversal(&$oOrder)
-		
-		public function api_creditcardDataSet(&$oOrder, $api_customer_id, $number, $expiryYear, $expiryMonth)
-		{
-			 				
-			$result = $this->dispatcher->creditcardDataSet(
-				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
-				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
-				$api_customer_id, // ID des Kunden
-				$number,
-				$expiryYear,
-				$expiryMonth
-			); 
-			
-			return $result;
-			
-		} // public function creditcardDataSet($order_id, $api_customer_id, $number, $expiryYear, $expiryMonth)
-		
-		public function api_transactionCapture(&$oOrder)
-		{
-			
-			$result = $this->dispatcher->transactionCapture(
-				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
-				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
-				$oOrder->wpsg_mod_micropayment_sessionid,
-				$oOrder->wpsg_mod_micropayment_transactionid
-			);
-			
-			return $result;
-			
-		} // public function api_transactionCapture(&$oOrder)
-		
-		/**
-		 * Ruft die URLs von dem Micropayment Billing Info auf
-		 */
-		public function getBillingURLs()
-		{
-			
-			$url = 'https://webservices.micropayment.de/public/info/index.php?'.http_build_query(
-				array(
-					'action' => 'GenerateUrl',
-					'format' => 'json',
-					'account_id' => '27937'
-				),
-				null,
-				'&'		
-			);
-			
-			$json_data = json_decode($this->shop->get_url_content($url));
-					 
-			if (wpsg_isSizedString($json_data->billing))
-			{
-				
-				$this->shop->update_option('wpsg_mod_micropayment_event_creditcard_url', 'http://'.$json_data->billing.'/creditcard/event/');
-				$this->shop->update_option('wpsg_mod_micropayment_event_directdebit_url', 'http://'.$json_data->billing.'/lastschrift/event/');
-				$this->shop->update_option('wpsg_mod_micropayment_event_ebank2pay_url', 'http://'.$json_data->billing.'/ebank2pay/event/');
-				$this->shop->update_option('wpsg_mod_micropayment_event_prepayment_url', 'http://'.$json_data->billing.'/prepay/event/');
-				$this->shop->update_option('wpsg_mod_micropayment_event_call2pay_url', 'http://'.$json_data->billing.'/call2pay/event/');
-				$this->shop->update_option('wpsg_mod_micropayment_event_handypay_url', 'http://'.$json_data->billing.'/handypay/event/');
-				 
-			}
-			
-		} // public function getBillingURLs()
-		
-		/**
-		 * Gibt den Link zum bezahlen einer Bestellung anhand der BestellID zurÃŒck
-		 * @param Int $order_id ID der Bestellung 
-		 */
-		public function getPayLink($order_id)
-		{
-			
-			$order_data = $this->shop->cache->loadOrder($order_id);
-			 
-			$oOrder = wpsg_order::getInstance($order_id);
-			
-			if (!preg_match('/^'.$this->id.'_\d+$/', $order_data['type_payment'])) throw new \wpsg\Exception(__('Es wurde versucht einen Zahlungslink fÃŒr eine Bestellung anzufragen, die nicht mit Micropayment bezahlt wurde', 'wpsg'));
-			
-			$subPayTyp = preg_replace('/^\d+_/', '', $order_data['type_payment']);
-			
-			$arParam = array();
-			$arParam['project'] = $this->shop->get_option('wpsg_mod_micropayment_projectid');
-			
-			$arParam['title'] = $order_id.'|'.base64_encode(md5($this->shop->get_option('wpsg_mod_micropayment_accesskey').$order_data['cdate']));
-			
-			switch ($subPayTyp)
-			{
-									
-				case '1': // Kreditkarte
-					
-					$url = $this->event_creditcard_url;
-					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
-					$arParam['currency'] = 'EUR';
-					
-					break;
-					
-				case '7': // Kreditkarte mit Reservierung
-					
-					$url = $this->event_creditcard_url;
-					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
-					$arParam['currency'] = 'EUR';
-							
-					break;
-					
-				case '2': // Lastschrift
-					
-					$url = $this->event_directdebit_url;
-					$arParam['paytext'] = $this->shop->replaceUniversalPlatzhalter(__($this->shop->get_option('wpsg_mod_micropayment_directdebit_subject'), 'wpsg'), $order_id);
-					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
-					$arParam['userid'] = $order_data['k_id'];
-					
-					break;
-					
-				case '3': // eBankPay
-					
-					$url = $this->event_ebank2pay_url;
-					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
-					
-					break;
-					
-				case '4': // Vorkasse
-					
-					$url = $this->event_prepayment_url;
-					$arParam['paytext'] = $this->shop->replaceUniversalPlatzhalter(__($this->shop->get_option('wpsg_mod_micropayment_prepayment_subject'), 'wpsg'), $order_id);
-					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
-					
-					break;
-					
-				case '5': // Call2Pay
-				
-					$url = $this->event_call2pay_url;
-					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
-					
-					break;
-					
-				case '6': // HandyPay
-							
-					$url = $this->event_handypay_url; 
-					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
-					
-					break;
-					
-				default: throw new \wpsg\Exception(__('Es wurde keine gÃŒltige Micropayment Zahlungsart beim generieren des Bezahllinks gefunden', 'wpsg'));
-				
-			}
-			
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_account'))) $arParam['account'] = $this->shop->get_option('wpsg_mod_micropayment_account');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_layout'))) $arParam['theme'] = $this->shop->get_option('wpsg_mod_micropayment_layout');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_bgcolor'))) $arParam['bgcolor'] = $this->shop->get_option('wpsg_mod_micropayment_bgcolor');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_campaign'))) $arParam['projectcampaign'] = $this->shop->get_option('wpsg_mod_micropayment_campaign');
-			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_bggfx'))) $arParam['bggfx'] = $this->shop->get_option('wpsg_mod_micropayment_bggfx'); 
-			
-			$params = http_build_query($arParam, null, '&');
-			
-			$seal = md5($params.$this->shop->get_option('wpsg_mod_micropayment_accesskey'));
-			$params .= '&seal='.$seal;
-
-			if ($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')
-			{
-				
-				$params .= '&testmode=1';
-				
-			}
-			
-			return $url.'?'.$params;
-			
-		} // public function getPayLink($order_id)
-		
-	} // class wpsg_mod_micropayment extends wpsg_mod_basic
-
Index: /mods/wpsg_mod_micropayment_paywindow.class.php
===================================================================
--- /mods/wpsg_mod_micropayment_paywindow.class.php	(revision 7753)
+++ /mods/wpsg_mod_micropayment_paywindow.class.php	(revision 7754)
@@ -35,20 +35,20 @@
                 ],
                 2 => [
-                    'index' => 'sepadirectdebit',
+                    'index' => 'lastschrift',
                     'title' => 'Lastschrift',
                     'url' => 'https://sepadirectdebit.micropayment.de/lastschrift/event/',
-                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/logo_100x25.png')
+                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/lastschrift.png')
                 ],
                 3 => [
-                    'index' => 'directbanking',
+                    'index' => 'sofort',
                     'title' => 'Sofort.',
                     'url' => 'https://directbanking.micropayment.de/sofort/event/',
-                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/logo_100x25.png')
+                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/sofort.png')
                 ],
                 4 => [
-                    'index' => 'prepayment',
+                    'index' => 'prepay',
                     'title' => 'Vorkasse',
                     'url' => 'https://prepayment.micropayment.de/prepay/event/',
-                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/prepayment.png')
+                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/prepay.png')
                 ],
                 5 => [
@@ -56,5 +56,5 @@
                     'title' => 'PayPal',
                     'url' => 'https://paypal.micropayment.de/paypal/event/',
-                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/logo_100x25.png')
+                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/paypal.png')
                 ],
                 6 => [
@@ -62,5 +62,5 @@
                     'title' => 'paydirekt',
                     'url' => 'https://paydirekt.micropayment.de/paydirekt/event/',
-                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/logo_100x25.png')
+                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/paydirekt.png')
                 ],
                 7 => [
@@ -68,5 +68,5 @@
                     'title' => 'paysafecard',
                     'url' => 'https://paysafecard.micropayment.de/paysafecard/event/',
-                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/logo_100x25.png')
+                    'logo' => $this->shop->getRessourceURL('mods/mod_micropayment_paywindow/gfx/paysafecard.png')
                 ],
                 8 => [
@@ -77,5 +77,5 @@
                 ],
                 9 => [
-                    'index' => 'mobilepayment',
+                    'index' => 'handypay',
                     'title' => 'HandyPay',
                     'url' => 'https://mobilepayment.micropayment.de/handypay/event/',
@@ -103,5 +103,6 @@
 			$view['arPaymentWindow'] = $this->arPaymentWindow;
             $view['arPages'] = $arPages;
-            $view['notificationurl'] = $this->shop->getURL(wpsg_ShopController::URL_BASKET);
+            $view['notification_url'] = $this->shop->getURL(wpsg_ShopController::URL_BASKET);
+            $view['notification_password'] = $this->getNotificationPassword();
             $view['default_pay_title'] = $this->default_pay_title;
             $view['default_pay_text'] = $this->default_pay_text;
@@ -116,4 +117,5 @@
             $this->shop->update_option('wpsg_mod_micropayment_paywindow_accesskey', $_REQUEST['wpsg_mod_micropayment_paywindow_accesskey'], false, false, WPSG_SANITIZE_APIKEY);
             $this->shop->update_option('wpsg_mod_micropayment_paywindow_projectid', $_REQUEST['wpsg_mod_micropayment_paywindow_projectid'], false, false, WPSG_SANITIZE_TEXTFIELD);
+            $this->shop->createPage(__('Fehlgeschlagene Micropayment Zahlung', 'wpsg'), 'wpsg_mod_micropayment_paywindow_page_error', intval($_REQUEST['wpsg_mod_micropayment_paywindow_page_error']));
             $this->shop->update_option('wpsg_mod_micropayment_paywindow_paytitle', $_REQUEST['wpsg_mod_micropayment_paywindow_paytitle'], false, false, WPSG_SANITIZE_TEXTFIELD);
             $this->shop->update_option('wpsg_mod_micropayment_paywindow_paytext', $_REQUEST['wpsg_mod_micropayment_paywindow_paytext'], false, false, WPSG_SANITIZE_TEXTFIELD);
@@ -178,4 +180,5 @@
 
                 $view = [
+                    'order_status' => $oOrder->getStatusCode(),
 				    'logo' => $this->getLogo($payment_code),
                     'url' => $this->getUrl($payment_code, [
@@ -184,5 +187,7 @@
                         'title' => $this->getPayTitle($oOrder),
                         'paytext' => $this->getPayText($oOrder),
-                        'testmode' => (($this->shop->get_option('wpsg_mod_micropayment_paywindow_sandbox') === '1')?'1':'0')
+                        'testmode' => (($this->shop->get_option('wpsg_mod_micropayment_paywindow_sandbox') === '1')?'1':'0'),
+                        'userid ' => $oOrder->getCustomer()->getId(),
+                        'orderid' => $oOrder->getId()
                     ]),
                     'title' => $this->getTitle($payment_code)
@@ -214,54 +219,94 @@
 		public function template_redirect() {
 
-		    /*
-			if (wpsg_isSizedString($_REQUEST['wpsg_plugin'], 'wpsg_mod_micropayment_paywindow') && $_REQUEST['confirm'] == 'micropayment') {
-
-				$_REQUEST['title'] = wpsg_sinput("text_field", $_REQUEST['title']);
-				$_REQUEST['amount'] = wpsg_sinput("key", $_REQUEST['amount']);
-
-				$title = explode('|', $_REQUEST['title']);
-				$order_id = $title[0];
-				$token = base64_decode($title[1]);
-				
-				$order_data = $this->shop->cache->loadOrder($order_id);
-				
-				if ($order_data['id'] != $order_id || $order_id <= 0) throw new \wpsg\Exception(__('UngÃŒltiger Titel oder Bestellung nicht gefunden bei MP Request', 'wpsg'));
-				
-				$token_check = md5($this->shop->get_option('wpsg_mod_micropayment_accesskey').$order_data['cdate']);
-				
-				if ($token_check != $token) throw new \wpsg\Exception(__('UngÃŒltiger Sicherheitstoken bei MP Request', 'wpsg'));
-				
-				$this->db->ImportQuery(WPSG_TBL_OL, array(
-					"title" => __("Micropayment REQUEST", "wpsg"),
-					"cdate" => "NOW()",
-					"o_id" => wpsg_q($order_id),
-					"mailtext" => wpsg_q(wpsg_hspc(print_r($_REQUEST, 1)))
-				));
-				
-				switch ($_REQUEST['function']) {
-					
-					case 'billing':
-						
-						if ($this->shop->setPayMent($order_id, $_REQUEST['amount'] / 100)) {
-								
-							$this->shop->setOrderStatus($order_id, 100, true);
-							
-						}
-						
-						break; 
-					
-				}
-				
-				$url = get_permalink($this->shop->get_option('wpsg_mod_micropayment_successPage'));
-
-				echo "status=ok\nurl=".$url."\ntarget=_top\nforward=1";
-				exit;
-				
-			}
-		    */
-
-            if (\get_the_ID() === intval($this->shop->get_option('wpsg_page_basket'))) {
-
-mail("daniel@maennchen1.de", "MicroPayment Test", print_r($_REQUEST, true));
+            if (\get_the_ID() === intval($this->shop->get_option('wpsg_page_basket')) && wpsg_isSizedString($_REQUEST['function'], 'billing')) {
+
+                $oOrder = wpsg_order::getInstance($_REQUEST['order_id']);
+
+                if ($oOrder->isLoaded()) {
+
+                    // Ich ignoriere Zahlungen die bereits extern gezahlt gemeldet wurden
+                    //if ($oOrder->__get('ext_payed') === '1') exit;
+
+                    try {
+
+                        // DNS Backcheck
+                        $arHosts = ['proxy.micropayment.de', 'access.micropayment.de', 'service.micropayment.de', 'micropayment.de'];
+                        $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
+
+                        if (!in_array($host, $arHosts)) {
+
+                            throw new \Exception(
+                                wpsg_translate(__('Hostname #1# ist nicht in den erlaubten Hosts (#2#) enthalten', 'wpsg'), $host, implode(', ', $arHosts))
+                            );
+
+                        }
+
+                        if ($this->getNotificationPassword() !== wpsg_getStr($_REQUEST['notification_password'])) {
+
+                            throw new \Exception(
+                                wpsg_translate(
+                                    __('Ãbermitteltes Benachrichtigungspasswort (#1#) stimmt nicht mit dem hinterlegten (#2#) ÃŒberein.', 'wpsg'),
+                                    wpsg_getStr($_REQUEST['notification_password']),
+                                    $this->getNotificationPassword()
+                                )
+                            );
+
+                        }
+
+                        if ($oOrder->getToPay(WPSG_BRUTTO) !== wpsg_getFloat($_REQUEST['amount']) / 100) {
+
+                            throw new \Exception(
+                                wpsg_translate(
+                                    __('Ãbermittelter Zahlbetrag (#1#) stimmt nicht mit der Bestellung (#2#) ÃŒberein.', 'wspg'),
+                                    wpsg_getFloat($_REQUEST['amount']) / 100,
+                                    $oOrder->getToPay(WPSG_BRUTTO)
+                                )
+                            );
+
+                        }
+
+
+                        if ($this->shop->setPayMent($oOrder->getId(), $_REQUEST['amount'] / 100)) {
+
+                            $this->shop->setOrderStatus($oOrder->getId(), 100, true);
+
+                            $this->db->UpdateQuery(WPSG_TBL_ORDER, ['ext_payed' => '1'], " `id` = '".wpsg_q($oOrder->getId())."' ");
+
+                            $oOrder->addLogEntry(__('MicroPayment Zahlungseingang', 'wpsg'), print_r($_REQUEST, true));
+
+                        } else throw new \Exception(__('Zahlung konnte nicht validiert werden.', 'wpsg'));
+
+                        $url = wpsg_ShopController::getShop()->getDoneURL($oOrder->getId());
+
+                    } catch (\Exception $e) {
+
+                        $oOrder->addLogEntry(__('MicroPayment Fehler', 'wpsg'), $e->getMessage()."\r\n".print_r($_REQUEST, true));
+                        $url = \get_permalink($this->shop->get_option('wpsg_mod_micropayment_paywindow_page_error'));
+
+                    }
+
+                } else {
+
+                    $url = \get_permalink($this->shop->get_option('wpsg_mod_micropayment_paywindow_page_error'));
+
+                }
+
+                $delimiter = "\n";
+                $status = 'ok';
+                $target = '_self';
+                $forward = '1';
+
+                $response = '';
+                $response .= 'status='.$status;
+                $response .= $delimiter;
+                $response .= 'url='.$url;
+                $response .= $delimiter;
+                $response .= 'forward='.$forward;
+                $response .= $delimiter;
+                $response .= 'target='.$target;
+                $response .= $delimiter;
+
+                echo $response;
+                exit;
 
             }
@@ -372,4 +417,20 @@
         }
 
+        public function getNotificationPassword() {
+
+            $notification_password = $this->shop->get_option('wpsg_mod_micropayment_paywindow_notification_password');
+
+            if (!wpsg_isSizedString($notification_password)) {
+
+                $notification_password = wpsg_genCode(32);
+
+                $this->shop->update_option('wpsg_mod_micropayment_paywindow_notification_password', $notification_password);
+
+            }
+
+            return $notification_password;
+
+        }
+
 	} // class wpsg_mod_micropayment extends wpsg_mod_basic
 
Index: /mods/wpsg_mod_productvariants.class.php
===================================================================
--- /mods/wpsg_mod_productvariants.class.php	(revision 7753)
+++ /mods/wpsg_mod_productvariants.class.php	(revision 7754)
@@ -1,3 +1,5 @@
 <?php
+
+    use \wpsg\M1;
 
 	/**
@@ -2292,5 +2294,29 @@
             
         }
-        
-	} // class wpsg_mod_productvariants extends wpsg_mod_basic
-
+
+        public function product_deletePermanently($product_id) {
+
+		    if (!M1::isSizedInt($product_id)) throw new \wpsg\Exception(__('Produkt mit ungÃŒltiger ID kann nicht gelÃ¶scht werden.', 'wpsg'));
+
+            $arVariantID = $this->db->fetchAssocField("SELECT `id` FROM `".WPSG_TBL_VARIANTS."` WHERE `product_id` = '".M1::q($product_id)."' ");
+
+            foreach ($arVariantID as $variant_id) {
+
+                // Variationen lÃ¶schen
+                $this->db->Query("DELETE FROM `".WPSG_TBL_VARIANTS_VARI."` WHERE `variant_id` = '".M1::q($variant_id)."' ");
+
+            }
+
+            // Produktvarianten lÃ¶schen
+            $this->db->Query("DELETE FROM `".WPSG_TBL_VARIANTS."` WHERE `product_id` = '".M1::q($product_id)."' ");
+
+            // Product <-> Variation lÃ¶schen
+            $this->db->Query("DELETE FROM `".WPSG_TBL_PRODUCTS_VARIATION."` WHERE `product_id` = '".M1::q($product_id)."' ");
+
+            // Product <-> Variant lÃ¶schen
+            $this->db->Query("DELETE FROM `".WPSG_TBL_PRODUCTS_VARIANT."` WHERE `product_id` = '".M1::q($product_id)."' ");
+
+        }
+
+    } // class wpsg_mod_productvariants extends wpsg_mod_basic
+
Index: /mods/wpsg_mod_produktattribute.class.php
===================================================================
--- /mods/wpsg_mod_produktattribute.class.php	(revision 7753)
+++ /mods/wpsg_mod_produktattribute.class.php	(revision 7754)
@@ -1,3 +1,5 @@
 <?php
+
+    use \wpsg\m1;
 
 	/**
@@ -652,5 +654,9 @@
 		} // private function pa_listAction()
 
+        public function product_deletePermanently($product_id) {
+
+		    $this->db->Query("DELETE FROM `".WPSG_TBL_PRODUCTS_AT."` WHERE `p_id` = '".M1::q($product_id)."' ");
+
+        }
+
 	} // class wpsg_mod_produktattribute extends wpsg_mod_basic
-
-?>
Index: /system/old/mod_micropayment/debugInfo.phtml
===================================================================
--- /system/old/mod_micropayment/debugInfo.phtml	(revision 7754)
+++ /system/old/mod_micropayment/debugInfo.phtml	(revision 7754)
@@ -0,0 +1,33 @@
+<?php
+
+	/**
+	 * Template fÃŒr die Ausgabe von Debug Informationen des Micropayment Moduls
+	 */
+
+?>
+<h1>Modul "Micropayment"</h1>
+<pre class="wpsg_debug">
+Billing URL (cc): <?php echo ((array_key_exists('wpsg_mod_micropayment', $this->arModule))?$this->arModule['wpsg_mod_micropayment']->event_creditcard_url:''); ?> 
+Billing URL (dbt): <?php echo ((array_key_exists('wpsg_mod_micropayment', $this->arModule))?$this->arModule['wpsg_mod_micropayment']->event_directdebit_url:''); ?> 
+Billing URL (eb2p): <?php echo ((array_key_exists('wpsg_mod_micropayment', $this->arModule))?$this->arModule['wpsg_mod_micropayment']->event_ebank2pay_url:''); ?> 
+Billing URL (pp): <?php echo ((array_key_exists('wpsg_mod_micropayment', $this->arModule))?$this->arModule['wpsg_mod_micropayment']->event_prepayment_url:''); ?> 
+Billing URL (c2p): <?php echo ((array_key_exists('wpsg_mod_micropayment', $this->arModule))?$this->arModule['wpsg_mod_micropayment']->event_call2pay_url:''); ?> 
+Billing URL (hp): <?php echo ((array_key_exists('wpsg_mod_micropayment', $this->arModule))?$this->arModule['wpsg_mod_micropayment']->event_handypay_url:''); ?> 
+(Infoservice) Account-ID: <?php echo substr($this->get_option('wpsg_mod_micropayment_projectid'), 0, 1).'('.strlen($this->get_option('wpsg_mod_micropayment_handypay_activ')).')'; ?> 
+Accesskey LÃ€nge: <?php echo strlen($this->get_option('wpsg_mod_micropayment_accesskey')); ?> 
+Version: <?php echo WPSG_VERSION; ?> 
+Aktivierte Bezahlmodule: <?php 
+	
+	$arPayment = array();
+	if ($this->get_option('wpsg_mod_micropayment_creditcard_activ') == '1') $arPayment[] = 'cc';
+	if ($this->get_option('wpsg_mod_micropayment_directdebit_activ') == '1') $arPayment[] = 'dbt';
+	if ($this->get_option('wpsg_mod_micropayment_ebank2pay_activ') == '1') $arPayment[] = 'eb2p';
+	if ($this->get_option('wpsg_mod_micropayment_prepayment_activ') == '1') $arPayment[] = 'pp';
+	if ($this->get_option('wpsg_mod_micropayment_call2pay_name') == '1') $arPayment[] = 'c2p';
+	if ($this->get_option('wpsg_mod_micropayment_handypay_activ') == '1') $arPayment[] = 'hp';
+
+	if (wpsg_isSizedArray($arPayment)) echo implode(',', $arPayment);
+	else echo 'Keine';
+	
+?> 
+</pre>
Index: /system/old/mod_micropayment/order_done.phtml
===================================================================
--- /system/old/mod_micropayment/order_done.phtml	(revision 7754)
+++ /system/old/mod_micropayment/order_done.phtml	(revision 7754)
@@ -0,0 +1,122 @@
+<?php
+
+	/**
+	 * Template welches den Zahlungsdienstleister nach Bestellabschluss einbindet
+	 */
+
+?>
+<?php if (wpsg_isSizedString($this->view['wpsg_mod_micropayment']['payLink'])) { ?>
+<?php echo __('Klicken Sie auf das folgende Logo um ihre Bestellung zu bezahlen.', 'wpsg'); ?>
+<br /><br />
+
+<a href="<?php echo $this->view['wpsg_mod_micropayment']['payLink']; ?>"><img src="<?php echo $this->view['wpsg_mod_micropayment']['logo']; ?>" alt="<?php echo $this->view['wpsg_mod_micropayment']['title']; ?>" /></a>
+
+	<?php if ($this->get_option('wpsg_mod_micropayment_paystart') == '1') { ?>
+	<script type="text/javascript">
+	 
+		jQuery(document).ready(function() { 
+			window.setTimeout(function() {
+	    	location.href = "<?php echo $this->view['wpsg_mod_micropayment']['payLink']; ?>";
+			}, 1000);
+		} );
+		
+	</script>
+	<?php } ?>
+
+<?php } else { ?>
+
+<p><?php echo __('Bitte geben Sie ihre Kreditkarteninformationen (Kartennummer, GÃŒltigkeitsdatum und PrÃŒfnummer) in folgende Felder ein. Die Daten werden an Micropayment ÃŒbermittelt und nicht durch uns gespeichert oder ausgewertet.', 'wpsg'); ?></p>
+
+<form method="post" id="wpsg_mod_micropayment_creditcard">
+
+	<div class="micropayment_card">
+		<div class="front card">
+			<div class="chip"></div>
+			<div class="number"><input placeholder="<?php echo __('Kreditkartennummer', 'wpsg'); ?>" type="text" name="number" /></div>
+			<div class="bankname"><?php echo __('Kreditkarte - Vorderseite', 'wpsg'); ?></div>
+			<div class="name"><?php echo __('Max Mustermann', 'wpsg'); ?></div>
+			<div class="validthrough"><?php echo __('GÃŒltig bis', 'wpsg'); ?>:</div>
+			<div class="valid">
+				<select name="expiryMonth">
+					<?php for ($i = 1; $i <= 12; $i ++) { ?>
+					<option value="<?php echo $i; ?>"><?php echo str_pad($i, 2, '0', STR_PAD_LEFT); ?>
+					<?php } ?>		
+				</select>
+				<span>/</span>
+				<select name="expiryYear">
+					<?php for ($i = date('Y'); $i <= date('Y') + 10; $i ++) { ?>
+					<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
+					<?php } ?>
+				</select>						
+			</div>			
+		</div>	
+		
+		<div class="back card">
+			<div class="bankname"><?php echo __('Kreditkarte - RÃŒckseite', 'wpsg'); ?></div>
+			<div class="blackmagnetic"></div>
+			<div class="number"><?php echo __('HC600214C', 'wpsg'); ?></div>
+			<div class="signature"><?php echo __('Unterschrift Max Mustermann', 'wpsg'); ?></div>
+			<div class="sign"><input type="text" name="cvc2" value="" placeholder="<?php echo __('PrÃŒfnummer', 'wpsg'); ?>" /></div>
+		</div>
+		
+		<input type="button" id="wpsg_mod_micropayment_pay_button" class="wpsg_button" value="<?php echo __('Zahlung starten', 'wpsg'); ?>" />
+		
+	</div>
+
+</form>
+
+<script type="text/javascript">/* <![CDATA[ */
+
+	jQuery(document).ready(function() {
+
+		jQuery('#wpsg_mod_micropayment_pay_button').bind('click', function() {
+			
+			var form_data = jQuery('#wpsg_mod_micropayment_creditcard').serialize();
+			
+			jQuery('.micropayment_card input, .micropayment_card select').prop('disabled', true);
+			
+			jQuery.ajax( {
+				url: wpsg_ajax.ajaxurl,
+				data: {
+					action: 'ajax',
+					wpsg_plugin: 'wpsg_mod_micropayment',
+					module_action: 'pay', 
+					form_data: form_data,
+					order_id: <?php echo $this->view['o_id']; ?>
+				},
+				success: function(data) {
+
+					if (data === "1")
+					{
+
+						alert('<?php echo __('Vielen Dank fÃŒr Ihre Zahlungsreservierung.', 'wpsg'); ?>');
+						location.href = '<?php echo get_permalink($this->get_option('wpsg_mod_micropayment_successPage')); ?>';
+						
+					}
+					else
+					{
+
+						alert(data);
+
+					}
+
+					jQuery('.micropayment_card input, .micropayment_card select').prop('disabled', false);
+						
+				},
+				error: function(rdata, data)
+				{
+					
+					alert("<?php echo __('Unerwarteter Serverfehler!', 'wpsg'); ?>");
+					
+				}
+			} );
+			
+			return false;
+			
+		} );
+		
+	} );
+
+/* ]]> */</script>
+
+<?php } ?>
Index: /system/old/mod_micropayment/settings_edit.phtml
===================================================================
--- /system/old/mod_micropayment/settings_edit.phtml	(revision 7754)
+++ /system/old/mod_micropayment/settings_edit.phtml	(revision 7754)
@@ -0,0 +1,213 @@
+<?php
+
+	/**
+	 * Template fÃŒr die Einstellungen fÃŒr das Micropayment Modul
+	 */
+
+?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_accountid', __('Account ID', 'wpsg'), $this->get_option('wpsg_mod_micropayment_accountid'), array('help' => 'wpsg_mod_micropayment_accountid')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_projectid', __('Projekt ID', 'wpsg'), $this->get_option('wpsg_mod_micropayment_projectid'), array('help' => 'wpsg_mod_micropayment_projectid')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_accesskey', __('AccessKey', 'wpsg'), $this->get_option('wpsg_mod_micropayment_accesskey'), array('help' => 'wpsg_mod_micropayment_accesskey')); ?>
+<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_successPage', __('Seite nach erfolgreicher Zahlung', 'wpsg'), $this->view['wpsg_mod_micropayment']['arPages'], $this->get_option('wpsg_mod_micropayment_successPage'), array('help' => 'wpsg_mod_micropayment_successpage')); ?>
+<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_paystart', __('Zahlungs sofort starten', 'wpsg'), $this->get_option('wpsg_mod_micropayment_paystart')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_apiURL', __('API URL', 'wpsg'), $this->view['wpsg_mod_micropayment']['apiURL'], array('readonly' => true, 'hint' => __('Muss im micropaymentâ¢ Interface hinterlegt werden.', 'wpsg'), 'help' => 'wpsg_mod_micropayment_apiURL')); ?>
+<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_sandbox', __('Sandbox', 'wpsg'), $this->get_option('wpsg_mod_micropayment_sandbox')); ?>
+<br />
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_account', __('Account (FÃŒr Webmasterbewerbung)', 'wpsg'), $this->get_option('wpsg_mod_micropayment_account'), array('help' => 'wpsg_mod_micropayment_account')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_layout', __('Layout', 'wpsg'), $this->get_option('wpsg_mod_micropayment_layout'), array('help' => 'wpsg_mod_micropayment_layout')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_bgcolor', __('Hintergrundfarbe', 'wpsg'), $this->get_option('wpsg_mod_micropayment_bgcolor'), array('help' => 'wpsg_mod_micropayment_bgcolor')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_campaign', __('Kampagne des Projektinhabers', 'wpsg'), $this->get_option('wpsg_mod_micropayment_campaign'), array('help' => 'wpsg_mod_micropayment_campaign')); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_bggfx', __('Hintergrundgrafik fÃŒr Zahlfenster', 'wpsg'), $this->get_option('wpsg_mod_micropayment_bggfx'), array ('help' => 'wpsg_mod_micropayment_bggfx')); ?>
+<br />
+<div class="wpsg_admin_box" id="wpsg_mod_micropayment_creditcard">
+	<div id="mail_global" class="head" style="border-bottom: 0px none;">
+		<div class="title">
+			<div class="fulltab"><?php echo __('CreditCard - Abrechnung per Creditkarte', 'wpsg'); ?></div>
+		</div>
+		<div class="content wpsg_admin_box_content" style="display: block;">
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_creditcard_activ', __('Zahlungsart "Kreditkarte" aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcard_activ'), array(
+				/* 'hint' => wpsg_translate(__('FÃŒr AbrechnungsbetrÃ€ge zwischen #1# und #2#', 'wpsg'), wpsg_ff(2.50, $this->get_option('wpsg_currency')), wpsg_ff(500, $this->get_option('wpsg_currency'))) */
+			)); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_creditcard_name', __('Bezeichnung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcard_name'), array('help' => 'wpsg_mod_micropayment_name')); ?>
+			<?php echo wpsg_drawForm_Textarea('wpsg_mod_micropayment_creditcard_hint', __('Hinweistext', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcard_hint'), array('help' => 'wpsg_mod_micropayment_hint')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_creditcard_logo', __('Alternative Logo URL', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcard_logo'), array('help' => 'wpsg_mod_micropayment_logo')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_creditcard_gebuehr', __('GebÃŒhr/Rabatt', 'wpsg'), wpsg_ff($this->get_option('wpsg_mod_micropayment_creditcard_gebuehr'), true), array('unit' => $this->get_option('wpsg_currency').' / %', 'help' => 'wpsg_mod_micropayment_gebuehr')); ?>
+			<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_creditcard_mwst', __('Mehrwertsteuersatz', 'wpsg'), wpsg_tax_groups(), $this->get_option('wpsg_mod_micropayment_creditcard_mwst'), array('help' => 'wpsg_mod_micropayment_mwst')); ?>
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_creditcard_mwstland', __('Keine MwSt. wenn Land steuerfrei', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcard_mwstland'), array('help' => 'wpsg_mod_micropayment_mwstland')); ?>			
+		</div>
+	</div>
+</div>
+<br />
+<div class="wpsg_admin_box" id="wpsg_mod_micropayment_creditcardreservation">
+	<div id="mail_global" class="head" style="border-bottom: 0px none;">
+		<div class="title">
+			<div class="fulltab"><?php echo __('CreditCard - Abrechnung per Creditkarte (Reservierung)', 'wpsg'); ?></div>
+		</div>
+		<div class="content wpsg_admin_box_content" style="display: block;">
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_creditcardreservation_activ', __('Zahlungsart "Kreditkarte mit Reservierung" aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcardreservation_activ'), array(
+				/* 'hint' => wpsg_translate(__('FÃŒr AbrechnungsbetrÃ€ge zwischen #1# und #2#', 'wpsg'), wpsg_ff(2.50, $this->get_option('wpsg_currency')), wpsg_ff(500, $this->get_option('wpsg_currency'))) */
+			)); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_creditcardreservation_name', __('Bezeichnung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcardreservation_name'), array('help' => 'wpsg_mod_micropayment_name')); ?>
+			<?php echo wpsg_drawForm_Textarea('wpsg_mod_micropayment_creditcardreservation_hint', __('Hinweistext', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcardreservation_hint'), array('help' => 'wpsg_mod_micropayment_hint')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_creditcardreservation_logo', __('Alternative Logo URL', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcardreservation_logo'), array('help' => 'wpsg_mod_micropayment_logo')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_creditcardreservation_gebuehr', __('GebÃŒhr/Rabatt', 'wpsg'), wpsg_ff($this->get_option('wpsg_mod_micropayment_creditcardreservation_gebuehr'), true), array('unit' => $this->get_option('wpsg_currency').' / %', 'help' => 'wpsg_mod_micropayment_gebuehr')); ?>
+			<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_creditcardreservation_mwst', __('Mehrwertsteuersatz', 'wpsg'), wpsg_tax_groups(), $this->get_option('wpsg_mod_micropayment_creditcardreservation_mwst'), array('help' => 'wpsg_mod_micropayment_mwst')); ?>			
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_creditcardreservation_mwstland', __('Keine MwSt. wenn Land steuerfrei', 'wpsg'), $this->get_option('wpsg_mod_micropayment_creditcardreservation_mwstland'), array('help' => 'wpsg_mod_micropayment_mwstland')); ?>			
+		</div>
+	</div>
+</div>
+<br />
+<div class="wpsg_admin_box" id="wpsg_mod_micropayment_directdebit">
+	<div id="mail_global" class="head" style="border-bottom: 0px none;">
+		<div class="title">
+			<div class="fulltab"><?php echo __('Lastschrift - Abrechnung per Lastschrift', 'wpsg'); ?></div>
+		</div>
+		<div class="content wpsg_admin_box_content" style="display: block;">
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_directdebit_activ', __('Zahlungsart "Lastschrift" aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_activ')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_directdebit_name', __('Bezeichnung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_directdebit_name'), array('help' => 'wpsg_mod_micropayment_name')); ?>
+			<?php echo wpsg_drawForm_Textarea('wpsg_mod_micropayment_directdebit_hint', __('Hinweistext', 'wpsg'), $this->get_option('wpsg_mod_micropayment_directdebit_hint'), array('help' => 'wpsg_mod_micropayment_hint')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_directdebit_logo', __('Alternative Logo URL', 'wpsg'), $this->get_option('wpsg_mod_micropayment_directdebit_logo'), array('help' => 'wpsg_mod_micropayment_logo')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_directdebit_gebuehr', __('GebÃŒhr/Rabatt', 'wpsg'), wpsg_ff($this->get_option('wpsg_mod_micropayment_directdebit_gebuehr'), true), array('unit' => $this->get_option('wpsg_currency').' / %', 'help' => 'wpsg_mod_micropayment_gebuehr')); ?>
+			<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_directdebit_mwst', __('Mehrwertsteuersatz', 'wpsg'), wpsg_tax_groups(), $this->get_option('wpsg_mod_micropayment_directdebit_mwst'), array('help' => 'wpsg_mod_micropayment_mwst')); ?>	
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_directdebit_mwstland', __('Keine MwSt. wenn Land steuerfrei', 'wpsg'), $this->get_option('wpsg_mod_micropayment_directdebit_mwstland'), array('help' => 'wpsg_mod_micropayment_mwstland')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_directdebit_subject', __('Betreff der Zahlung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_directdebit_subject'), array('help' => 'wpsg_mod_micropayment_subject')); ?>		
+		</div>
+	</div>
+</div>
+<br />
+<div class="wpsg_admin_box" id="wpsg_mod_micropayment_ebank2pay">
+	<div id="mail_global" class="head" style="border-bottom: 0px none;">
+		<div class="title">
+			<div class="fulltab"><?php echo __('eBank2Pay - Abrechnung per Online Banking', 'wpsg'); ?></div>
+		</div>
+		<div class="content wpsg_admin_box_content" style="display: block;">
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_ebank2pay_activ', __('Zahlungsart "eBank2Pay" aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_ebank2pay_activ'), array(
+				/* 'hint' => wpsg_translate(__('FÃŒr AbrechnungsbetrÃ€ge zwischen #1# und #2#', 'wpsg'), wpsg_ff(0.50, $this->get_option('wpsg_currency')), wpsg_ff(500, $this->get_option('wpsg_currency'))) */ 
+			)); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_ebank2pay_name', __('Bezeichnung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_ebank2pay_name'), array('help' => 'wpsg_mod_micropayment_name')); ?>
+			<?php echo wpsg_drawForm_Textarea('wpsg_mod_micropayment_ebank2pay_hint', __('Hinweistext', 'wpsg'), $this->get_option('wpsg_mod_micropayment_ebank2pay_hint'), array('help' => 'wpsg_mod_micropayment_hint')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_ebank2pay_logo', __('Alternative Logo URL', 'wpsg'), $this->get_option('wpsg_mod_micropayment_ebank2pay_logo'), array('help' => 'wpsg_mod_micropayment_logo')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_ebank2pay_gebuehr', __('GebÃŒhr/Rabatt', 'wpsg'), wpsg_ff($this->get_option('wpsg_mod_micropayment_ebank2pay_gebuehr'), true), array('unit' => $this->get_option('wpsg_currency').' / %', 'help' => 'wpsg_mod_micropayment_gebuehr')); ?>
+			<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_ebank2pay_mwst', __('Mehrwertsteuersatz', 'wpsg'), wpsg_tax_groups(), $this->get_option('wpsg_mod_micropayment_ebank2pay_mwst'), array('help' => 'wpsg_mod_micropayment_mwst')); ?>
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_ebank2pay_mwstland', __('Keine MwSt. wenn Land steuerfrei', 'wpsg'), $this->get_option('wpsg_mod_micropayment_ebank2pay_mwstland'), array('help' => 'wpsg_mod_micropayment_mwstland')); ?>						
+		</div>
+	</div>
+</div>
+<br />
+<div class="wpsg_admin_box" id="wpsg_mod_micropayment_prepayment">
+	<div id="mail_global" class="head" style="border-bottom: 0px none;">
+		<div class="title">
+			<div class="fulltab"><?php echo __('Vorkasse - Abrechnung per Vorkasse', 'wpsg'); ?></div>
+		</div>
+		<div class="content wpsg_admin_box_content" style="display: block;">
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_prepayment_activ', __('Zahlungsart "Vorkasse" aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_prepayment_activ')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_prepayment_name', __('Bezeichnung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_prepayment_name'), array('help' => 'wpsg_mod_micropayment_name')); ?>
+			<?php echo wpsg_drawForm_Textarea('wpsg_mod_micropayment_prepayment_hint', __('Hinweistext', 'wpsg'), $this->get_option('wpsg_mod_micropayment_prepayment_hint'), array('help' => 'wpsg_mod_micropayment_hint')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_prepayment_logo', __('Alternative Logo URL', 'wpsg'), $this->get_option('wpsg_mod_micropayment_prepayment_logo'), array('help' => 'wpsg_mod_micropayment_logo')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_prepayment_gebuehr', __('GebÃŒhr/Rabatt', 'wpsg'), wpsg_ff($this->get_option('wpsg_mod_micropayment_prepayment_gebuehr'), true), array('unit' => $this->get_option('wpsg_currency').' / %', 'help' => 'wpsg_mod_micropayment_gebuehr')); ?>
+			<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_prepayment_mwst', __('Mehrwertsteuersatz', 'wpsg'), wpsg_tax_groups(), $this->get_option('wpsg_mod_micropayment_prepayment_mwst'), array('help' => 'wpsg_mod_micropayment_mwst')); ?>
+			<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_prepayment_mwstland', __('Keine MwSt. wenn Land steuerfrei', 'wpsg'), $this->get_option('wpsg_mod_micropayment_prepayment_mwstland'), array('help' => 'wpsg_mod_micropayment_mwstland')); ?>
+			<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_prepayment_subject', __('Betreff der Zahlung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_prepayment_subject'), array('help' => 'wpsg_mod_micropayment_subject')); ?>			
+		</div>
+	</div>
+</div>
+<br />
+<div class="wpsg_admin_box" id="wpsg_mod_micropayment_call2pay">
+	<div id="mail_global" class="head" style="border-bottom: 0px none;">
+		<div class="title">
+			<div class="fulltab"><?php echo __('Call2Pay - Abrechnung per Anruf / Telefon', 'wpsg'); ?></div>
+		</div>
+		<div class="content wpsg_admin_box_content" style="display: block;">
+			
+			<div id="wpsg_mod_micropayment_call2pay_layer" style="<?php echo (($this->get_option('wpsg_mod_micropayment_call2pay_activ') == '1')?'display:block;':'display:none;'); ?>">
+				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_call2pay_activ', __('Zahlungsart "Call2Pay" aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_call2pay_activ'), array(
+					/* 'hint' => wpsg_translate(__('FÃŒr AbrechnungsbetrÃ€ge zwischen #1# und #2#', 'wpsg'), wpsg_ff(0.05, $this->get_option('wpsg_currency')), wpsg_ff(50, $this->get_option('wpsg_currency'))) */
+				)); ?>
+				<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_call2pay_name', __('Bezeichnung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_call2pay_name'), array('help' => 'wpsg_mod_micropayment_name')); ?>
+				<?php echo wpsg_drawForm_Textarea('wpsg_mod_micropayment_call2pay_hint', __('Hinweistext', 'wpsg'), $this->get_option('wpsg_mod_micropayment_call2pay_hint'), array('help' => 'wpsg_mod_micropayment_hint')); ?>
+				<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_call2pay_logo', __('Alternative Logo URL', 'wpsg'), $this->get_option('wpsg_mod_micropayment_call2pay_logo'), array('help' => 'wpsg_mod_micropayment_logo')); ?>
+				<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_call2pay_gebuehr', __('GebÃŒhr/Rabatt', 'wpsg'), wpsg_ff($this->get_option('wpsg_mod_micropayment_call2pay_gebuehr'), true), array('unit' => $this->get_option('wpsg_currency').' / %', 'help' => 'wpsg_mod_micropayment_gebuehr')); ?>
+				<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_call2pay_mwst', __('Mehrwertsteuersatz', 'wpsg'), wpsg_tax_groups(), $this->get_option('wpsg_mod_micropayment_call2pay_mwst'), array('help' => 'wpsg_mod_micropayment_mwst')); ?>
+				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_call2pay_mwstland', __('Keine MwSt. wenn Land steuerfrei', 'wpsg'), $this->get_option('wpsg_mod_micropayment_call2pay_mwstland'), array('help' => 'wpsg_mod_micropayment_mwstland')); ?>
+			</div>
+			
+			<?php if ($this->get_option('wpsg_mod_micropayment_call2pay_activ') != '1') { ?>
+			<div id="wpsg_mod_micropayment_call2pay_infolayer">
+				<span style="color:red; font-weigh:bold;"><?php echo __('Bitte beachten Sie, dass es bei der Nutzung von Call2Pay folgende EinschrÃ€nkungen gibt', 'wpsg'); ?>:</span><br />
+				<ul>
+					<li><?php echo __('Nur Abrechnung von telekommunikationsbasierten Mehrwertdiensten mÃ¶glich', 'wpsg'); ?></li>
+					<li><?php echo __('Preisobergrenze von 30 Euro pro Transaktion', 'wpsg'); ?></li>
+					<li><?php echo __('National und international KEINE einheitliche GebÃŒhrenstruktur', 'wpsg'); ?></li>
+					<li><?php echo __('Teilweise abweichende Preise aus dem Mobilfunknetz', 'wpsg'); ?></li>					
+				</ul>
+				<br />
+				<span style="font-weight:bold;"><?php echo __('Sollten Sie sich unsicher sein, ob Sie diese Zahlarten nutzen kÃ¶nnen oder dÃŒrfen, melden Sie sich einfach bei uns!', 'wpsg'); ?></span>
+				<ul>
+					<li><?php echo __('Ansprechpartner', 'wpsg'); ?>: Martin Eliason</li>
+					<li><?php echo __('Telefon (Festnetz)', 'wpsg'); ?>: +49 â (0)30 â 64904255</li>
+					<li><?php echo __('eMail', 'wpsg'); ?>: <a href="mailto:meliason@micropayment.de">meliason@micropayment.de</a></li>
+					<li><?php echo __('Stichwort', 'wpsg'); ?>: WordPress-Shopmodul</li>
+				</ul>
+				<br />
+				<input type="button" class="button" onclick="jQuery('#wpsg_mod_micropayment_call2pay_infolayer').hide(); jQuery('#wpsg_mod_micropayment_call2pay_layer').show();" value="<?php echo __('Ich habe einen entsprechenden Account und kann die Zahlungsart nutzen.', 'wpsg'); ?>" />
+			</div>
+			<?php } ?>			
+												
+		</div>
+	</div>
+</div>
+<br />
+<div class="wpsg_admin_box" id="wpsg_mod_micropayment_handypay">
+	<div id="mail_global" class="head" style="border-bottom: 0px none;">
+		<div class="title">
+			<div class="fulltab"><?php echo __('HandyPay - Abrechnung per SMS / Tan', 'wpsg'); ?></div>
+		</div>
+		<div class="content wpsg_admin_box_content" style="display: block;">
+		
+			<div id="wpsg_mod_micropayment_handypay_layer" style="<?php echo (($this->get_option('wpsg_mod_micropayment_handypay_activ') == '1')?'display:block;':'display:none;'); ?>">
+		
+				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_handypay_activ', __('Zahlungsart "Call2Pay" aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_handypay_activ'), array(
+					/* 'hint' => wpsg_translate(__('FÃŒr AbrechnungsbetrÃ€ge zwischen #1# und #2#', 'wpsg'), wpsg_ff(0.50, $this->get_option('wpsg_currency')), wpsg_ff(5.00, $this->get_option('wpsg_currency'))) */
+				)); ?>
+				<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_handypay_name', __('Bezeichnung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_handypay_name'), array('help' => 'wpsg_mod_micropayment_name')); ?>
+				<?php echo wpsg_drawForm_Textarea('wpsg_mod_micropayment_handypay_hint', __('Hinweistext', 'wpsg'), $this->get_option('wpsg_mod_micropayment_handypay_hint'), array('help' => 'wpsg_mod_micropayment_hint')); ?>
+				<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_handypay_logo', __('Alternative Logo URL', 'wpsg'), $this->get_option('wpsg_mod_micropayment_handypay_logo'), array('help' => 'wpsg_mod_micropayment_logo')); ?>
+				<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_handypay_gebuehr', __('GebÃŒhr/Rabatt', 'wpsg'), wpsg_ff($this->get_option('wpsg_mod_micropayment_handypay_gebuehr'), true), array('unit' => $this->get_option('wpsg_currency').' / %', 'help' => 'wpsg_mod_micropayment_gebuehr')); ?>
+				<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_handypay_mwst', __('Mehrwertsteuersatz', 'wpsg'), wpsg_tax_groups(), $this->get_option('wpsg_mod_micropayment_handypay_mwst'), array('help' => 'wpsg_mod_micropayment_mwst')); ?>
+				<?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_handypay_mwstland', __('Keine MwSt. wenn Land steuerfrei', 'wpsg'), $this->get_option('wpsg_mod_micropayment_handypay_mwstland'), array('help' => 'wpsg_mod_micropayment_mwstland')); ?>						
+			</div>
+		
+			<?php if ($this->get_option('wpsg_mod_micropayment_handypay_activ') != '1') { ?>
+			<div id="wpsg_mod_micropayment_handypay_infolayer">
+				<span style="color:red; font-weigh:bold;"><?php echo __('Bitte beachten Sie, dass es bei der Nutzung von HandyPay folgende EinschrÃ€nkungen gibt', 'wpsg'); ?>:</span><br />
+				<ul>
+					<li><?php echo __('Nur Abrechnung von telekommunikationsbasierten Mehrwertdiensten mÃ¶glich', 'wpsg'); ?></li>
+					<li><?php echo __('Preise nicht frei tarifierbar, nur vorgegebene Tarifstruktur nutzbar', 'wpsg'); ?></li>
+					<li><?php echo __('National und international KEINE einheitliche GebÃŒhrenstruktur', 'wpsg'); ?></li>					
+				</ul>
+				<br />
+				<span style="font-weight:bold;"><?php echo __('Sollten Sie sich unsicher sein, ob Sie diese Zahlarten nutzen kÃ¶nnen oder dÃŒrfen, melden Sie sich einfach bei uns!', 'wpsg'); ?></span>
+				<ul>
+					<li><?php echo __('Ansprechpartner', 'wpsg'); ?>: Martin Eliason</li>
+					<li><?php echo __('Telefon (Festnetz)', 'wpsg'); ?>: +49 â (0)30 â 64904255</li>
+					<li><?php echo __('eMail', 'wpsg'); ?>: <a href="mailto:meliason@micropayment.de">meliason@micropayment.de</a></li>
+					<li><?php echo __('Stichwort', 'wpsg'); ?>: WordPress-Shopmodul</li>
+				</ul>
+				<br />
+				<input type="button" class="button" onclick="jQuery('#wpsg_mod_micropayment_handypay_infolayer').hide(); jQuery('#wpsg_mod_micropayment_handypay_layer').show();" value="<?php echo __('Ich habe einen entsprechenden Account und kann die Zahlungsart nutzen.', 'wpsg'); ?>" />
+			</div>
+			<?php } ?>
+			
+		</div>		
+	</div>
+</div>
+
+<script type="text/javascript">/* <![CDATA[ */
+
+	jQuery(document).ready(function() {
+
+		jQuery('.wpsg_admin_box').wpsg_adminbox();
+		
+	} );
+
+/* ]]> */</script>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/creditcard_nvp.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/creditcard_nvp.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/creditcard_nvp.php	(revision 7754)
@@ -0,0 +1,423 @@
+<pre>
+<?php
+/**
+ * @copyright 2008 micropayment GmbH
+ * @link http://www.micropayment.de/
+ * @link https://sipg.micropayment.de/public/creditcard/v1.2/nvp/
+ * @author Yves Berkholz
+ * @package MCP-Service-Client
+ * @subpackage Demo
+ * @version 1.02
+ */
+// =================================================================================================
+//
+// WICHTIG!!! Tragen Sie hier Ihren AccessKey ein
+//
+// Sie finden Ihren AccessKey im ControlCenter unter dem Menupunkt "Meine Konfiguration"
+//
+// =================================================================================================
+	if(!defined('MCP__ACCESSKEY')) define('MCP__ACCESSKEY', 'HIER IHREN ACCESSKEY EINTRAGEN');
+// =================================================================================================
+
+// TestModus (deaktivieren)
+// -------------------------------------------------------------------------------------------------
+	if(!defined('MCP__TESTMODE')) define('MCP__TESTMODE', 1);
+
+// ServiceURL die aufgerufen werden soll
+// -------------------------------------------------------------------------------------------------
+	if(!defined('MCP__CREDITCARDSERVICE_NVP_URL')) define('MCP__CREDITCARDSERVICE_NVP_URL', 'https://sipg.micropayment.de/public/creditcard/v1.2/nvp/');
+
+// Service-Interface das verwendet werden soll
+// -------------------------------------------------------------------------------------------------
+	if(!defined('MCP__CREDITCARDSERVICE_INTERFACE')) define('MCP__CREDITCARDSERVICE_INTERFACE', 'IMcpCreditcardService_v1_2');
+
+// Bibliothek/Service-Interface und den gewünschten Dispatcher laden
+// -------------------------------------------------------------------------------------------------
+	require_once( realpath('../lib/init.php') );
+	require_once( realpath('../services/' . MCP__CREDITCARDSERVICE_INTERFACE . '.php') );
+	require_once( MCP__SERVICELIB_DISPATCHER . 'TNvpServiceDispatcher.php');
+
+// Beispieldaten, die ggf. äbgeändert werden müssen
+// -------------------------------------------------------------------------------------------------
+	$email 		= 'max.mustermann2@example.com';
+	$firstname	= 'Max';
+	$surname	= 'Mustermann';
+	$bSendMail	= false;
+	$customerId = md5($email);
+	$customerIP = '127.0.0.1';
+
+	$address	= 'Mustergasse 123';
+	$zipcode	= '12345';
+	$town		= 'Berlin';
+	$country	= 'DE';
+
+	$cardNumber 		= '4111111111111111';
+	$cardCVC2			= '666';
+	$cardExpiryYear		= '2011';
+	$cardExpiryMonth	= '11';
+
+	$amount				= 250; // cent
+	$currency			= 'EUR';
+	$project			= 'demo';
+	$account			= null;
+	$projectCampaign	= null;
+	$webmasterCampaign	= null;
+	$title				= 'livesystemtest';
+	$paytext			= 'Live System Test';
+	$sessionFreeParams	= array(
+							'foo'		=> 'bar',
+							'bar'		=> 'foo',
+							'foobar'	=> 'foobar'
+						);
+
+
+/* ---------------------------------------------------------------------------------------------- *\
+| Folgender allgemeiner Ablaufplan ist für die Durchführung von Transaktion zu berücksichtigen
++---------------------------------------------------------------------------------------------------
+	  I. Es muß ein Kunde existieren für den gebucht werden soll:
+			(a) "customerCreate" legt einen neuen Kunden an
+			(b) "customerGet" liefert bestehende Kundendaten, kann auch zur Überprüfung der Existenz eines Kunden verwendet werden
+			(c) "customerSet" ändern bestehende Kundendaten
+
+	 II. Für den Kunden müssen Kreditkarteninformationen hinterlegt sein
+			(a) "creditcardDataSet" weist einem bestehenden Kunden Kreditkartendaten zu
+			(b) "creditcardDataGet" ruft Diese wieder ab
+
+	III. Es muß eine gültige Session vorhanden sein
+			(a) "sessionCreate" erzeugt eine Session mit allen allgemein relevanten Informationen für eine Buchung
+			(b) "sessionGet" liefert die mit einer Session vernknüpten Informationen, inklusive der durchgeführten Transaktionen
+
+\* ---------------------------------------------------------------------------------------------- */
+
+
+/* ---------------------------------------------------------------------------------------------- *\
+// Ablaufplan des Beispiels
++---------------------------------------------------------------------------------------------------
+	1. Kunden anlegen - falls dieser noch nicht existiert und ggf. mit zusätzlichen Daten versehen
+	2. Kreditkartendaten für Kunden abfragen / hinterlegen
+	3. Session erzeugen / abfragen
+
+	4a. Purchase Transaktion durchführen						$bPurchase
+	4b. Authorization Transaktion durchführen					$bAuthorization
+
+	5. Capture Transaktion durchführen							$bCapture
+
+	6a. Reversal Transaktion durchführen						$bReversal
+	6b. Refund Transaktion durchführen							$bRefund
+
+	   Session sowie verknüpfte Transaktionen abfragen
+\* ---------------------------------------------------------------------------------------------- */
+	$bResetData			= true;
+	$bPurchase 			= false;
+	$bAuthorization 	= false;
+	$bCapture			= false;
+	$bReversal			= false;
+	$bRefund			= false;
+
+// Bsp.-Kombination 1: Purchase + Rückbuchung
+//	$bPurchase 			= true;
+//	$bReversal			= true;
+
+// Bsp.-Kombination 2: Authorization + Freigabe
+//	$bAuthorization		= true;
+//	$bReversal			= true;
+
+// Bsp.-Kombination 2: Authorization + Capture + Rückbuchung
+//	$bAuthorization		= true;
+//	$bCapture			= true;
+//	$bRefund			= true;
+
+
+
+	try {
+	// Dispatcher initialisieren
+	// ---------------------------------------------------------------------------------------------
+		$dispatcher = new TNvpServiceDispatcher(MCP__CREDITCARDSERVICE_INTERFACE, MCP__CREDITCARDSERVICE_NVP_URL);
+
+	// Dispatcher aufrufen
+	// ---------------------------------------------------------------------------------------------
+	/*
+		// Möglichkeit 1
+		// dabei müssen alle Parameter in der Reihenfolge wie im Interface beschrieben, übergeben werden, auch jene die Standardwerte haben
+			$result = $dispatcher -> myMethod($param1, $param2, $param3);
+
+		// Möglichkeit 2
+			$aParams = array();
+			$aParams['param1'] = 'param1Value';
+		//  $aParams['param2'] kann, wenn er einen Standardwert hat, weggelassen werden
+			$aParams['param3'] = 'param3Value';
+			$result = $dispatcher -> send('myMethod', $aParams);
+	 */
+
+
+	// 1. Kunden anlegen - falls dieser noch nicht existiert und ggf. mit zusätzlichen Daten versehen
+	// ---------------------------------------------------------------------------------------------
+		try {
+			echo '<b>customerGet</b>:<br />';
+
+			$result = $dispatcher -> customerGet(MCP__ACCESSKEY, MCP__TESTMODE, $customerId);
+
+			print_r($result);
+			echo '<br />';
+		}
+		catch(Exception $e) {
+				echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+
+			switch($e -> getCode()) {
+				case 3003:
+				case 3110:
+					echo '<b>customerCreate</b>:<br />';
+
+
+					$result = $dispatcher -> customerCreate(MCP__ACCESSKEY, MCP__TESTMODE, $customerId, null, $firstname, $surname, $email, 'en-GB');
+					if($result) $customerId = $result;
+					print_r($result);
+					echo '<br />';
+				break;
+				default:
+					echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+				break;
+			}
+		}
+
+
+		echo '<br />';
+		echo '<b>customerSet-1</b>:<br/>';
+		$result = $dispatcher -> customerSet(MCP__ACCESSKEY, MCP__TESTMODE, $customerId, array('foo' => 'bar', 'internalstatus' => '123'), $firstname, $surname, $email, 'de-DE');
+		print_r($result);
+		echo '<br />';
+
+		echo '<br />';
+		echo '<b>customerSet-2</b>:<br/>';
+		$result = $dispatcher -> customerSet(MCP__ACCESSKEY, MCP__TESTMODE, $customerId, array('foo2' => 'bar2', 'internalstatus2' => '123'), $firstname, $surname, $email, 'de-DE');
+		print_r($result);
+		echo '<br />';
+
+		echo '<br />';
+		echo '<b>addressSet</b>:<br/>';
+		$result = $dispatcher -> addressSet(MCP__ACCESSKEY, MCP__TESTMODE, $customerId, $address, $zipcode, $town, $country);
+		print_r($result);
+
+		echo '<br />';
+		echo '<b>addressGet</b>:<br/>';
+		$result = $dispatcher -> addressGet(MCP__ACCESSKEY, MCP__TESTMODE, $customerId);
+		print_r($result);
+
+
+	// 2. Kreditkartendaten für Kunden abfragen / hinterlegen
+	// ---------------------------------------------------------------------------------------------
+		try {
+			echo '<b>creditcardDataGet</b>:<br />';
+			$result = $dispatcher -> creditcardDataGet(MCP__ACCESSKEY, MCP__TESTMODE, $customerId);
+			print_r($result);
+			echo '<br />';
+		}
+		catch(Exception $e) {
+			echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+		}
+
+
+		try {
+			echo '<b>creditcardDataSet</b>:<br />';
+			$result = $dispatcher -> creditcardDataSet(MCP__ACCESSKEY, MCP__TESTMODE, $customerId, $cardNumber, $cardExpiryYear, $cardExpiryMonth);
+			print_r($result);
+			echo '<br />';
+		}
+		catch(Exception $e) {
+			echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+		}
+
+	// 3. Session erzeugen / abfragen
+	// ---------------------------------------------------------------------------------------------
+		try {
+			$sessionId = null;
+			echo '<b>sessionCreate</b>:<br />';
+			$result = $dispatcher -> sessionCreate(MCP__ACCESSKEY, MCP__TESTMODE, $customerId, $sessionId, $project, $projectCampaign, $account, $webmasterCampaign, $amount, $currency, $title, $paytext, $customerIP, $sessionFreeParams, $bSendMail);
+			print_r($result);
+			echo '<br />';
+
+			$sessionId = $result['sessionId'];
+
+			echo '<b>sessionGet</b>:<br />';
+			$result = $dispatcher -> sessionGet(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId);
+			print_r($result);
+			echo '<br />';
+
+		}
+		catch(Exception $e) {
+			echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+		}
+
+	// 4a. Purchase Transaktion durchführen
+	// ---------------------------------------------------------------------------------------------
+	// erst ohne CVC2, falls der Kunde mit der Kreditkarte schonmal erfolgreich gebucht hat funktioniert doe Buchung
+	// sollte die Buchung fehlschlagen die Transaktion einfach nochmal mit CVC2-Code durchführen
+	// idealerweise läßt man vom Kunden den CVC2 Code immer angeben
+	// ---------------------------------------------------------------------------------------------
+	if($bPurchase) {
+
+		try {
+			echo '<b>transactionPurchase ohne CVC2</b>:<br />';
+			$result = $dispatcher -> transactionPurchase(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId);
+			print_r($result);
+
+			$transactionId = $result['transactionId'];
+			echo '<br />';
+		}
+		catch(Exception $e) {
+			switch($e -> getCode()) {
+				case 3510:
+					echo ' Failed<br />';
+
+					echo '<b>transactionPurchase mit CVC2</b>:<br />';
+					$result = $dispatcher -> transactionPurchase(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId, $cardCVC2);
+
+					$transactionId = $result['transactionId'];
+					print_r($result);
+					echo '<br />';
+				break;
+				default:
+					echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+				break;
+			}
+		}
+	} // if($bPurchase)
+
+
+	// 4b. Authorization Transaktion durchführen
+	// ---------------------------------------------------------------------------------------------
+	// erst ohne CVC2, falls der Kunde mit der Kreditkarte schonmal erfolgreich gebucht hat funktioniert doe Buchung
+	// sollte die Buchung fehlschlagen die Transaktion einfach nochmal mit CVC2-Code durchführen
+	// idealerweise läßt man vom Kunden den CVC2 Code immer angeben
+	// ---------------------------------------------------------------------------------------------
+	if($bAuthorization) {
+
+		try {
+			echo '<b>transactionAuthorization ohne CVC2</b>:<br />';
+			$result = $dispatcher -> transactionAuthorization(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId);
+			print_r($result);
+
+			$transactionId = $result['transactionId'];
+			echo '<br />';
+		}
+		catch(Exception $e) {
+			switch($e -> getCode()) {
+				case 3510:
+					echo ' Failed<br />';
+
+					echo '<b>transactionAuthorization mit CVC2</b>:<br />';
+					$result = $dispatcher -> transactionAuthorization(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId, $cardCVC2);
+
+					$transactionId = $result['transactionId'];
+					print_r($result);
+					echo '<br />';
+				break;
+				default:
+					echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+				break;
+			}
+		}
+	} // if($bAuthorization)
+
+	// 5. Capture Transaktion durchführen
+	// ---------------------------------------------------------------------------------------------
+	if($bCapture) {
+
+		try {
+			echo '<b>transactionCapture</b>:<br />';
+			$result = $dispatcher -> transactionCapture(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId, $transactionId);
+
+			$transactionId = $result['transactionId'];
+			print_r($result);
+			echo '<br />';
+		}
+		catch(Exception $e) {
+			echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+		}
+
+	} // if($bCapture)
+
+
+
+	// 6a. Reversal Transaktion durchführen
+	// ---------------------------------------------------------------------------------------------
+	if($bReversal) {
+
+		try {
+			echo '<b>transactionReversal</b>:<br />';
+			$result = $dispatcher -> transactionReversal(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId, $transactionId);
+			print_r($result);
+			echo '<br />';
+		}
+		catch(Exception $e) {
+			echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+		}
+
+	} // if($bReversal)
+
+	// 6b. Refund Transaktion durchführen
+	// ---------------------------------------------------------------------------------------------
+	if($bRefund) {
+
+		try {
+			echo '<b>transactionRefund</b>:<br />';
+			$result = $dispatcher -> transactionRefund(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId, $transactionId);
+			print_r($result);
+			echo '<br />';
+		}
+		catch(Exception $e) {
+			echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+		}
+
+	} // if($bRefund)
+
+
+
+
+	// Session sowie verknüpfte Transaktionen abfragen
+	// ---------------------------------------------------------------------------------------------
+		$result = $dispatcher -> sessionGet(MCP__ACCESSKEY, MCP__TESTMODE, $sessionId);
+		echo '<b>sessionGet</b>:<br />';
+		print_r($result);
+		echo '<br />';
+
+		if($result AND is_array($result['transactionIds'] )) {
+			foreach($result['transactionIds'] as $transactionId) {
+				try {
+
+					$result = $dispatcher -> transactionGet(MCP__ACCESSKEY, MCP__TESTMODE, $transactionId);
+					echo '<b>transactionGet</b>:<br />';
+					print_r($result);
+					echo '<br />';
+
+					if(MCP__TESTMODE) {
+						$result = $dispatcher -> transactionChargebackNotificationTest(MCP__ACCESSKEY, MCP__TESTMODE, $transactionId);
+						echo '<br /><b>transactionChargebackNotificationTest</b>:<br />';
+						print_r($result);
+						echo '<br />';
+					}
+
+
+				}
+				catch(Exception $e) {
+					echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+				}
+			}
+		}
+
+	// Testdaten zurücksetzen
+	// ---------------------------------------------------------------------------------------------
+		if(MCP__TESTMODE && $bResetData) {
+			$result = $dispatcher -> resetTest(MCP__ACCESSKEY, MCP__TESTMODE);
+			echo '<br /><b>resetTest</b>:<br />';
+			echo htmlentities($result);
+			echo '<br />';
+		}
+
+
+	}
+	catch(Exception $e) {
+		echo get_class($e) .'[' . $e -> getCode() . '] ' . $e -> getMessage() . '<br />';
+	}
+?>
+</pre>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/creditcard_nvp_notification_receiver.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/creditcard_nvp_notification_receiver.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/creditcard_nvp_notification_receiver.php	(revision 7754)
@@ -0,0 +1,186 @@
+<?php
+// -------------------------------------------------------------------------------------------------
+//  init library and import Nvp-Serializer
+//   - Serializer is required for right response encoding
+// -------------------------------------------------------------------------------------------------
+	require_once( realpath('../lib/init.php') );
+	require_once(MCP__SERVICELIB_SERIALIZER . 'TNvpSerializer.php');
+	
+// -------------------------------------------------------------------------------------------------
+//  helper classes
+// -------------------------------------------------------------------------------------------------
+	/**
+	 * status of notification processing
+	 */
+	class NotificationStatus {
+		/**
+		 * Notification was received and processed successfully
+		 */
+		const SUCCESS = 'SUCCESS';
+		
+		/**
+		 * Notification was received successfully, but an error occurred on processing
+		 */
+		const FAILED = 'FAILED';
+		
+		/**
+		 * Notification wasn't received / processed without an error
+		 */
+		const ERROR = 'ERROR';
+	}
+	
+	
+	/**
+	 * data mapper class for response
+	 *
+	 */
+	class NotificationResponse {
+		/**
+		 * @var string
+		 * @see NotificationStatus
+		 */
+		public $status			= null;
+		
+		/**
+		 * @var string
+		 */
+		public $statusMessage	= null;
+		
+		/**
+		 * @var array|null
+		 */
+		public $freeParam		= null;
+		
+		/**
+		 * @param string $status
+		 * @param string|null $statusMessage
+		 * @param array|null $freeParam
+		 */
+		public function __construct($status=NotificationStatus::ERROR, $statusMessage=null, $freeParam=null) {
+			$this -> status			= $status;
+			$this -> statusMessage	= $statusMessage;
+			$this -> freeParam		= $freeParam;
+		}
+	}
+	
+	/**
+	 * data mapper class contains data of "transactionChargeback" notification
+	 * for later usage
+	 */
+	class TransactionChargebackNotificationData {
+		/**
+		 * @var string
+		 */
+		public $sessionId		= '';
+
+		/**
+		 * @var string
+		 */
+		public $customerId		= '';
+		
+		/**
+		 * @var string
+		 */
+		public $transactionId	= '';
+		
+		/**
+		 * @var string
+		 */
+		public $transactionAuth	= '';
+		
+		/**
+		 * @var string
+		 */
+		public $title			= '';
+		
+		/**
+		 * @var string
+		 */
+		public $amount			= '';
+		
+		/**
+		 * @var integer
+		 */
+		public $currency		= '';
+		
+		/**
+		 * @var string
+		 */
+		public $country			= '';
+		
+		/**
+		 * @var array
+		 */
+		public $freeParam		= array();
+	}
+	
+	
+// -------------------------------------------------------------------------------------------------
+//  start main loop
+// -------------------------------------------------------------------------------------------------
+	do {
+		$oResponse = new NotificationResponse(NotificationStatus::ERROR);
+
+		$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
+		
+		switch($action) {
+			case 'transactionChargeback':
+				$oRequest = new TransactionChargebackNotificationData();
+				$oRequest -> sessionId			= isset($_REQUEST['sessionId']) ? (string)$_REQUEST['sessionId'] : null;
+				$oRequest -> customerId			= isset($_REQUEST['customerId']) ? (string)$_REQUEST['customerId'] : null;
+				$oRequest -> transactionId		= isset($_REQUEST['transactionId']) ? (string)$_REQUEST['transactionId'] : null;
+				$oRequest -> transactionAuth	= isset($_REQUEST['transactionAuth']) ? (string)$_REQUEST['transactionAuth'] : null;
+				$oRequest -> title				= isset($_REQUEST['title']) ? (string)$_REQUEST['title'] : null;
+				$oRequest -> amount				= isset($_REQUEST['amount']) ? (integer)$_REQUEST['amount'] : null;
+				$oRequest -> currency			= isset($_REQUEST['currency']) ? (string)$_REQUEST['currency'] : null;
+				$oRequest -> country			= isset($_REQUEST['country']) ? (string)$_REQUEST['country'] : null;
+				$oRequest -> freeParam			= isset($_REQUEST['freeParam']) AND is_array($_REQUEST['freeParam']) ? $_REQUEST['freeParam'] : null;		
+				
+				$oResponse -> status		= NotificationStatus::FAILED;
+				$oResponse -> statusMessage	= '';
+			break;
+			
+			case null:
+				$oResponse -> statusMessage = sPrintF('action is required but empty');
+			break 2; // switch, do...while
+			break 2;
+			default:
+				$oResponse -> statusMessage = sPrintF('action "%s" not supported', $action);
+			break 2; // switch, do...while
+		}		
+	
+	/*
+	 perform your notification processing on $oRequest here
+	 e.g. validation, storage or logging
+	 
+	 if an error occurred simply "break" do...while loop
+	 optionally assign statusmessage $oResponse -> statusMessage = 'damm, error';
+	 you can later read in controlcenter
+	*/
+		
+	// example: simplified validation
+		$err = array();
+		if( empty($oRequest -> sessionId) ) $err['sessionId']				= 'sessionId is empty';
+		if( empty($oRequest -> customerId) ) $err['customerId']				= 'customerId is empty';
+		if( empty($oRequest -> transactionId) ) $err['transactionId']		= 'transactionId is empty';
+		if( empty($oRequest -> transactionAuth) ) $err['transactionAuth']	= 'transactionAuth is empty';
+		if( empty($oRequest -> title) ) $err['title']						= 'title is empty';
+		if( empty($oRequest -> amount) ) $err['amount']						= 'amount is empty';
+
+		if( count($err) > 0) {
+			$oResponse -> statusMessage = implode(', ', $err);
+			break;
+		}
+	
+		
+		$oResponse -> status		= NotificationStatus::SUCCESS;
+		$oResponse -> statusMessage	= '';
+	} while(0);
+	
+// -------------------------------------------------------------------------------------------------
+//  send response to client
+// -------------------------------------------------------------------------------------------------
+	header('Content-type: text/plain; charset=iso-8859-1');
+	header('X-MCP-API-ResponseServiceProtocol: ' . TServiceProtocol::NVP);
+	echo TNvpSerializer::serialize($oResponse);
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/readme.txt
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/readme.txt	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/examples/readme.txt	(revision 7754)
@@ -0,0 +1,1 @@
+Hier finden Sie Beispiele für die Verwendung der jeweiligen Service-Interfaces.
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/clients/TSimpleHttpClient.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/clients/TSimpleHttpClient.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/clients/TSimpleHttpClient.php	(revision 7754)
@@ -0,0 +1,496 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage Clients
+	 * @version 1.0
+	 */	
+
+	require_once(MCP__SERVICELIB_COMMON . 'TException.php');
+
+	class TSimpleHttpClientException extends TException {
+		protected function getErrorMessageFile() {
+			return dirname(__FILE__) . '/TSimpleHttpClientException.txt';
+		}
+	}
+
+	abstract class TSimpleHttpBase {
+		/**
+		 * @var array
+		 */
+		protected $_headers = array();
+
+		/**
+		 * @var string
+		 */
+		protected $_body = '';
+
+		/**
+		 * @return array
+		 */
+		public function getHeaders() {
+			return $this -> _headers;
+		}
+
+
+		/**
+		 * @param array $value
+		 */
+		public function setHeaders($value) {
+			if( is_array($value) ) {
+				$this -> _headers = $value;
+			}
+		}
+
+		/**
+		 * @param string $name
+		 * @param string $value
+		 * @param boolean $replace
+		 */
+		public function addHeader($name, $value, $replace=true) {
+			if($replace OR !isset($this -> _headers[$name])) $this -> _headers[$name] = $value;
+		}
+
+		/**
+		 * @param string $name
+		 */
+		public function removeHeader($name) {
+			if(isset($this -> _headers[$name])) unset($this -> _headers[$name]);
+		}
+
+		/**
+		 * @param string $name
+		 * @return boolean
+		 */
+		public function isHeader($name) {
+			return array_key_exists($name, $this -> _headers);
+		}
+
+		/**
+		 * @param string $name
+		 * @return string
+		 */
+		public function getHeader($name) {
+			if(isset($this -> _headers[$name])) return $this -> _headers[$name];
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setBody($value) {
+			$this -> _body = (string)$value;
+		}
+
+		/**
+		 * @return string $value
+		 */
+		public function getBody() {
+			return $this -> _body;
+		}
+	}
+
+
+	class TSimpleHttpResponse extends TSimpleHttpBase {
+		/**
+		 * @var integer
+		 */
+		private $_statusCode		= 0;
+
+		/**
+		 * @var string
+		 */
+		private $_statusMessage		= '';
+
+		/**
+		 * @param integer $code
+		 * @param string $message
+		 * @param string $body
+		 * @param array $headers
+		 */
+		public function __construct($code=0, $message='', $body='', $headers=null) {
+			$this -> setStatusCode($code);
+			$this -> setStatusMessage($message);
+			$this -> setBody($body);
+			$this -> setHeaders($headers);
+		}
+
+		/**
+		 * @param integer $value
+		 */
+		protected function setStatusCode($value) {
+			$this -> _statusCode = (integer)$value;
+		}
+
+		/**
+		 * @return integer
+		 */
+		public function getStatusCode() {
+			return $this -> _statusCode;
+		}
+
+		/**
+		 * @param string $value
+		 */
+		protected function setStatusMessage($value) {
+			$this -> _statusMessage = (string)$value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getStatusMessage() {
+			return $this -> _statusMessage;
+		}
+
+		public function __toString() {
+			return $this -> getBody();
+		}
+
+		/**
+		 * @param string $data
+		 * @return TSimpleHttpResponse
+		 */
+		public static function parse(&$data) {
+			$tmp = preg_split('(\r\n\r\n|\r\r|\n\n)', $data);
+
+			$code 		= 0;
+			$message	= '';
+			$body 		= $data;
+			$headers	= array();
+			$tmpHeader		= trim($tmp[0]);
+
+			if( preg_match('/^HTTP\/\d.\d/i', $tmpHeader) ) {
+				$body = preg_replace('/' . preg_quote($tmpHeader, '/') . '/', '', $body);
+				$body = preg_replace('/^(\r\n\r\n|\r\r|\n\n)/', '', $body);
+			}			
+			else {
+				$tmpHeader = '';
+			}
+
+			if($tmpHeader) {
+				$proto = false;
+				$tmp = explode("\n", $tmpHeader);
+				foreach($tmp as $row) {
+					if(!$proto) {
+						if( $proto = preg_match('/^HTTP\/\d.\d (\d{3,}) (.*)/i', $row, $matches) ) {
+							$code		= $matches[1];
+							$message	= $matches[2];
+							continue;
+						}
+					}
+
+					list($k, $v) = preg_split('(: )', $row);
+					$headers[trim($k)] = trim($v);
+				}
+			}
+			
+		// UTF-8 Hack laut Guido
+			if(substr($body, 0, 3) === 'ï»¿') {
+				$body = substr($body, 3);
+			}
+			return new TSimpleHttpResponse($code, $message, $body, $headers);
+		}
+	}
+
+
+	class TSimpleHttpClient extends TSimpleHttpBase {
+		const SSL_PORT = 443;
+
+		const POST	= 'POST';
+		const GET	= 'GET';
+
+		const AUTHORIZATION_BASIC = 'Basic';
+
+		private $_requestMethod = self::POST;
+
+		/**
+		 * @var string
+		 */
+		private $_host = '';
+
+		/**
+		 * @var integer
+		 */
+		private $_port = 80;
+
+		/**
+		 * @var string
+		 */
+		private $_path = '/';
+
+		/**
+		 * @var string
+		 */
+		private $_query = '';
+
+		/**
+		 * @var string
+		 */
+		private $_user = '';
+
+		/**
+		 * @var string
+		 */
+		private $_pass = '';
+
+		/**
+		 * @var string
+		 */
+		private $_auth = self::AUTHORIZATION_BASIC;
+
+		/**
+		 * @var resource
+		 */
+		private $fp = null;
+
+		/**
+		 * @param string $method
+		 * @param string $uri
+		 */
+		public function __construct($method=TSimpleHttpClient::POST, $uri='') {
+			$this -> setRequestMethod($method);
+			$this -> parseUri($uri);
+		}
+
+		/**
+		 * @return TSimpleHttpResponse
+		 * @throws TSimpleHttpClientException
+		 */
+		public function request() {
+			if( $this -> getBody() ) $this -> setRequestMethod(self::POST);
+
+			$result = '';
+			switch($this -> getAuthorization() ) {
+				case self::AUTHORIZATION_BASIC:
+					if( $this -> getUser() )$this -> addHeader('Authorization', 'Basic ' . base64_encode($this -> getUser() . ':' . $this -> getPass()) );
+				break;
+			}
+
+		// modifications for GET requests
+			do {
+				if($this -> isPost()) break;
+				if($this -> isHeader('Content-type')) $this -> removeHeader('Content-type');
+				if($this -> isHeader('Content-length')) $this -> removeHeader('Content-length');
+			} while(0);
+
+		// modifications for POST requests
+			do {
+				if(!$this -> isPost()) break;
+				if( !$this -> isHeader('Content-length') ) $this -> addHeader('Content-length', (integer)strlen($this -> getBody()) );
+			} while(0);
+
+			$query = $this -> getQuery();
+			if($query) {
+				$path = $this -> getPath();
+				$path .= '?' .$query;
+				$this -> setPath($path);
+			}
+
+			$this -> streamOpen();
+			$this -> streamWrite( sPrintF("%s %s HTTP/1.0\n", $this -> getRequestMethod(), $this -> getPath()) );
+			$this -> streamWrite( sPrintF("Host: %s \n", $this -> getHost()) );
+
+			foreach( $this -> getHeaders() as $hName => $hValue)
+				$this -> streamWrite( sPrintF("%s: %s\n", $hName, $hValue) );
+
+			$this -> streamWrite("Connection: close\n\n");
+			if($this -> isPost() ) $this -> streamWrite( $this -> getBody() . "\n");
+
+			while(!$this -> streamEOF() ) {
+				$result .= $this -> streamRead(512);
+			}
+			$this -> streamClose();
+
+			return TSimpleHttpResponse::parse($result);
+
+		}
+
+		private function streamOpen() {
+			$errno 	= 0;
+			$errstr	= '';
+			$host = $this -> isSSL() ? 'ssl://' : '';
+			$host .= $this -> getHost();
+			$this -> fp = @fSockOpen($host, $this -> getPort(), $errno, $errstr, 30);
+			if(!$this -> fp) throw new TSimpleHttpClientException('streamopen_failed', $errno, $errstr, $this -> getHost(), $this -> getPort());
+		}
+
+		private function streamWrite($data) {
+			$result = fWrite($this -> fp, $data);
+			if($result === false) throw new TSimpleHttpClientException('streamwrite_failed', $data, $this -> getHost(), $this -> getPort(), $this -> getPath());
+			return $result;
+		}
+
+		private function streamRead($length) {
+			$result = fRead($this -> fp, $length);
+			if($result === false) throw new TSimpleHttpClientException('streamread_failed', $this -> getHost(), $this -> getPort(), $this -> getPath());
+			return $result;
+		}
+
+		private function streamEOF() {
+			return fEoF($this -> fp);
+		}
+
+		private function streamClose() {
+			if($this -> fp) @fClose($this -> fp);
+		}
+
+		/**
+		 * @param string $uri
+		 * @return boolean
+		 */
+		public function parseUri($uri) {
+			if( empty($uri) ) return false;
+			$uri = parse_url( $uri);
+
+			if( isset($uri['port'])) $this -> setPort($uri['port']);
+			if( isset($uri['scheme']) AND $uri['scheme'] == 'https') $this -> setPort(self::SSL_PORT);
+			if( isset($uri['host'])) $this -> setHost($uri['host']);
+			if( isset($uri['path'])) $this -> setPath($uri['path']);
+			if( isset($uri['query'])) $this -> setQuery($uri['query']);
+			if( isset($uri['user'])) $this -> setUser($uri['user']);
+			if( isset($uri['pass'])) $this -> setPass($uri['pass']);
+			if( isset($uri['user']) ) $this -> setAuthorization(self::AUTHORIZATION_BASIC);
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setAuthorization($value) {
+			$this -> _auth = $value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getAuthorization() {
+			return  $this -> _auth;
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setRequestMethod($value) {
+			$this -> _requestMethod = $value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getRequestMethod() {
+			return $this -> _requestMethod;
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setHost($value) {
+			$this -> _host = (string)$value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getHost() {
+			return $this -> _host;
+		}
+
+		/**
+		 * @param integer $value
+		 */
+		public function setPort($value) {
+			$this -> _port = (integer)$value;
+		}
+
+		/**
+		 * @return integer
+		 */
+		public function getPort() {
+			return $this -> _port;
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setPath($value) {
+			$this -> _path = (string)$value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getPath() {
+			return $this -> _path;
+		}		
+
+		/**
+		 * @param string $value
+		 */
+		public function setUser($value) {
+			$this -> _user = (string)$value;
+			$this -> setAuthorization(self::AUTHORIZATION_BASIC);
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getUser() {
+			return $this -> _user;
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setPass($value) {
+			$this -> _pass = (string)$value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getPass() {
+			return $this -> _pass;
+		}
+
+		/**
+		 * @param mixed $value
+		 * @param string only if $value is array or object
+		 */
+		public function setQuery($value, $argSeparator='&') {
+			if( is_scalar($value) ) {
+				$this -> _query = (string)$value;
+			}
+			else {
+				$this -> _query = http_build_query($value, '', $argSeparator);
+			}
+		}
+
+		/**
+		 * @param boolean $map
+		 * @return mixed
+		 */
+		public function getQuery($map=false) {
+			$result = $this -> _query;
+			if($map) parse_str($this -> _query, $result);
+			return $result;
+		}
+
+		/**
+		 *
+		 * @return boolean
+		 */
+		public function isSSL() {
+			return ($this -> _port == self::SSL_PORT);
+		}
+
+		
+
+		/**
+		 * @return boolean
+		 */
+		public function isPost() {
+			return ($this -> getRequestMethod() == self::POST);
+		}
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/clients/TSimpleHttpClientException.txt
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/clients/TSimpleHttpClientException.txt	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/clients/TSimpleHttpClientException.txt	(revision 7754)
@@ -0,0 +1,4 @@
+streamopen_failed				= An Error occured during connect to "{2}:{3}" #{0} "{1}"
+streamopen_ssl_not_supported	= SSL currently not supported
+streamwrite_failed				= An Error occured during writing data to stream "{1}:{2}{3}" {0}
+streamread_failed				= An Error occured during reading data from stream "{1}:{2}{3}"
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/ServiceReflection.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/ServiceReflection.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/ServiceReflection.php	(revision 7754)
@@ -0,0 +1,614 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage Reflection
+	 * @version 1.0
+	 */
+
+	class ServiceReflection {
+		/**
+		 * @var string
+		 */
+		private $_className = '';
+
+		/**
+		 * @var ClassServiceReflection
+		 */
+		private $_serviceClassReflection = null;
+
+		/**
+		 * @param string $className
+		 * @param integer $options
+		 * @param mixed $server
+		 */
+		public function __construct($className, $options=0) {
+			$this -> _className = $className;
+			$this -> reflectService($options);
+		}
+
+		/**
+		 * @return ClassServiceReflection
+		 */
+		public function getServiceClassReflection() {
+			return $this -> _serviceClassReflection;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getClass() {
+			return $this -> _className;
+		}
+
+
+		/**
+		 * @param integer $options
+		 */
+		protected function reflectService($options=0) {
+			$this -> _serviceClassReflection = ClassServiceReflection::createReflection(new ReflectionClass( $this -> getClass() ) );
+		}
+	}
+
+
+	abstract class BaseServiceReflection {
+		/**
+		 * @var string
+		 */
+		private $_type = '';
+
+		/**
+		 * @var string
+		 */
+		private $_description = '';
+
+		/**
+		 * @param string $type
+		 * @param string $description
+		 */
+		public function __construct($type='', $description='') {
+			$this -> setType($type);
+			$this -> setDescription($description);
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setType($value) {
+			$this -> _type = (string)$value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getType() {
+			return $this -> _type;
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setDescription($value) {
+			$this -> _description = (string)$value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getDescription() {
+			return $this -> _description;
+		}
+
+		protected static function removeCommentElements($value) {
+			$value = preg_replace('/(^[\\s]*\\/\\*\\*)|(^[\\s]\\*\\/)|(^[\\s]*\\*?\\s)|(^[\\s]*)|(^[\\t]*)/ixm', '', $value);
+			$value = preg_replace('/(\*\/)$/i', '', $value);
+			$value = trim($value);
+			return $value;
+		}
+
+		protected static function prepareDocComment($value) {
+			$value = self::removeCommentElements($value);
+			$value = str_replace("\r", '', $value);
+			$value = preg_replace("/([\\t])+/", "\t", $value);
+		    return explode("\n", $value);
+		}
+
+		/**
+		 * @param string $value
+		 * @return string
+		 */
+		protected static function getDescriptionBlock($value) {
+			$commentLines = self::prepareDocComment($value);
+
+			$result = '';
+			foreach($commentLines as $line) {
+				if($line == '')  continue;
+				if($line{0} == '@') continue;
+
+				$result .= $line;
+				$result .= "\n";
+			}
+
+			$result = trim($result);
+
+			return $result;
+		}
+
+	}
+
+	class NamedServiceReflectionBase extends BaseServiceReflection {
+		/**
+		 * @var string
+		 */
+		private $_name = null;
+
+		/**
+		 * @param string $name
+		 * @param string $type
+		 * @param string $description
+		 */
+		public function __construct($name='', $type='', $description='') {
+			parent::__construct($type, $description);
+			$this -> setName($name);
+		}
+
+		/**
+		 * @param string $value
+		 */
+		public function setName($value) {
+			$this -> _name = (string)$value;
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getName() {
+			return $this -> _name;
+		}
+
+	}
+
+	class ClassServiceReflection extends BaseServiceReflection {
+		/**
+		 * @var MethodServiceReflection[]
+		 */
+		private $_methods = array();
+
+		/**
+		 * @param MethodServiceReflection[] $value
+		 */
+		public function setMethods($value) {
+			if( !is_array($value) ) return;
+		}
+
+		/**
+		 * @return MethodServiceReflection[]
+		 */
+		public function getMethods() {
+			return $this -> _methods;
+		}
+
+		/**
+		 * @param string $name
+		 * @return MethodServiceReflection
+		 */
+		public function getMethod($name) {
+			if( !$this -> hasMethod($name) ) return null;
+			return $this -> _methods[$name];
+		}
+
+		/**
+		 * @param string $name
+		 * @return boolean
+		 */
+		public function hasMethod($name) {
+			return isset($this -> _methods[$name]);
+		}
+
+		/**
+		 * @param MethodServiceReflection $value
+		 */
+		public function addMethod(MethodServiceReflection $value) {
+			$this -> _methods[$value -> getName()] = $value;
+		}
+
+		static public function createReflection(ReflectionClass $reflection) {
+			$result = new ClassServiceReflection($reflection -> getName(), self::getDescriptionBlock($reflection -> getDocComment()));
+
+			$methods = $reflection -> getMethods();
+			foreach($methods as $method) {
+				if( !$method -> isPublic()) continue;
+				$result -> addMethod( MethodServiceReflection::createReflection($method) );
+			}
+			return $result;
+		 }
+
+		 public function getTypes() {
+		 	$result = array();
+		 	foreach($this -> getMethods() as $item) {
+		 		$result = array_merge($result, $item -> getTypes());
+		 	}
+		 	return $result;
+		 }
+	}
+
+
+	class MethodServiceReflection extends NamedServiceReflectionBase {
+		/**
+		 * @var ParameterServiceReflection[]
+		 */
+		private $_parameters = array();
+
+		/**
+		 * @var ReturnServiceReflection
+		 */
+		private $_return	= null;
+
+		/**
+		 * @param string $name
+		 * @param string $type
+		 * @param string $description
+		 * @param ParameterServiceReflection[] $parameters
+		 * @param ReturnServiceReflection $return
+		 */
+		public function __construct($name='', $type='', $description='', $parameters=null, $return=null) {
+			parent::__construct($name, $type, $description);
+			$this -> setParameters($parameters);
+			$this -> setReturn($return);
+		}
+
+		/**
+		 * @param ParameterServiceReflection[] $value
+		 */
+		public function setParameters($value) {
+			if( !is_array($value) ) return;
+			$_parameters = array();
+			foreach($value as $param) {
+				$this -> addParamter($param);
+			}
+		}
+
+		/**
+		 * @return ParameterServiceReflection[]
+		 */
+		public function getParameters() {
+			return $this -> _parameters;
+		}
+
+		/**
+		 * @return integer
+		 */
+		public function getNumberOfParameters() {
+			return count($this -> _parameters);
+		}
+
+		/**
+		 * @param ParameterServiceReflection $value
+		 */
+		public function addParamter(ParameterServiceReflection $value) {
+			$this -> _parameters[$value -> getName()] = $value;
+		}
+
+		/**
+		 * @param string $name
+		 * @return ParameterServiceReflection
+		 */
+		public function getParamter($name) {
+			if( !isset($this -> _parameters[$name]) ) return null;
+			return $this -> _parameters[$name];
+		}
+
+		/**
+		 * @param ReturnServiceReflection $value
+		 */
+		public function setReturn($value) {
+			if( !$value instanceof ReturnServiceReflection) return;
+			$this -> _return = $value;
+		}
+
+		/**
+		 * @return ReturnServiceReflection
+		 */
+		public function getReturn() {
+			return $this -> _return;
+		}
+
+		static public function createReflection(ReflectionMethod $reflection) {
+		 	$comment = $reflection -> getDocComment();
+		 	$result = new MethodServiceReflection($reflection -> getName(), '', self::getDescriptionBlock($comment));
+
+		 	$commentLines = self::prepareDocComment($comment);
+
+		 	$tmpParams	= array();
+		 	$return		= new ReturnServiceReflection('void', '');
+
+			$params = $reflection -> getParameters();
+			foreach($params as $param) {
+				$name = $param -> getName();
+				$tmpParams[$name] = new ParameterServiceReflection($name, 'mixed');
+
+				/* QUICKFIX: for Bug#62715 in PHP 5.3.16
+				 * @link https://bugs.php.net/bug.php?id=62715
+				 * Fatal error: Uncaught exception 'ReflectionException' with message 'Parameter is not optional'
+				 */
+				if(version_compare(str_replace(PHP_EXTRA_VERSION, '', PHP_VERSION) , '5.3.16', 'eq')) continue;
+
+				if( $param -> isDefaultValueAvailable() ) {
+					$tmpParams[$name] -> setHasDefault(true);
+					$tmpParams[$name] -> setRequired(false);
+					$tmpParams[$name] -> setDefault( $param -> getDefaultValue(), false);
+				}
+			}
+
+
+		 	foreach($commentLines as $line) {
+				if ($line == '') continue;
+				if ($line{0} != '@') continue;
+
+				if( preg_match('/^@param\s+([\w\[\]()]+)\s+\$([\w()]+)\s*(.*)/i', $line, $match) ) {
+					$type = $match[1];
+					$name = $match[2];
+					$desc = $match[3];
+					$param = new ParameterServiceReflection($name, $type, $desc);
+
+					if( preg_match('/\(default=(.*)\)/i', $desc, $regs) ) {
+						$param -> setHasDefault(true);
+						$param -> setRequired(false);
+
+						$default = $regs[1];
+						if($default == "''") {
+							$param -> setDefault('', false);
+						}
+						elseif($default{0} == "'") {
+							$default =  substr($default, 1, strlen($default) -2);
+							$param -> setDefault($default);
+						}
+						else {
+							$param -> setDefault($default);
+						}
+
+						$desc = preg_replace('/' . preg_quote('(default=' . $regs[1] . ')', '/') . '/i', '', $desc);
+						$param -> setDescription($desc);
+					}
+
+					$tmpParams[$name] = $param;
+				}
+
+				if( preg_match('/^@return\s+([\w\[\]()]+)\s*(.*)/i', $line, $match) ) {
+					$return -> setType($match[1]);
+					$return -> setDescription($match[2]);
+				}
+
+				if( preg_match('/^@result\s+([\w\[\]()]+)\s+\$([\w()]+)\s*(.*)/i', $line, $match) ) {
+
+					$name = $match[2];
+					$type = $match[1];
+					$desc = $match[3];
+
+					if( preg_match('/\(default=(.*)\)/i', $desc, $regs) ) {
+						$resultParam = new ParameterServiceReflection($name, $type, $desc);
+
+						$resultParam -> setHasDefault(true);
+						$resultParam -> setRequired(false);
+
+						$default = $regs[1];
+						if($default == "''") {
+							$resultParam -> setDefault('', false);
+						}
+						elseif($default{0} == "'") {
+							$default =  substr($default, 1, strlen($default) -2);
+							$resultParam -> setDefault($default);
+						}
+						else {
+							$resultParam -> setDefault($default);
+						}
+
+						$desc = preg_replace('/' . preg_quote('(default=' . $regs[1] . ')', '/') . '/i', '', $desc);
+						$resultParam -> setDescription($desc);
+
+						$return -> addResult( $resultParam );
+					}
+					else {
+						$return -> addResult( new NamedServiceReflectionBase($name, $type, $desc)  );
+					}
+				}
+			}
+
+			$result -> setParameters($tmpParams);
+			$result -> setReturn($return);
+
+		 	return $result;
+		 }
+
+		 public function getTypes() {
+		 	$result = $this -> getReturn() -> getTypes();
+
+		 	foreach($this -> getParameters() as $item) {
+		 		$result[$item -> getType()] = $item -> getType();
+		 	}
+		 	return $result;
+		 }
+
+	}
+
+
+	class ParameterServiceReflection extends NamedServiceReflectionBase {
+		/**
+		 * @var boolean
+		 */
+		private $_hasDefault = false;
+
+		/**
+		 * @var boolean
+		 */
+		private $_required = false;
+
+		/**
+		 * @var mixed
+		 */
+		private $_default = null;
+
+		/**
+		 * @param string $name
+		 * @param string $type
+		 * @param string $description
+		 * @param boolean $required
+		 * @param mixed $default
+		 */
+		public function __construct($name='', $type='', $description='', $hasDefault = false, $required=true, $default=null) {
+			parent::__construct($name, $type, $description);
+			$this -> setDefault($default);
+			$this -> setHasDefault($hasDefault);
+			$this -> setRequired($required);
+		}
+
+		/**
+		 * @param mixed $value
+		 * @param boolean $typeCast
+		 */
+		public function setDefault($value, $typeCast=true) {
+			if($typeCast) {
+				$type = gettype($value);
+
+				switch( strToLower($type) ) {
+					case 'boolean':
+					case 'bool':
+						$this -> _default = $value ? true : false;
+					break;
+
+					case 'double':
+					case 'float':
+						$this -> _default = (float)$value;
+					break;
+
+					case 'integer':
+						$this -> _default = (integer)$value;
+					break;
+
+					case 'null':
+						$this -> _default = null;
+					break;
+
+					case 'string':
+						if($value == 'null') $this -> _default = null;
+						elseif($value == 'true') $this -> _default = true;
+						elseif($value == 'false') $this -> _default = false;
+						else $this -> _default = $value;
+					break;
+
+					default:
+						$this -> _default = $value;
+					break;
+				}
+			}
+			else {
+				$this -> _default = $value;
+			}
+			$this -> setHasDefault(true);
+		}
+
+		/**
+		 * @return string
+		 */
+		public function getDefault() {
+			return $this -> _default;
+		}
+
+		public function getDefaultAsText() {
+			$result = $this -> _default;
+			if($result === null) {
+				$result = 'null';
+			}
+			elseif( is_bool($result) ) {
+				$result = $result ? 'true' : 'false';
+			}
+			elseif( is_string($result) ) {
+
+				if( is_numeric($result) OR $result === '' ) {
+				}
+				else {
+					$result = '\'' . $result . '\'';
+				}
+			}
+			return $result;
+		}
+
+		/**
+		 * @param boolean $value
+		 */
+		public function setRequired($value) {
+			$this -> _required = (boolean)$value;
+		}
+
+		/**
+		 * @return boolean
+		 */
+		public function getRequired() {
+			return $this -> _required;
+		}
+
+		/**
+		 * @param boolean $value
+		 */
+		public function setHasDefault($value) {
+			$this -> _hasDefault = (boolean)$value;
+		}
+
+		/**
+		 * @return boolean
+		 */
+		public function getHasDefault() {
+			return $this -> _hasDefault;
+		}
+
+	}
+
+
+	class ReturnServiceReflection extends BaseServiceReflection {
+		/**
+		 * @var NamedServiceReflectionBase[]
+		 */
+		protected $_results = array();
+
+		/**
+		 * @return integer
+		 */
+		public function getNumberOfResults() {
+			return count($this -> _results);
+		}
+
+		/**
+		 * @param NamedServiceReflectionBase[] $value
+		 */
+		public function setResults($value) {
+			if(!is_array($value)) return;
+		}
+
+		/**
+		 * @return NamedServiceReflectionBase[]
+		 */
+		public function getResults() {
+			return $this -> _results;
+		}
+
+		/**
+		 * @param NamedServiceReflectionBase $value
+		 */
+		public function addResult(NamedServiceReflectionBase $value) {
+			$this -> _results[$value -> getName()] = $value;
+		}
+
+		 public function getTypes() {
+		 	$result = array();
+		 	$result[$this -> getType()] = $this -> getType();
+
+		 	foreach($this -> getResults() as $item) {
+		 		$result[$item -> getType()] = $item -> getType();
+		 	}
+		 	return $result;
+		 }
+
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/TException.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/TException.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/TException.php	(revision 7754)
@@ -0,0 +1,180 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage Exception
+	 * @version 1.0
+	 */	
+
+
+	class TException extends Exception {
+		private $_errorCode = '';
+	
+		/**
+		 * Constructor.
+		 * @param string $errorCode error message. This can be a string that is listed
+		 * in the message file. If so, the message in the preferred language
+		 * will be used as the error message. Any rest parameters will be used
+		 * to replace placeholders ({0}, {1}, {2}, etc.) in the message.
+		 */
+		public function __construct($errorCode) {
+			$this -> _errorCode = $errorCode;
+			$errorMessage = $this -> translateErrorMessage($errorCode);
+			$args = func_get_args();
+			array_shift($args);
+			parent::__construct( $this -> replaceMessageToken($errorMessage, $args), (is_numeric($errorCode) ? $errorCode : null)  );
+		}
+	
+
+		/**
+		 * @param string $message
+		 * @param array $args
+		 * @return string
+		 */
+		protected function replaceMessageToken($message, $args) {
+			$n = count($args);
+			$tokens = array();
+			for($i=0; $i<$n; ++$i)
+				$tokens['{' . $i . '}'] = (string)$args[$i];
+			return strTr($message, $tokens);
+		}
+				
+		
+		/**
+		 * Translates an error code into an error message.
+		 * @param string $key error code that is passed in the exception constructor.
+		 * @return string the translated error message
+		 */
+		protected function translateErrorMessage($key) {
+			$msgFile = $this -> getErrorMessageFile();
+			if( ($entries = @file($msgFile) ) === false )
+				return $key;
+			else {
+				foreach($entries as $entry) {
+					$tmp = explode('=', $entry, 2);
+					$code		= isset($tmp[0]) ? $tmp[0] : '';
+					$message	= isset($tmp[1]) ? $tmp[1] : '';
+					
+					if( trim($code) == $key )
+						return trim($message);
+				}
+				return $key;
+			}
+		}
+	
+		/**
+		 * @return string path to the error message file
+		 */
+		protected function getErrorMessageFile() {
+			return dirname(__FILE__) . '/messages.txt';
+		}
+	
+		/**
+		 * @return string error code
+		 */
+		public function getErrorCode() {
+			return $this -> _errorCode;
+		}
+	
+		/**
+		 * @param string $code error code
+		 */
+		public function setErrorCode($code) {
+			$this -> _errorCode = $code;
+		}
+	
+		/**
+		 * @return string error message
+		 */
+		public function getErrorMessage() {
+			return $this -> getMessage();
+		}
+	
+		/**
+		 * @param string $message error message
+		 */
+		protected function setErrorMessage($message) {
+			$this -> message = $message;
+		}
+	}
+	
+	
+	class TSystemException extends TException {}
+	
+	
+	class TPhpErrorException extends TSystemException {
+		/**
+		 * Constructor.
+		 * @param integer $errno error number
+		 * @param string $errstr error string
+		 * @param string $errfile error file
+		 * @param integer $errline error line number
+		 */
+		public function __construct($errno, $errstr, $errfile, $errline) {
+			static $errorTypes = array(
+				E_ERROR           => 'Error',
+				E_WARNING         => 'Warning',
+				E_PARSE           => 'Parsing Error',
+				E_NOTICE          => 'Notice',
+				E_CORE_ERROR      => 'Core Error',
+				E_CORE_WARNING    => 'Core Warning',
+				E_COMPILE_ERROR   => 'Compile Error',
+				E_COMPILE_WARNING => 'Compile Warning',
+				E_USER_ERROR      => 'User Error',
+				E_USER_WARNING    => 'User Warning',
+				E_USER_NOTICE     => 'User Notice',
+				E_STRICT          => 'Runtime Notice'
+			);
+			$errorType = isset($errorTypes[$errno]) ? $errorTypes[$errno] : 'Unknown Error';
+			
+			parent::__construct( sPrintF('[%s] %s (@line %d in file %s)', $errorType, $errstr, $errline, $errfile) );
+		}
+	}
+
+	
+	/**
+	 * THttpException class
+	 *
+	 * THttpException represents an exception that is caused by invalid operations
+	 * of end-users. The {@link getStatusCode StatusCode} gives the type of HTTP error.
+	 */
+	class THttpException extends TSystemException {
+		private $_statusCode;
+	
+		/**
+		 * Constructor.
+		 * @param integer $statusCode HTTP status code, such as 404, 500, etc.
+		 * @param string $errorCode error message. This can be a string that is listed
+		 * in the message file. If so, the message in the preferred language
+		 * will be used as the error message. Any rest parameters will be used
+		 * to replace placeholders ({0}, {1}, {2}, etc.) in the message.
+		 */
+		public function __construct($statusCode, $errorCode) {
+			$this -> setStatusCode($statusCode);
+			
+			$this -> setErrorCode($errorCode);
+			$errorMessage = $this -> translateErrorMessage($errorCode);
+
+			$args = func_get_args();
+			array_shift($args);
+			array_shift($args);
+			$this -> setErrorMessage( $this -> replaceMessageToken($errorMessage, $args)  );
+		}
+	
+		/**
+		 * @return integer HTTP status code, such as 404, 500, etc.
+		 */
+		public function getStatusCode() {
+			return $this -> _statusCode;
+		}
+		
+		public function setStatusCode($value) {
+			$this -> _statusCode = (integer)$value;
+			$this -> code = (integer)$value;
+		}
+	}
+	
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/TServiceProtocol.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/TServiceProtocol.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/common/TServiceProtocol.php	(revision 7754)
@@ -0,0 +1,53 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage Types
+	 * @version 1.0
+	 */	
+
+	class TServiceProtocol {
+		/**
+		 * unknown
+		 */
+		const UNKNOWN	= 'UNKNOWN'; // dummy
+
+		/**
+		 * none
+		 */
+		const NONE	= 'NONE'; // dummy
+		
+		/**
+		 * MCP proprietary format
+		 */
+		const NVP	= 'NVP';
+		
+		/**
+		 * Soap
+		 */
+		const SOAP = 'SOAP'; // not fully supportet
+
+		/**
+		 * J.S.O.N.
+		 */
+		const JSON = 'JSON'; // not suppoted
+
+		/**
+		 * HTTP GET and POST request parameters (urlencoded)
+		 */
+		const HTTP_PARAMS = 'HTTP_PARAMS';
+
+		/**
+		 * HTTP GET request parameters (urlencoded)
+		 */
+		const HTTP_PARAMS_GET = 'HTTP_PARAMS_GET';
+
+		/**
+		 * HTTP POST request parameters (urlencoded)
+		 */
+		const HTTP_PARAMS_POST = 'HTTP_PARAMS_POST';
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/IServiceDispatcher.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/IServiceDispatcher.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/IServiceDispatcher.php	(revision 7754)
@@ -0,0 +1,57 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatcher
+	 * @version 1.0
+	 */
+
+	interface IServiceDispatcher {
+		/**
+		 * @param string $value
+		 */
+		public function setInterface($value);
+		
+		/**
+		 * @return string
+		 */
+		public function getInterface();
+		
+		/**
+		 * @return ClassServiceReflection
+		 */
+		public function getInterfaceReflection();
+		
+		/**
+		 * @return string
+		 */
+		public function getServiceUri();
+		
+		/**
+		 * @param string $value
+		 */
+		public function setServiceUri($value);
+		
+		/**
+		 * @return string
+		 * @see TServiceProtocol
+		 */
+		public function getRequestProtocol();
+
+		/**
+		 * @return string
+		 * @see TServiceProtocol
+		 */
+		public function getResponseProtocol();
+		
+	
+		/**
+		 * @param string $name
+		 * @param mixed $params
+		 * @return mixed
+		 */
+		public function send($name, $params=null);
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TNvpServiceDispatcher.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TNvpServiceDispatcher.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TNvpServiceDispatcher.php	(revision 7754)
@@ -0,0 +1,22 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatcher
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/TServiceDispatcher.php');
+	
+	class TNvpServiceDispatcher extends TServiceDispatcher {
+		/**
+		 * @param string $interface
+		 * @param string $serviceUri
+		 */
+		public function __construct($interface, $serviceUri) {
+			parent::__construct($interface, $serviceUri, TServiceProtocol::HTTP_PARAMS, TServiceProtocol::NVP);
+		}
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TServiceDispatcher.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TServiceDispatcher.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TServiceDispatcher.php	(revision 7754)
@@ -0,0 +1,213 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatcher
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/IServiceDispatcher.php');
+	require_once( dirname(__FILE__) . '/adapter/TDispatchRequestAdapter.php');
+	require_once( dirname(__FILE__) . '/adapter/TDispatchResponseAdapter.php');
+	
+	
+	class TServiceDispatcherException extends TException {
+		protected function getErrorMessageFile() {
+			return dirname(__FILE__) . '/TServiceDispatcherException.txt';
+		}	
+	}
+
+	class TServiceDispatcher implements IServiceDispatcher {
+		/**
+		 * @var string
+		 * @see setInterface(), getInterface()
+		 */
+		private $_interface = null;
+		
+		/**
+		 * request-adapter
+		 *
+		 * @var IDispatchRequestAdapter
+		 */
+		protected $oRequestAdapter	= null;		
+		
+		/**
+		 * response-adapter
+		 *
+		 * @var IDispatchResponseAdapter
+		 */
+		protected $oResponseAdapter	= null;
+		
+		/**
+		 * @param string $interface
+		 * @param string $serviceUri
+		 * @param string $requestProtocol
+		 * @param string $responseProtocol
+		 * @param mixed $requestAdapterOptions
+		 * @param mixed $responseAdapterOptions
+		 */
+		public function __construct($interface, $serviceUri, $requestProtocol, $responseProtocol, $requestAdapterOptions=null, $responseAdapterOptions=null) {
+			$this -> setInterface($interface);
+			
+			$this -> setRequestAdapter( TDispatchRequestAdapter::createByServiceProtocol($this, $requestProtocol, $requestAdapterOptions) );
+			$this -> setResponseAdapter( TDispatchResponseAdapter::createByServiceProtocol($this, $responseProtocol, $responseAdapterOptions) );
+			
+			$this -> oRequestAdapter -> setServiceUri($serviceUri);
+		}
+		
+		/**
+		 * @return ClassServiceReflection
+		 */
+		public function getInterfaceReflection() {
+			return ClassServiceReflection::createReflection( new ReflectionClass($this -> getInterface()));
+		}
+		
+		/**
+		 * @param string $name
+		 * @param array $params
+		 * @return mixed
+		 * @todo params mit reflection aufbereiten
+		 * @throws TNotificationDispatcherException
+		 */
+		public function send($name, $params=null) {
+			$result = null;
+			$args = array();
+			$iReflection = $this -> getInterfaceReflection();
+			
+			if( !$iReflection -> hasMethod($name) ) throw new TServiceDispatcherException('servicemethod_unkown', $name);
+			
+			$nReflection = $iReflection -> getMethod($name);
+			
+			do {
+				if( $nReflection -> getNumberOfParameters() == 0 ) break;
+				
+				$aNpReflection = $nReflection -> getParameters();
+				
+				$c = -1;
+				foreach($aNpReflection as $npReflection) {
+					++$c;
+					
+					$paramName	= $npReflection -> getName();
+					$args[$paramName] = $paramValue = null;
+					
+					if( $params AND is_array($params) AND array_key_exists($paramName, $params) ) {
+						$args[$paramName] = $paramValue = $params[$paramName];
+						continue;
+					}
+
+					if( $params AND is_array($params) AND array_key_exists($c, $params) ) {
+						$args[$paramName] = $paramValue = $params[$c];
+						continue;
+					}
+
+				
+					if( $npReflection -> getHasDefault() ) {
+						$args[$paramName] = $npReflection -> getDefault();
+						continue;
+					}
+					
+					if( $npReflection -> getRequired() ) throw new TServiceDispatcherException('servicemethod_param_missing', $name, $paramName);
+				}
+				
+			} while(0);
+			
+			$this -> oRequestAdapter -> setMethodName($name);
+			$this -> oRequestAdapter -> setMethodParameters($args);
+			$data = $this -> oRequestAdapter -> call();
+			
+			return $this -> oResponseAdapter -> unserialize($data, $nReflection);
+		}
+		
+		/**
+		 * @param string $name
+		 * @param mixed $params
+		 */		
+		public function __call($name, $params) {
+			return $this -> send($name, $params);
+		}
+		
+		/**
+		 * @param string $value
+		 */
+		public function setInterface($value) {
+			$this -> _interface = $value;
+		}
+		
+		/**
+		 * @return string
+		 */
+		public function getInterface() {
+			return $this -> _interface;
+		}
+		
+		/**
+		 * @return string
+		 */
+		public function getServiceUri() {
+			return $this -> oRequestAdapter -> getServiceUri();
+		}
+		
+		/**
+		 * @param string $value
+		 */
+		public function setServiceUri($value) {
+			$this -> oRequestAdapter -> setServiceUri($value);
+		}
+		
+		/**
+		 * @return string
+		 * @see TServiceProtocol
+		 */
+		public function getRequestProtocol() {
+			return $this -> oRequestAdapter -> getServiceProtocol();
+		}
+		
+		/**
+		 * @return string
+		 * @see TServiceProtocol
+		 */
+		public function getResponseProtocol() {
+			return $this -> oResponseAdapter -> getServiceProtocol();
+		}
+
+		
+		/**
+		 * assign response-adapter
+		 *
+		 * @param IDispatchResponseAdapter $adapder
+		 */
+		public function setResponseAdapter(IDispatchResponseAdapter $adapder) {
+			$this -> oResponseAdapter = $adapder;
+		}
+		
+		/**
+		 * return current response-adapter
+		 *
+		 * @return IDispatchResponseAdapter
+		 */
+		public function getResponseAdapter() {
+			return $this -> oResponseAdapter;
+		}
+		
+		/**
+		 * assign server adapter
+		 *
+		 * @param IDispatchRequestAdapter $adapder
+		 */
+		public function setRequestAdapter(IDispatchRequestAdapter $adapder) {
+			$this -> oRequestAdapter = $adapder;
+		}
+		
+		/**
+		 * return current request-adapter
+		 *
+		 * @return IDispatchRequestAdapter
+		 */
+		public function getRequestAdapter() {
+			return $this -> oRequestAdapter;
+		}		
+		
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TServiceDispatcherException.txt
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TServiceDispatcherException.txt	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/TServiceDispatcherException.txt	(revision 7754)
@@ -0,0 +1,2 @@
+servicemethod_unkown 		= service method named "{0}" do not exists
+servicemethod_param_missing	= service method named "{0}" requires param "{1}"
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchAdapter.php	(revision 7754)
@@ -0,0 +1,55 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.0
+	 */
+
+	interface IDispatchAdapter {
+		/**
+		 * @param IServiceDispatcher $manager
+		 */
+		public function setManager(IServiceDispatcher $manager);
+		
+		/**
+		 * @return INotificationDispatcher
+		 */
+		public function getManager();
+		
+		/**
+		 * @param IServiceDispatcher $manager
+		 * @param string $protocol
+		 * @param mixed $options
+		 * @return IDispatchAdapter
+		 * @see TServiceProtocol
+		 */
+		public static function createByServiceProtocol(IServiceDispatcher $manager, $protocol, $options=null);
+		
+		/**
+		 * @param string $value
+		 * @see TServiceProtocol
+		 */
+		public function setServiceProtocol($value);
+		
+		/**
+		 * @return string $value
+		 * @see TServiceProtocol
+		 */
+		public function getServiceProtocol();
+		
+		/**
+		 * @param mixed $value
+		 */
+		public function setOptions($value=null);
+		
+		/**
+		 * @return mixed $value
+		 */
+		public function getOptions();
+		
+		
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchRequestAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchRequestAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchRequestAdapter.php	(revision 7754)
@@ -0,0 +1,51 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/IDispatchAdapter.php');
+
+	interface IDispatchRequestAdapter extends IDispatchAdapter  {
+		
+		/**
+		 * @return string
+		 */
+		public function getServiceUri();
+		
+		/**
+		 * @param string $value
+		 */
+		public function setServiceUri($value);
+		
+		/**
+		 * @return string
+		 */
+		public function getMethodName();
+		
+		/**
+		 * @param string $value
+		 */
+		public function setMethodName($value);
+		
+		
+		/**
+		 * @param array $value
+		 */
+		public function setMethodParameters($value);
+		
+		/**
+		 * @return array
+		 */
+		public function getMethodParameters();
+		
+		/**
+		 * @return mixed
+		 */
+		public function call();
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchResponseAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchResponseAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/IDispatchResponseAdapter.php	(revision 7754)
@@ -0,0 +1,32 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/IDispatchAdapter.php');
+
+	interface IDispatchResponseAdapter extends IDispatchAdapter {
+		
+		/**
+		 * @return mixed $value
+		 */
+		public function getData();
+		
+		/**
+		 * @return MethodServiceReflection
+		 */
+		public function getReflection();
+		
+		/**
+		 * @param mixed $data
+		 * @param MethodServiceReflection $interfaceNotificationReflection
+		 * @return mixed
+		 */
+		public function unserialize($data, MethodServiceReflection $interfaceNotificationReflection);
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchAdapter.php	(revision 7754)
@@ -0,0 +1,79 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/IDispatchAdapter.php');
+
+	class TDispatchAdapterException extends TException {
+		protected function getErrorMessageFile() {
+			return dirname(__FILE__) . '/TDispatchAdapterException.txt';
+		}
+	}
+	
+	abstract class TDispatchAdapter implements IDispatchAdapter {
+		/**
+		 * @var string
+		 * @see TServiceProtocol
+		 */
+		private $_serviceProtocol	= TServiceProtocol::NONE;
+		
+		/**
+		 * @var mixed
+		 */
+		private $_options = null;
+		
+		/**
+		 * @var IServiceDispatcher
+		 */
+		private $_manager = null;
+		
+		
+		public function setManager(IServiceDispatcher $manager) {
+			$this -> _manager = $manager;
+		}
+		
+		/**
+		 * @return IServiceDispatcher
+		 */
+		public function getManager() {
+			return $this -> _manager;
+		}
+		
+		
+		/**
+		 * @param string $value
+		 * @see TServiceProtocol
+		 */
+		public function setServiceProtocol($value) {
+			$this -> _serviceProtocol = $value;
+		}
+		
+		/**
+		 * @return string $value
+		 * @see TServiceProtocol
+		 */
+		public function getServiceProtocol() {
+			return $this -> _serviceProtocol;
+		}
+		
+		/**
+		 * @param mixed $value
+		 */
+		public function setOptions($value=null) {
+			$this -> _options = $value;			
+		}
+		
+		/**
+		 * @return mixed $value
+		 */
+		public function getOptions() {
+			return $this -> _options;
+		}	
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchAdapterException.txt
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchAdapterException.txt	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchAdapterException.txt	(revision 7754)
@@ -0,0 +1,6 @@
+protocol_not_supported			= service protocol "{1}" not supported by "{0}" yet
+protocol_unknown				= adapter "{0}" don't know service protocol "{1}"
+adapter_datatype_not_supported	= Response data type "{0}" not supported
+adapter_protocol_not_supported	= {0} do not support service protocol "{1}" use another Adapter
+
+servicemethod_result_missing	= service method named "{0}" requires result "{1}"
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchRequestAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchRequestAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchRequestAdapter.php	(revision 7754)
@@ -0,0 +1,123 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/IDispatchRequestAdapter.php');
+	require_once( dirname(__FILE__) . '/TDispatchAdapter.php');
+	
+	abstract class TDispatchRequestAdapter extends TDispatchAdapter implements IDispatchRequestAdapter {
+		/**
+		 * URI of notification destination
+		 *
+		 * @var string
+		 * @see setServiceUri(), getServiceUri()
+		 */
+		private $_serviceUri	= '';
+		
+		/**
+		 * @var string
+		 */
+		private $_methodName = '';
+		
+		/**
+		 * @var array
+		 */
+		private $_methodParameters = array();
+		
+		/**
+		 * @param IServiceDispatcher $manager
+		 * @param string $protocol
+		 * @param mixed $options
+		 * @return IDispatchRequestAdapter
+		 * @see TServiceProtocol
+		 */		
+		public static function createByServiceProtocol(IServiceDispatcher $manager, $protocol, $options=null) {
+			$result = null;
+			switch($protocol) {
+				case TServiceProtocol::HTTP_PARAMS:
+				case TServiceProtocol::HTTP_PARAMS_GET:
+				case TServiceProtocol::HTTP_PARAMS_POST:
+					require_once( dirname(__FILE__) . '/THttpParamsDispatchRequestAdapter.php');
+					$result = new THttpParamsDispatchRequestAdapter();
+				break;
+				
+				case TServiceProtocol::NVP :
+				case TServiceProtocol::JSON:
+				case TServiceProtocol::SOAP:
+					throw new TDispatchAdapterException('protocol_not_supported', __CLASS__, $protocol);
+				break;
+				
+				case TServiceProtocol::NONE:
+					$result = new TDummyDispatchResponseAdapter();
+				break;
+				
+				case TServiceProtocol::UNKNOWN:
+				
+				default:
+					throw new TDispatchAdapterException('protocol_unknown', __CLASS__, $protocol);
+				break;				
+				
+			}
+			
+			$result -> setManager($manager);
+			$result -> setServiceProtocol($protocol);
+			$result -> setOptions($options);
+			return $result;
+		}
+		
+		/**
+		 * @return string
+		 */
+		public function getServiceUri() {
+			return $this -> _serviceUri;
+		}
+		
+		/**
+		 * @param string $value
+		 */
+		public function setServiceUri($value) {
+			$this -> _serviceUri = $value;
+		}
+		
+		/**
+		 * @return string
+		 */
+		public function getMethodName() {
+			return $this -> _methodName;
+		}
+		
+		/**
+		 * @param string $value
+		 */
+		public function setMethodName($value) {
+			$this -> _methodName= $value;
+		}
+		
+		/**
+		 * @param array $value
+		 */
+		public function setMethodParameters($value) {
+			$this -> _methodParameters = $value;
+		}
+		
+		/**
+		 * @return array
+		 */
+		public function getMethodParameters() {
+			return $this -> _methodParameters;
+		}
+	}
+	
+	
+	class TDummyDispatchRequestAdapter extends TDispatchRequestAdapter {
+		public function call() {
+			return null;
+		}
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchResponseAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchResponseAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TDispatchResponseAdapter.php	(revision 7754)
@@ -0,0 +1,170 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.1
+	 */
+
+	require_once( dirname(__FILE__) . '/IDispatchResponseAdapter.php');
+	require_once( dirname(__FILE__) . '/TDispatchAdapter.php');
+	
+	abstract class TDispatchResponseAdapter extends TDispatchAdapter implements IDispatchResponseAdapter {
+		/**
+		 * @var mixed
+		 */
+		private $_data = null;
+		
+		/**
+		 * @var ClassServiceReflection
+		 */
+		private $_reflection = null;
+		
+		/**
+		 * @param IServiceDispatcher $manager
+		 * @param string $protocol
+		 * @param mixed $options
+		 * @return IDispatchResponseAdapter
+		 * @see TServiceProtocol
+		 */		
+		public static function createByServiceProtocol(IServiceDispatcher $manager, $protocol, $options=null) {
+			$result = null;
+			switch($protocol) {
+				case TServiceProtocol::NVP:
+					require_once( dirname(__FILE__) . '/TNvpDispatchResponseAdapter.php');
+					$result = new TNvpDispatchResponseAdapter();
+				break;
+				
+				case TServiceProtocol::HTTP_PARAMS:
+				case TServiceProtocol::HTTP_PARAMS_GET:
+				case TServiceProtocol::HTTP_PARAMS_POST:
+				case TServiceProtocol::JSON:
+				case TServiceProtocol::SOAP:
+					throw new TDispatchAdapterException('protocol_not_supported', __CLASS__, $protocol);
+				break;
+				
+				case TServiceProtocol::NONE:
+					$result = new TDummyDispatchResponseAdapter();
+				break;
+				
+				case TServiceProtocol::UNKNOWN:
+				default:
+					throw new TDispatchAdapterException('protocol_unknown', __CLASS__, $protocol);
+				break;
+			}
+			
+			$result -> setManager($manager);
+			$result -> setServiceProtocol($protocol);
+			$result -> setOptions($options);
+			return $result;
+		}
+		
+		/**
+		 * @return mixed $value
+		 */
+		public function getData() {
+			return $this -> _data;
+		}
+		
+		/**
+		 * @param mixed $value
+		 */
+		protected function setData($value) {
+			$this -> _data = $value;
+		}
+		
+		
+		/**
+		 * @return MethodServiceReflection
+		 */
+		public function getReflection() {
+			return $this -> _reflection;
+		}
+		
+		/**
+		 * @param MethodServiceReflection $value
+		 */
+		protected function setReflection(MethodServiceReflection $value) {
+			$this -> _reflection = $value;
+		}
+		
+		/**
+		 * @param mixed $data
+		 * @param MethodServiceReflection $interfaceNotificationReflection
+		 * @return mixed
+		 */
+		public function unserialize($data, MethodServiceReflection $interfaceNotificationReflection) {
+			$this -> setData($data);
+			$this -> setReflection($interfaceNotificationReflection);
+			return $this -> formatDataWithReflection( $this -> unserializeData() );
+		}
+		
+		/**
+		 * @param mixed $data
+		 */
+		protected function formatDataWithReflection($data) {
+			if( is_scalar($data)) return $data;
+			$result = array();
+			$reflection = $this -> getReflection() -> getReturn();
+			$aResultReflection = $reflection -> getResults();
+			
+			if(count($aResultReflection) == 0) return $data;
+			
+			foreach($aResultReflection as $resultReflection) {
+				$name = $resultReflection -> getName();
+				$result[$name] = $value = null;
+				
+				$required = true;
+				$hasValue = false;
+				do {
+					if( !$resultReflection instanceof ParameterServiceReflection ) break;
+					$required = $resultReflection -> getRequired();
+					if( !$resultReflection -> getHasDefault() ) break;
+					$value = $resultReflection -> getDefault();
+					$hasValue = true;
+				} while(0);
+				
+				if( array_key_exists($name, $data) ) {
+					$value = $data[$name];
+					
+					$hasValue = true;
+					
+					switch($value) {
+						case 'null': 
+							$value = null;
+						break;
+						case 'true':
+							$value = true;
+						break;
+						case 'false':
+							$value = false;
+						break;
+					}
+				}
+					
+				
+				if( !$hasValue AND $required)
+					throw new TDispatchAdapterException('servicemethod_result_missing', $this -> getReflection() -> getName(), $name);
+				
+				$result[$name] = $value;
+			}
+			
+			return $result;
+		}
+
+		/**
+		 * @return mixed
+		 */
+		abstract protected function unserializeData();
+		
+	}
+	
+	
+	class TDummyDispatchResponseAdapter extends TDispatchResponseAdapter {
+		protected function unserializeData() {
+			return $this -> getData();
+		}
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/THttpParamsDispatchRequestAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/THttpParamsDispatchRequestAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/THttpParamsDispatchRequestAdapter.php	(revision 7754)
@@ -0,0 +1,120 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/TDispatchRequestAdapter.php');
+	require_once( MCP__SERVICELIB_CLIENTS . 'TSimpleHttpClient.php');
+	
+	
+	class THttpParamsDispatchRequestAdapterHttpException extends THttpException {
+		/**
+		 * @var TSimpleHttpResponse
+		 */
+		private $_response = null;
+		
+		public function __construct($statusCode, $errorCode, $reponse=null) {
+			$this -> setStatusCode($statusCode);
+			$this -> _response = $reponse;
+			
+			$this -> setErrorCode($errorCode);
+			$errorMessage = $this -> translateErrorMessage($errorCode);
+
+			$args = func_get_args();
+			array_shift($args);
+			array_shift($args);
+			array_shift($args);
+			$this -> setErrorMessage( $this -> replaceMessageToken($errorMessage, $args)  );
+		}
+		
+		/**
+		 * @return TSimpleHttpResponse
+		 */
+		public function getResponse() {
+			return $this -> _response;
+		}
+	}
+	
+	class THttpParamsDispatchRequestAdapter extends TDispatchRequestAdapter {
+		
+		/**
+		 * 
+		 * @return TSimpleHttpResponse
+		 * @throws SimpleHttpClientException
+		 * @throws THttpException
+		 */ 
+		public function call() {
+			$option = $this -> getOptions();
+			if(!is_array($option)) $option = array();
+			if(!isset($option['http-params-servicemethod']) OR $option['http-params-servicemethod'] == '') $option['http-params-servicemethod'] = 'action';
+			$servicemethodParamName = $option['http-params-servicemethod'];
+			
+			$result = '';
+			switch( $this -> getServiceProtocol() ) {
+				case TServiceProtocol::HTTP_PARAMS_GET:
+					$client = new TSimpleHttpClient(TSimpleHttpClient::GET, $this -> getServiceUri());
+				break;
+				
+				case TServiceProtocol::HTTP_PARAMS:
+				case TServiceProtocol::HTTP_PARAMS_POST:
+				default:
+					$client = new TSimpleHttpClient(TSimpleHttpClient::POST, $this -> getServiceUri());
+				break;
+			}
+			$client -> addHeader('User-Agent', 'MCP-SimpleHttpClient/1.0 API-ServiceDispatcher via HttpParamsDispatchRequestAdapter');
+			$client -> addHeader('Accept', 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,*/*;q=0.5');
+			$client -> addHeader('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.7');
+			$client -> addHeader('X-MCP-API-RequestServiceProtocol', $this -> getServiceProtocol());
+			$client -> addHeader('X-MCP-API-ResponseServiceProtocol', $this -> getManager() -> getResponseProtocol());
+			
+			$methodParameters = http_build_query($this -> getMethodParameters(), null, '&');
+			parse_str($methodParameters, $methodParameters);			
+			
+			$aData = array();
+			
+			if( !$client -> isPost() ) $aData = $client -> getQuery(true);
+			
+			$aData = array_merge($aData, $methodParameters);
+			$aData[$servicemethodParamName] = $this -> getMethodName();
+					
+			if( $client -> isPost() ) {
+				$client -> addHeader('Content-type', 'application/x-www-form-urlencoded');
+				$client -> setBody( http_build_query($aData, null, '&') );
+			}
+			else {
+				$client -> setQuery($aData);
+			}
+			
+			$result = $client -> request();
+			
+			switch( $result -> getStatusCode() ) {
+				case 200: // OK
+				break;
+				
+				case 301: // Moved permanently
+				case 302: // Found
+				case 303: // See other
+				case 305: // Use proxy
+				case 307: // Moved temporarily
+					// ::ToDo::
+					// ggf. Location Header auswerten
+					// und Request umschreiben
+				
+				case 304: // Not modified
+				
+				default:
+					throw new THttpParamsDispatchRequestAdapterHttpException($result -> getStatusCode(), $result -> getStatusMessage(), $result);
+				break;
+			}
+			
+			return $result;
+		}
+	}
+	
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TNvpDispatchResponseAdapter.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TNvpDispatchResponseAdapter.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/dispatcher/adapter/TNvpDispatchResponseAdapter.php	(revision 7754)
@@ -0,0 +1,80 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage ServiceDispatchAdapter
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/TDispatchResponseAdapter.php');
+	require_once( MCP__SERVICELIB_CLIENTS . 'TSimpleHttpClient.php');
+	require_once( MCP__SERVICELIB_SERIALIZER . 'TNvpSerializer.php');
+	
+	class TNvpDispatchResponseAdapter extends TDispatchResponseAdapter {
+		
+		protected function unserializeData() {
+			$data = $this -> getData();
+			$result = null;
+			
+			$dataType = gettype($data);
+			switch($dataType) {
+				case 'object':
+					$dataType = get_class($data);
+				
+				case 'TSimpleHttpResponse':
+					$format = $this -> getServiceProtocol();
+					if( $data -> isHeader('X-MCP-API-ResonseServiceProtocol') )
+						$format = $data -> getHeader('X-MCP-API-ResonseServiceProtocol');
+						
+					if( !in_array($format, array($this -> getServiceProtocol(), TServiceProtocol::NONE, TServiceProtocol::UNKNOWN )) )
+						throw new TDispatchAdapterException('adapter_protocol_not_supported', __CLASS__, $format);
+
+					$result =  TNvpSerializer::unserialize( $data -> getBody() );
+				break;
+				
+				case 'boolean':
+				case 'integer':
+				case 'boolean':
+				case 'array':
+				case 'null':
+				case 'NULL':
+					$result =  TNvpSerializer::unserialize( TNvpSerializer::serialize($data) );
+				break;
+				
+				case 'string':
+					$result =  TNvpSerializer::unserialize($data);
+				break;
+
+				case 'resource':
+				case 'unknown type':
+				default:
+					throw new TDispatchAdapterException('adapter_datatype_not_supported', $dataType);
+				break;
+			}
+			
+			do {
+				if( !isset($result['error']) ) break;
+				if($result['error'] == 0) break;
+				
+				$code	= $result['error'];
+				$msg	= isset($result['errorMessage']) ? stripSlashes($result['errorMessage']) :  '';
+				throw new Exception($msg, $code);
+				
+			} while(0);
+			
+			do {
+				if( !isset($result['result']) ) break;
+				if( count($result) > 2) break;
+				$result = $result['result'];
+			} while(0);
+			
+			
+			return $result;
+		}
+		
+	}
+
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/init.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/init.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/init.php	(revision 7754)
@@ -0,0 +1,23 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @version 1.0
+	 */
+
+	if(!defined('MCP__SERVICELIB')) define('MCP__SERVICELIB', dirname(__FILE__) . '/');
+	
+	if(!defined('MCP__SERVICELIB_COMMON')) define('MCP__SERVICELIB_COMMON', MCP__SERVICELIB . 'common/');
+
+	if(!defined('MCP__SERVICELIB_CLIENTS')) define('MCP__SERVICELIB_CLIENTS', MCP__SERVICELIB . 'clients/');
+
+	if(!defined('MCP__SERVICELIB_SERIALIZER')) define('MCP__SERVICELIB_SERIALIZER', MCP__SERVICELIB . 'serializer/');
+	
+	if(!defined('MCP__SERVICELIB_DISPATCHER')) define('MCP__SERVICELIB_DISPATCHER', MCP__SERVICELIB . 'dispatcher/');
+	
+	require_once(MCP__SERVICELIB_COMMON . 'TException.php');
+	require_once(MCP__SERVICELIB_COMMON . 'TServiceProtocol.php');
+	require_once(MCP__SERVICELIB_COMMON . 'ServiceReflection.php');
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/ISerializer.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/ISerializer.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/ISerializer.php	(revision 7754)
@@ -0,0 +1,28 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage Serializer
+	 * @version 1.0
+	 */	
+	
+	interface ISerializer {
+
+		/**
+		 * @param mixed $data
+		 * @param mixed $options
+		 * @return string
+		 */
+		public static function serialize($data, $options=null);
+		
+		
+		/**
+		 * @param string $data
+		 * @param mixed $options
+		 * @return mixed
+		 */
+		public static function unserialize($data, $options=null);
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/TBaseSerializer.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/TBaseSerializer.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/TBaseSerializer.php	(revision 7754)
@@ -0,0 +1,29 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage Serializer
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/ISerializer.php');
+
+	abstract class TBaseSerializer implements ISerializer {
+	
+		protected static function isArrayMap(&$data) {
+			$result = false;
+			
+			if( is_array($data) ) {
+				foreach($data as $k => $v) {
+					if( !is_numeric($k)) {
+						$result = true;
+						break;
+					}
+				}
+			}
+			return $result;
+		}	
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/TNvpSerializer.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/TNvpSerializer.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/lib/serializer/TNvpSerializer.php	(revision 7754)
@@ -0,0 +1,142 @@
+<?php
+	/**
+	 * @copyright 2008 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz
+	 * @package MCP-Service-Client
+	 * @subpackage Serializer
+	 * @version 1.0
+	 */
+
+	require_once( dirname(__FILE__) . '/TBaseSerializer.php');
+
+	class TNvpSerializer extends TBaseSerializer {
+		
+		/**
+		 * @param mixed $data
+		 * @param mixed $options
+		 * @return string
+		 */
+		public static function serialize($data, $options=null) {
+			if(!is_array($options)) $options = array();
+			if( !isset($options['prefix']) ) $options['prefix'] = 'result';
+			
+			$result = '';
+
+			if( $data === null OR is_scalar($data)) {
+				$result .= self::serializeNVP($options['prefix'], ($data === null ? 'null' : $data));
+			}
+			elseif( is_array($data) ) {
+				if( self::isArrayMap($data) ) $result .= self::serializeRecursive($data);
+				else $result .= self::serializeRecursive($data, $options['prefix']);
+			} 
+			else {
+				$result .= self::serializeRecursive($data);	
+			}		
+		
+			return $result;
+		}
+		
+		
+		/**
+		 * @param string $data
+		 * @param mixed $options
+		 * @return mixed
+		 * @todo object format
+		 */
+		public static function unserialize($data, $options=null) {
+			$result = array();
+			$data = str_replace("\n", '&', $data);
+			parse_str($data, $result);
+			return $result;			
+		}
+		
+		protected static function encodeValue($value) {
+			return urlEncode($value);
+		}
+		
+		protected static function decodeValue($value) {
+			return urlDecode($value);
+		}
+		
+		protected static function serializeNVP($name, $value, $prefix='') {
+			return $prefix . $name . '=' . self::encodeValue($value) . "\n";
+		}
+		
+		/**
+		 * @param string $key
+		 * @param mixed $value
+		 * @param array $result
+		 * @todo 
+		 */
+		protected static function unserializeRecursive($key, $value, &$result) {
+		}
+		
+		
+		protected static function serializeRecursive($data, $prefix='', $deep=-1) {
+			$deep++;
+			
+			$result = '';
+			if( is_scalar($data) )  {
+				$result .= self::serializeNVP($defkey, $data, $prefix);
+			}
+			elseif( is_array($data) AND self::isArrayMap($data)) {
+				//if($deep > 0) $result .= self::serializeNVP('@indices', implode(',', array_keys($data)), '#' . $prefix);
+				
+				foreach($data as $key => $value) {
+					$idx = ($deep > 0 ? '[' . $key . ']' : $key);
+					
+					if(is_scalar($value)) {
+						$result .= self::serializeNVP($idx, $value, $prefix);	
+					}
+					else {
+						$result .= self::serializeRecursive($value, $prefix . $idx, $deep);
+					}
+				}
+				
+			}
+			elseif( is_array($data) ) {
+				$cnt = count($data);
+				//$result .= self::serializeNVP('@count', $cnt, '#' . $prefix);
+				
+				for($i=0; $i<$cnt; $i++) {
+					$idx = '[' . $i . ']';
+					
+					if(is_scalar($data[$i])) {
+						$result .= self::serializeNVP($idx, $data[$i], $prefix);	
+					}
+					else {
+						$result .= self::serializeRecursive($data[$i], $prefix . $idx, $deep);
+					}
+				}
+			}
+			elseif( is_object($data)) {
+				if($deep > 0) {
+					$reflectionObject = new ReflectionObject($data);
+					$reflectionProperties = $reflectionObject -> getProperties();
+					$properties = array();
+					foreach($reflectionProperties as $property) {
+						if( !$property -> isPublic() ) continue;
+						$properties[] = $property -> getName();
+					}
+					
+					//$result .= self::serializeNVP('@properties', implode(',', $properties), '#' . $prefix);
+				}
+				
+				foreach($data as $key => $value) {
+					$idx = ($deep > 0 ? '.' . $key : $key);
+					
+					if(is_scalar($value)) {
+						$result .= self::serializeNVP($idx, $value, $prefix);
+					}
+					else {
+						$result .= self::serializeRecursive($value, $prefix . $idx, $deep);
+					}
+				}
+			}
+
+			return $result;
+		}		
+		
+	}
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_0.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_0.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_0.php	(revision 7754)
@@ -0,0 +1,347 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus (Verfügbar erst ab Version 1.1):
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.0
+	 * @created 2011-10-11 21:38:00
+	 */
+	interface IMcpCreditcardService_v1_0 {
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type Kartentyp
+		 * @result string $number partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear Gültigkeits Jahr
+		 * @result integer $expiryMonth Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amount abgerechneter Betrag
+		 * @result string $currency Währungseinheit
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType Kartentyp
+		 * @result string $cardNumber partielle Kreditkartennummer (letzten 4 Stellen)
+		 * @result integer $cardExpiryYear Gültigkeits Jahr
+		 * @result integer $cardExpiryMonth Gültigkeits Monat
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_1.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_1.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_1.php	(revision 7754)
@@ -0,0 +1,399 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.1
+	 * @created 2011-10-11 21:38:09
+	 */
+	interface IMcpCreditcardService_v1_1 {
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type Kartentyp
+		 * @result string $number partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear Gültigkeits Jahr
+		 * @result integer $expiryMonth Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amount abgerechneter Betrag
+		 * @result string $currency Währungseinheit
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType Kartentyp
+		 * @result string $cardNumber partielle Kreditkartennummer (letzten 4 Stellen)
+		 * @result integer $cardExpiryYear Gültigkeits Jahr
+		 * @result integer $cardExpiryMonth Gültigkeits Monat
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_1_1.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_1_1.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_1_1.php	(revision 7754)
@@ -0,0 +1,418 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.1.1
+	 * @created 2011-10-11 21:38:48
+	 */
+	interface IMcpCreditcardService_v1_1_1 {
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type Kartentyp
+		 * @result string $number partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear Gültigkeits Jahr
+		 * @result integer $expiryMonth Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amount abgerechneter Betrag
+		 * @result string $currency Währungseinheit
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType Kartentyp
+		 * @result string $cardNumber partielle Kreditkartennummer (letzten 4 Stellen)
+		 * @result integer $cardExpiryYear Gültigkeits Jahr
+		 * @result integer $cardExpiryMonth Gültigkeits Monat
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2.php	(revision 7754)
@@ -0,0 +1,449 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.2
+	 * @created 2011-10-11 21:39:07
+	 */
+	interface IMcpCreditcardService_v1_2 {
+
+		/**
+		 * Gibt eine Liste der, vom System durch Umrechnung, unterstützten Währungen zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetSupported($accessKey, $testMode=0);
+
+		/**
+		 * Gibt eine Liste der, von Ihrem Account, nativ unterstützten Währungen, optional für einen bestimmten Kartentyp, zurück.
+		 * 
+		 *  Hinweis:
+		 *  Die native Unterstützung weiterer Währungen erhalten Sie durch die Beantragung zusätzlicher VU-Nummern.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param CardType $cardtype (default=null)  Typ der Kreditkarte
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetNativeSupported($accessKey, $testMode=0, $cardtype=null);
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 * 
+		 *  Wenn sich `currencyInit` und `currencyBooked` unterscheiden, dann fehlt die native Unterstützung für die gewünschte Währung.
+		 *  In diesem Fall erfolgte eine Umrechnung in eine nativ unterstützte Währung.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amountInit Betrag der abgerechnet werden sollte in currencyInit
+		 * @result string $currencyInit Währungseinheit mit der abgerechnet werden sollte
+		 * @result integer $amountBooked gebuchter Betrag in currencyBooked
+		 * @result string $currencyBooked Währungseinheit mit der gebucht wurde
+		 * @result integer $amountInternal abgerechneter Betrag in currencyInternal
+		 * @result string $currencyInternal (default='EUR')  Währungseinheit für interne Verbuchung
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType Kartentyp
+		 * @result string $cardNumber partielle Kreditkartennummer (letzten 4 Stellen)
+		 * @result integer $cardExpiryYear Gültigkeits Jahr
+		 * @result integer $cardExpiryMonth Gültigkeits Monat
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type Kartentyp
+		 * @result string $number partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear Gültigkeits Jahr
+		 * @result integer $expiryMonth Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2_1.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2_1.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2_1.php	(revision 7754)
@@ -0,0 +1,461 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.2.1
+	 * @created 2011-10-11 21:39:21
+	 */
+	interface IMcpCreditcardService_v1_2_1 {
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 * 
+		 *  Wenn sich `currencyInit` und `currencyBooked` unterscheiden, dann fehlt die native Unterstützung für die gewünschte Währung.
+		 *  In diesem Fall erfolgte eine Umrechnung in eine nativ unterstützte Währung.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amountInit Betrag der abgerechnet werden sollte in currencyInit
+		 * @result string $currencyInit Währungseinheit mit der abgerechnet werden sollte
+		 * @result integer $amountBooked gebuchter Betrag in currencyBooked
+		 * @result string $currencyBooked Währungseinheit mit der gebucht wurde
+		 * @result integer $amountInternal abgerechneter Betrag in currencyInternal
+		 * @result string $currencyInternal (default='EUR')  Währungseinheit für interne Verbuchung
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType Kartentyp
+		 * @result string $cardNumber partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $cardExpiryYear Gültigkeits Jahr
+		 * @result integer $cardExpiryMonth Gültigkeits Monat
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null);
+
+		/**
+		 * Gibt eine Liste der, vom System durch Umrechnung, unterstützten Währungen zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetSupported($accessKey, $testMode=0);
+
+		/**
+		 * Gibt eine Liste der, von Ihrem Account, nativ unterstützten Währungen, optional für einen bestimmten Kartentyp, zurück.
+		 * 
+		 *  Hinweis:
+		 *  Die native Unterstützung weiterer Währungen erhalten Sie durch die Beantragung zusätzlicher VU-Nummern.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param CardType $cardtype (default=null)  Typ der Kreditkarte
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetNativeSupported($accessKey, $testMode=0, $cardtype=null);
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type Kartentyp
+		 * @result string $number partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear Gültigkeits Jahr
+		 * @result integer $expiryMonth Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_3.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_3.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_3.php	(revision 7754)
@@ -0,0 +1,489 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.3
+	 * @created 2011-10-11 21:39:45
+	 */
+	interface IMcpCreditcardService_v1_3 {
+
+		/**
+		 * Zuordnung einer `dataStorageId` von einem Bestandskunden Ihres Systems zu einem Kunden (customerId) bei micropayment
+		 * 
+		 *  Wichtig:
+		 *  Diese Funktion ist nur bei einem Wechsel von einem anderen DataStorage-Anbieter relevant und setzt den
+		 *  Import der zugehörigen Kreditkartendaten vorraus separat beantragt und durchgeführt werden muss,
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $dataStorageId Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * 
+		 * @return boolean 
+		 */
+		public function dataStorageIdImport($accessKey, $testMode=0, $customerId, $dataStorageId);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type (default=null)  Kartentyp
+		 * @result string $number (default=null)  partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear (default=null)  Gültigkeits Jahr
+		 * @result integer $expiryMonth (default=null) 	Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 * 
+		 *  Wenn sich `currencyInit` und `currencyBooked` unterscheiden, dann fehlt die native Unterstützung für die gewünschte Währung.
+		 *  In diesem Fall erfolgte eine Umrechnung in eine nativ unterstützte Währung.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amountInit Betrag der abgerechnet werden sollte in currencyInit
+		 * @result string $currencyInit Währungseinheit mit der abgerechnet werden sollte
+		 * @result integer $amountBooked gebuchter Betrag in currencyBooked
+		 * @result string $currencyBooked Währungseinheit mit der gebucht wurde
+		 * @result integer $amountInternal abgerechneter Betrag in currencyInternal
+		 * @result string $currencyInternal (default='EUR')  Währungseinheit für interne Verbuchung
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType (default=null)  Kartentyp, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $cardNumber (default=null)  partielle Kreditkartennummer [letzten 4 Stellen], kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryYear (default=null)  Gültigkeits Jahr, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryMonth (default=null) 	Gültigkeits Monat, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  null - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null, $fraudDetection=1);
+
+		/**
+		 * Gibt eine Liste der, vom System durch Umrechnung, unterstützten Währungen zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetSupported($accessKey, $testMode=0);
+
+		/**
+		 * Gibt eine Liste der, von Ihrem Account, nativ unterstützten Währungen, optional für einen bestimmten Kartentyp, zurück.
+		 * 
+		 *  Hinweis:
+		 *  Die native Unterstützung weiterer Währungen erhalten Sie durch die Beantragung zusätzlicher VU-Nummern.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param CardType $cardtype (default=null)  Typ der Kreditkarte
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetNativeSupported($accessKey, $testMode=0, $cardtype=null);
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4.php	(revision 7754)
@@ -0,0 +1,533 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.4
+	 * @created 2011-10-11 21:40:02
+	 */
+	interface IMcpCreditcardService_v1_4 {
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 * 
+		 *  Wenn sich `currencyInit` und `currencyBooked` unterscheiden, dann fehlt die native Unterstützung für die gewünschte Währung.
+		 *  In diesem Fall erfolgte eine Umrechnung in eine nativ unterstützte Währung.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amountInit Betrag der abgerechnet werden sollte in currencyInit
+		 * @result string $currencyInit Währungseinheit mit der abgerechnet werden sollte
+		 * @result integer $amountBooked gebuchter Betrag in currencyBooked
+		 * @result string $currencyBooked Währungseinheit mit der gebucht wurde
+		 * @result integer $amountInternal abgerechneter Betrag in currencyInternal
+		 * @result string $currencyInternal (default='EUR')  Währungseinheit für interne Verbuchung
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType (default=null)  Kartentyp, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $cardNumber (default=null)  partielle Kreditkartennummer [letzten 4 Stellen], kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryYear (default=null)  Gültigkeits Jahr, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryMonth (default=null) 	Gültigkeits Monat, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer nicht transaktionsbezogenen Gutschrift.
+		 * 
+		 *  Dies ermöglicht es Ihnen beliebige Beträge auf das Kreditkartenkonto einen Kunden zu übertragen.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 * 
+		 *  HINWEIS:
+		 *  Diese Funktionalität bedarf manueller Freischaltung, und wird vom buchbaren Volumen beschränkt
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCredit($accessKey, $testMode=0, $sessionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Zuordnung einer `dataStorageId` von einem Bestandskunden Ihres Systems zu einem Kunden (customerId) bei micropayment
+		 * 
+		 *  Wichtig:
+		 *  Diese Funktion ist nur bei einem Wechsel von einem anderen DataStorage-Anbieter relevant und setzt den
+		 *  Import der zugehörigen Kreditkartendaten vorraus separat beantragt und durchgeführt werden muss,
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $dataStorageId Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * 
+		 * @return boolean 
+		 */
+		public function dataStorageIdImport($accessKey, $testMode=0, $customerId, $dataStorageId);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type (default=null)  Kartentyp
+		 * @result string $number (default=null)  partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear (default=null)  Gültigkeits Jahr
+		 * @result integer $expiryMonth (default=null) 	Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId, $fraudDetection=1);
+
+		/**
+		 * Gibt eine Liste der, vom System durch Umrechnung, unterstützten Währungen zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetSupported($accessKey, $testMode=0);
+
+		/**
+		 * Gibt eine Liste der, von Ihrem Account, nativ unterstützten Währungen, optional für einen bestimmten Kartentyp, zurück.
+		 * 
+		 *  Hinweis:
+		 *  Die native Unterstützung weiterer Währungen erhalten Sie durch die Beantragung zusätzlicher VU-Nummern.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param CardType $cardtype (default=null)  Typ der Kreditkarte
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetNativeSupported($accessKey, $testMode=0, $cardtype=null);
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4_1.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4_1.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4_1.php	(revision 7754)
@@ -0,0 +1,573 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.4.1
+	 * @created 2011-10-11 21:40:15
+	 */
+	interface IMcpCreditcardService_v1_4_1 {
+
+		/**
+		 * Errechnet ein Scoring für einen zuvor angelegten Kunden, den zugehörigen Kreditkartendaten sowie der IP-Adresse und ggf. Http-Request-Headern des Kunden.
+		 *  Daher ist es für die Verwendung sinnvoll möglichst alle Daten zu erfassen um die Genauigkeit des Scorings zu erhöhen.
+		 * 
+		 *  Begrifflichkeiten:
+		 *   E-Mail           E-Mail-Adressen aus Kundendaten
+		 *   BillingCountry   Land des Kunden aus Adressendaten des Kunden [billCountry]
+		 *   BillingLocation  Standort des Kunden aus Adressendaten des Kunden
+		 *   BinCountry       Land der Kreditkartenbank (BIN-Code) [ccCountry]
+		 *   IPCountry        Land durch IP ermittelt [ipCountry]
+		 *   IPLocation       Standort ermittelt durch IP
+		 * 
+		 *  Wichtung  Wert
+		 *     2.5    E-Mail (Anbieter von Temporären E-Mail-Adressen / Freemail Provider > höheres Risiko)
+		 *     2.5    IPCountry != BillingCountry
+		 *     2.0    BillingCountry != BinCountry
+		 *     5.0    customerIp ist Anonymous-Proxy
+		 *     2.5    customerIp ist bekannter Proxy
+		 *    10.0    Entfernung IPLocation zu BillingLocation (höhere Entfernung = höheres Risiko)
+		 *     5.0    E-Mail steht auf Badlist (Hockrisiko)
+		 *     5.0    BillingLocation ist bekannter Maildrop (Postfach etc.)
+		 *     5.0    IPCountry oder BillingCountry sind Hochrisikoländer - z.Z. sind das:
+		 *              Egypt, Ghana, Indonesia, Lebanon, Macedonia, Morocco, Nigeria,
+		 *              Pakistan, Romania, Serbia and Montenegro, Ukraine, Vietnam
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param string $customerIp IPv4 des Benutzers
+		 * @param map $customerRequestHeader (default=null)  Liste mit Http-Request-Headern des Kunden - ausgewertet werden: User-Agent, Accept-Language sowie die Proxy-Header X-Forwarded-For/Client-Ip
+		 * 
+		 * @return struct 
+		 * @result string $billCountry (default=null)  Land [ISO 3166-1-alpha-2] aus den Adressdaten des Kundensatzes bspw. DE, AT, CH
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result float $scoreValue (default=null)  Bewertung mit Werten zwischen 0 und 100, wobei 0 für geringes und 100 für hohes Risiko steht
+		 * @result string $scoreExplanation (default=null)  Erläuterung zu der Bewertung in Textform [Englisch]
+		 */
+		public function customerScoring($accessKey, $testMode=0, $customerId, $customerIp, $customerRequestHeader=null);
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 * 
+		 *  Wenn sich `currencyInit` und `currencyBooked` unterscheiden, dann fehlt die native Unterstützung für die gewünschte Währung.
+		 *  In diesem Fall erfolgte eine Umrechnung in eine nativ unterstützte Währung.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amountInit Betrag der abgerechnet werden sollte in currencyInit
+		 * @result string $currencyInit Währungseinheit mit der abgerechnet werden sollte
+		 * @result integer $amountBooked gebuchter Betrag in currencyBooked
+		 * @result string $currencyBooked Währungseinheit mit der gebucht wurde
+		 * @result integer $amountInternal abgerechneter Betrag in currencyInternal
+		 * @result string $currencyInternal (default='EUR')  Währungseinheit für interne Verbuchung
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType (default=null)  Kartentyp, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $cardNumber (default=null)  partielle Kreditkartennummer [letzten 4 Stellen], kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryYear (default=null)  Gültigkeits Jahr, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryMonth (default=null) 	Gültigkeits Monat, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer nicht transaktionsbezogenen Gutschrift.
+		 * 
+		 *  Dies ermöglicht es Ihnen beliebige Beträge auf das Kreditkartenkonto einen Kunden zu übertragen.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 * 
+		 *  HINWEIS:
+		 *  Diese Funktionalität bedarf manueller Freischaltung, und wird vom buchbaren Volumen beschränkt
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCredit($accessKey, $testMode=0, $sessionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Zuordnung einer `dataStorageId` von einem Bestandskunden Ihres Systems zu einem Kunden (customerId) bei micropayment
+		 * 
+		 *  Wichtig:
+		 *  Diese Funktion ist nur bei einem Wechsel von einem anderen DataStorage-Anbieter relevant und setzt den
+		 *  Import der zugehörigen Kreditkartendaten vorraus separat beantragt und durchgeführt werden muss,
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $dataStorageId Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * 
+		 * @return boolean 
+		 */
+		public function dataStorageIdImport($accessKey, $testMode=0, $customerId, $dataStorageId);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type (default=null)  Kartentyp
+		 * @result string $number (default=null)  partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear (default=null)  Gültigkeits Jahr
+		 * @result integer $expiryMonth (default=null) 	Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId, $fraudDetection=1);
+
+		/**
+		 * Gibt eine Liste der, vom System durch Umrechnung, unterstützten Währungen zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetSupported($accessKey, $testMode=0);
+
+		/**
+		 * Gibt eine Liste der, von Ihrem Account, nativ unterstützten Währungen, optional für einen bestimmten Kartentyp, zurück.
+		 * 
+		 *  Hinweis:
+		 *  Die native Unterstützung weiterer Währungen erhalten Sie durch die Beantragung zusätzlicher VU-Nummern.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param CardType $cardtype (default=null)  Typ der Kreditkarte
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetNativeSupported($accessKey, $testMode=0, $cardtype=null);
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4_2.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4_2.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_4_2.php	(revision 7754)
@@ -0,0 +1,575 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.4.2
+	 * @created 2011-10-11 21:40:22
+	 */
+	interface IMcpCreditcardService_v1_4_2 {
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *  - SessionStatus (status)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param SessionStatus $status (default=null)  Nur Sessions mit dem gewünschten Status in das Ergebnisliste aufnehmen oder [NULL] um Statusfilter zu deaktivieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null, $status=null);
+
+		/**
+		 * Errechnet ein Scoring für einen zuvor angelegten Kunden, den zugehörigen Kreditkartendaten sowie der IP-Adresse und ggf. Http-Request-Headern des Kunden.
+		 *  Daher ist es für die Verwendung sinnvoll möglichst alle Daten zu erfassen um die Genauigkeit des Scorings zu erhöhen.
+		 * 
+		 *  Begrifflichkeiten:
+		 *   E-Mail           E-Mail-Adressen aus Kundendaten
+		 *   BillingCountry   Land des Kunden aus Adressendaten des Kunden [billCountry]
+		 *   BillingLocation  Standort des Kunden aus Adressendaten des Kunden
+		 *   BinCountry       Land der Kreditkartenbank (BIN-Code) [ccCountry]
+		 *   IPCountry        Land durch IP ermittelt [ipCountry]
+		 *   IPLocation       Standort ermittelt durch IP
+		 * 
+		 *  Wichtung  Wert
+		 *     2.5    E-Mail (Anbieter von Temporären E-Mail-Adressen / Freemail Provider > höheres Risiko)
+		 *     2.5    IPCountry != BillingCountry
+		 *     2.0    BillingCountry != BinCountry
+		 *     5.0    customerIp ist Anonymous-Proxy
+		 *     2.5    customerIp ist bekannter Proxy
+		 *    10.0    Entfernung IPLocation zu BillingLocation (höhere Entfernung = höheres Risiko)
+		 *     5.0    E-Mail steht auf Badlist (Hockrisiko)
+		 *     5.0    BillingLocation ist bekannter Maildrop (Postfach etc.)
+		 *     5.0    IPCountry oder BillingCountry sind Hochrisikoländer - z.Z. sind das:
+		 *              Egypt, Ghana, Indonesia, Lebanon, Macedonia, Morocco, Nigeria,
+		 *              Pakistan, Romania, Serbia and Montenegro, Ukraine, Vietnam
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param string $customerIp IPv4 des Benutzers
+		 * @param map $customerRequestHeader (default=null)  Liste mit Http-Request-Headern des Kunden - ausgewertet werden: User-Agent, Accept-Language sowie die Proxy-Header X-Forwarded-For/Client-Ip
+		 * 
+		 * @return struct 
+		 * @result string $billCountry (default=null)  Land [ISO 3166-1-alpha-2] aus den Adressdaten des Kundensatzes bspw. DE, AT, CH
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result float $scoreValue (default=null)  Bewertung mit Werten zwischen 0 und 100, wobei 0 für geringes und 100 für hohes Risiko steht
+		 * @result string $scoreExplanation (default=null)  Erläuterung zu der Bewertung in Textform [Englisch]
+		 */
+		public function customerScoring($accessKey, $testMode=0, $customerId, $customerIp, $customerRequestHeader=null);
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 * 
+		 *  Wenn sich `currencyInit` und `currencyBooked` unterscheiden, dann fehlt die native Unterstützung für die gewünschte Währung.
+		 *  In diesem Fall erfolgte eine Umrechnung in eine nativ unterstützte Währung.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amountInit Betrag der abgerechnet werden sollte in currencyInit
+		 * @result string $currencyInit Währungseinheit mit der abgerechnet werden sollte
+		 * @result integer $amountBooked gebuchter Betrag in currencyBooked
+		 * @result string $currencyBooked Währungseinheit mit der gebucht wurde
+		 * @result integer $amountInternal abgerechneter Betrag in currencyInternal
+		 * @result string $currencyInternal (default='EUR')  Währungseinheit für interne Verbuchung
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType (default=null)  Kartentyp, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $cardNumber (default=null)  partielle Kreditkartennummer [letzten 4 Stellen], kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryYear (default=null)  Gültigkeits Jahr, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryMonth (default=null) 	Gültigkeits Monat, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer nicht transaktionsbezogenen Gutschrift.
+		 * 
+		 *  Dies ermöglicht es Ihnen beliebige Beträge auf das Kreditkartenkonto einen Kunden zu übertragen.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 * 
+		 *  HINWEIS:
+		 *  Diese Funktionalität bedarf manueller Freischaltung, und wird vom buchbaren Volumen beschränkt
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCredit($accessKey, $testMode=0, $sessionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Zuordnung einer `dataStorageId` von einem Bestandskunden Ihres Systems zu einem Kunden (customerId) bei micropayment
+		 * 
+		 *  Wichtig:
+		 *  Diese Funktion ist nur bei einem Wechsel von einem anderen DataStorage-Anbieter relevant und setzt den
+		 *  Import der zugehörigen Kreditkartendaten vorraus separat beantragt und durchgeführt werden muss,
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $dataStorageId Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * 
+		 * @return boolean 
+		 */
+		public function dataStorageIdImport($accessKey, $testMode=0, $customerId, $dataStorageId);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type (default=null)  Kartentyp
+		 * @result string $number (default=null)  partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear (default=null)  Gültigkeits Jahr
+		 * @result integer $expiryMonth (default=null) 	Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId, $fraudDetection=1);
+
+		/**
+		 * Gibt eine Liste der, vom System durch Umrechnung, unterstützten Währungen zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetSupported($accessKey, $testMode=0);
+
+		/**
+		 * Gibt eine Liste der, von Ihrem Account, nativ unterstützten Währungen, optional für einen bestimmten Kartentyp, zurück.
+		 * 
+		 *  Hinweis:
+		 *  Die native Unterstützung weiterer Währungen erhalten Sie durch die Beantragung zusätzlicher VU-Nummern.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param CardType $cardtype (default=null)  Typ der Kreditkarte
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetNativeSupported($accessKey, $testMode=0, $cardtype=null);
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_5.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_5.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_5.php	(revision 7754)
@@ -0,0 +1,616 @@
+<?php
+
+	/**
+	 * Dieser Service stellt eine Server2Server-Schnittstelle (API), zur Buchung von Transaktionen über die Zahlungsart Kreditkarte, zur Verfügung (Creditcard - API.Event).
+	 * 
+	 *   Vorraussetzungen:
+	 *  - Ein Account bei micropayment(tm) - Anmeldung unter www.micropayment.de
+	 *  - Die Freischaltung von Creditcard - API.Event durch unseren Händler-Support (support@micropayment.de)
+	 *  - Eine Vertrags-Unternehmennummer (VU-Nummer) die Sie im ControlCenter beantragen können
+	 * 
+	 *  Konfiguration:
+	 *  Nach der Freischaltung von Creditcard - API.Event durch unseren Support loggen Sie sich in das ControlCenter Ihres Accounts ein und begeben sich zu dem Menüpunkt "Meine Konfiguration":
+	 *  - hier finden Sie im unteren Bereich den `AccessKey` den Sie für die Verwendung des API benötigen
+	 *  - im Untermenüpunkt "APIs" konfigurien und aktivieren Sie Creditcard - API.Event
+	 *  - im Untermenüpunkt "Zugriffsberechtigungen" konfigurieren Sie bitte die IP-Adresse/IP-Range der Server, von dem aus Sie auf das API zugreifen möchten
+	 * 
+	 *  Hinweis zu Hoch-Traffic-Anwendungen:
+	 *  Grundsätzlich kann ein Kreditkartenterminal immer nur eine Buchung zur selben Zeit ausführen.
+	 *  Bei normalem Traffic fängt eine Warteschlange gleichzeitige Anfragen auf.
+	 *  Wenn aber parallele Transaktionen erforderlich sind (z.B. bei Trafficspitzen), können Sie zur Lastverteilung bei unserem Support zusätzliche Terminals ordern.
+	 * 
+	 *  Hinweise zum TestModus:
+	 *  - Aktivierung der Testumgebung erfolgt in der jeweiligen Funktion über den Parameter `testMode`
+	 *  - für den TestModus stehen folgende Test-Kartennummern zur Verfügung:
+	 * 	- VISA: 4111111111111111
+	 * 	- MASTER: 5454545454545454
+	 * 	- AMEX: 343434343434343
+	 *  - um erfolgreiche Buchungen durchzuführen, ist als CVC2-Code die 666 zu verwenden, bei allen Anderen gilt die Transaktion als fehlgeschlagen
+	 *  - um einen spezifischen Terminal-Fehlercode auszulösen, ist als CVC2-Code die 555 zu verwenden:
+	 *    Der als Integerwert (bspw. 534) angefordertet Endkundenbetrag, liefert im Eurocent-Anteil (bspw. 34) den Fehlercode (`transactionResultCode`) zurück - z.B. 534 => ipg34.
+	 *  	 Bitte beachten Sie, dass das erwartete Ergebnis nur bei der Verwendung der Währung (`currency`) "EUR" erreicht wird.
+	 * 
+	 *  Übermittlung von Adressdaten:
+	 *  Sollten Ihnen die Adressdaten Ihrer Endkunden zur Verfügung stehen, empfehlen wir diese mittles "addressSet" im Kundendatensatz zu hinterlegen.
+	 *  Die im Kundendatensatz (customerCreate, customerSet) hinterlegten Adressdaten, werden zum Einen für das Adress-Verifikations-System (AVS, verfügbar ab Version 1.5) benötigt,
+	 *  zum Anderen werden diese Daten bei Chargeback-Anfragen (s.g. Beleganforderungen von Issuer und Acquirerer) verwendet.
+	 * 
+	 *  Fehlercodes:
+	 *  Eine Übersicht über die möglichen Fehlercodes des API als auch des Terminals finden Sie unter folgender Adresse:
+	 *  https://webservices.micropayment.de/public/creditcard/ERRORCODES/
+	 * 
+	 *  Updates/Changelog:
+	 *  Wenn Sie bisher eine ältere Version dieses APIs verwenden, könnten Sie sich im Changelog einen Überblick über die Neuerungen verschaffen:
+	 *  https://webservices.micropayment.de/public/creditcard/CHANGELOG/
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Yves Berkholz, Guido Franke
+	 * @version 1.5
+	 * @created 2011-10-11 21:40:30
+	 */
+	interface IMcpCreditcardService_v1_5 {
+
+		/**
+		 * Gibt Informationen über eine Transaktion anhand einer Transaktionsnummer zurück.
+		 * 
+		 *  Wenn sich `currencyInit` und `currencyBooked` unterscheiden, dann fehlt die native Unterstützung für die gewünschte Währung.
+		 *  In diesem Fall erfolgte eine Umrechnung in eine nativ unterstützte Währung.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer
+		 * 
+		 * @return struct 
+		 * @result string $transactionId Transaktionsnummer
+		 * @result string $sessionId eindeutige ID des Vorgangs
+		 * @result string $customerId ID des Kunden
+		 * @result string $auth AuthCode
+		 * @result integer $amountInit Betrag der abgerechnet werden sollte in currencyInit
+		 * @result string $currencyInit Währungseinheit mit der abgerechnet werden sollte
+		 * @result integer $amountBooked gebuchter Betrag in currencyBooked
+		 * @result string $currencyBooked Währungseinheit mit der gebucht wurde
+		 * @result integer $amountInternal abgerechneter Betrag in currencyInternal
+		 * @result string $currencyInternal (default='EUR')  Währungseinheit für interne Verbuchung
+		 * @result TransactionType $type Art der Transaktion
+		 * @result TransactionStatus $status Status der Transaktion
+		 * @result datetime $created Zeitpunkt der Transaktion
+		 * @result string $ip IPv4 des Benutzers
+		 * @result string $cardType (default=null)  Kartentyp, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $cardNumber (default=null)  partielle Kreditkartennummer [letzten 4 Stellen], kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryYear (default=null)  Gültigkeits Jahr, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result integer $cardExpiryMonth (default=null) 	Gültigkeits Monat, kann bei aktiviertem DataStorage-Feature null sein
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 * @result AVSResult $avsResult (default=null)  Wenn ein AVS-Check durchgeführt wurde dessen Ergebnis
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+		/**
+		 * Führt eine Transaktion zur sofortigen Buchung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * @param integer $avsCheck (default=0)  de/aktiviert das AddressVerificationSystem
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 * @result AVSResult $avsResult (default=null)  wenn ein AVS-Check angefordert wurde dessen Ergebnis
+		 */
+		public function transactionPurchase($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1, $avsCheck=0);
+
+		/**
+		 * Führt eine Transaktion zur Vorautorisierung, des durch `sessionCreate` definierten Betrages, durch.
+		 * 
+		 *  Der gewünschten Betrag wird für Sie reserviert bis:
+		 *  - Sie den Betrag mittels `transactionReversal` wieder freigeben
+		 *  - Sie den Gesamt- oder Teilbetrag mit `transactionCapture` buchen
+		 *  - die Reservierung nach ca. 14 Tagen automatisch wieder freigegeben wird
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $cvc2 (default=null)  CVC2-Code der Kreditkarte, muß min einmal pro Kreditkarte/Verfallszeit angegeben worden sein
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * @param integer $avsCheck (default=0)  de/aktiviert das AddressVerificationSystem
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 * @result AVSResult $avsResult (default=null)  wenn ein AVS-Check angefordert wurde dessen Ergebnis
+		 */
+		public function transactionAuthorization($accessKey, $testMode=0, $sessionId, $cvc2=null, $fraudDetection=1, $avsCheck=0);
+
+		/**
+		 * Versendet eine Benachrichtigung über eine transaktionsbezogene Gutschrift
+		 *  an die im ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionBackpayNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Versendet eine Benachrichtigung über einen Refund
+		 *  an die im ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer REFUND-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionRefundNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Versendet eine Benachrichtigung über eine NICHT transaktionsbezogene Gutschrift
+		 *  an die im ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer CREDIT-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionCreditNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Gibt eine Liste von Bezahlvorgängen anhand von Parametern zurück
+		 * 
+		 *  Folgende frei kombinierbare Parameter stehen zur Verfügung:
+		 *  - Kunde (customerId)
+		 *  - Zeitraum von/bis (dtmFrom/dtmTo)
+		 *  - SessionStatus (status)
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eindeutige ID des Kunden oder [NULL] ohne Kundeneinschränkung
+		 * @param datetime $dtmFrom (default=null)  Anfang der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param datetime $dtmTo (default=null)  Ende der Zeitraumbegrenzung oder [NULL] um diese Zeitraumbegrenzung nicht zu definieren
+		 * @param SessionStatus $status (default=null)  Nur Sessions mit dem gewünschten Status in das Ergebnisliste aufnehmen oder [NULL] um Statusfilter zu deaktivieren
+		 * 
+		 * @return string[] 
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId=null, $dtmFrom=null, $dtmTo=null, $status=null);
+
+		/**
+		 * Errechnet ein Scoring für einen zuvor angelegten Kunden, den zugehörigen Kreditkartendaten sowie der IP-Adresse und ggf. Http-Request-Headern des Kunden.
+		 *  Daher ist es für die Verwendung sinnvoll möglichst alle Daten zu erfassen um die Genauigkeit des Scorings zu erhöhen.
+		 * 
+		 *  Begrifflichkeiten:
+		 *   E-Mail           E-Mail-Adressen aus Kundendaten
+		 *   BillingCountry   Land des Kunden aus Adressendaten des Kunden [billCountry]
+		 *   BillingLocation  Standort des Kunden aus Adressendaten des Kunden
+		 *   BinCountry       Land der Kreditkartenbank (BIN-Code) [ccCountry]
+		 *   IPCountry        Land durch IP ermittelt [ipCountry]
+		 *   IPLocation       Standort ermittelt durch IP
+		 * 
+		 *  Wichtung  Wert
+		 *     2.5    E-Mail (Anbieter von Temporären E-Mail-Adressen / Freemail Provider > höheres Risiko)
+		 *     2.5    IPCountry != BillingCountry
+		 *     2.0    BillingCountry != BinCountry
+		 *     5.0    customerIp ist Anonymous-Proxy
+		 *     2.5    customerIp ist bekannter Proxy
+		 *    10.0    Entfernung IPLocation zu BillingLocation (höhere Entfernung = höheres Risiko)
+		 *     5.0    E-Mail steht auf Badlist (Hockrisiko)
+		 *     5.0    BillingLocation ist bekannter Maildrop (Postfach etc.)
+		 *     5.0    IPCountry oder BillingCountry sind Hochrisikoländer - z.Z. sind das:
+		 *              Egypt, Ghana, Indonesia, Lebanon, Macedonia, Morocco, Nigeria,
+		 *              Pakistan, Romania, Serbia and Montenegro, Ukraine, Vietnam
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param string $customerIp IPv4 des Benutzers
+		 * @param map $customerRequestHeader (default=null)  Liste mit Http-Request-Headern des Kunden - ausgewertet werden: User-Agent, Accept-Language sowie die Proxy-Header X-Forwarded-For/Client-Ip
+		 * 
+		 * @return struct 
+		 * @result string $billCountry (default=null)  Land [ISO 3166-1-alpha-2] aus den Adressdaten des Kundensatzes bspw. DE, AT, CH
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result float $scoreValue (default=null)  Bewertung mit Werten zwischen 0 und 100, wobei 0 für geringes und 100 für hohes Risiko steht
+		 * @result string $scoreExplanation (default=null)  Erläuterung zu der Bewertung in Textform [Englisch]
+		 */
+		public function customerScoring($accessKey, $testMode=0, $customerId, $customerIp, $customerRequestHeader=null);
+
+		/**
+		 * Führt eine Transaktion zur Buchung (Gesamt- oder Teilbetrag) einer Vorautorisierung durch.
+		 * 
+		 *  Sie buchen den reservierte Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung, erstellt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId (default=null)  Transaktionsnummer von "transactionAuthorization"
+		 * @param integer $amount (default=null)  [NULL] - entspricht Betrag aus Vorautorisierung | wenn abweichend, der zu buchende Betrag <= Betrag aus Vorautorisierung
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCapture($accessKey, $testMode=0, $sessionId, $transactionId=null, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer Gesamt- oder Teilrückzahlung einer den Kunden belastende Buchung.
+		 * 
+		 *  Sie erstatten den gebuchten Betrag:
+		 *  - In voller Höhe (Gesamtbetrag) - der Parameter `amount` entfällt ([NULL])
+		 *  - Oder nur einen Teilbetrag - der Parameter `amount` enthält den gewünschten Teilbetrag
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionPurchase` oder `transactionCapture` eine den Kunden belastende Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionRefund($accessKey, $testMode=0, $sessionId, $transactionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Transaktion zur Buchung einer nicht transaktionsbezogenen Gutschrift.
+		 * 
+		 *  Dies ermöglicht es Ihnen beliebige Beträge auf das Kreditkartenkonto einen Kunden zu übertragen.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt haben,
+		 *  sowie dem Kunden, unter Zuhilfenahme von `creditcardDataSet`, Kreditkartendaten zugewiesen haben.
+		 * 
+		 *  HINWEIS:
+		 *  Diese Funktionalität bedarf manueller Freischaltung, und wird vom buchbaren Volumen beschränkt
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param integer $amount (default=null)  zurückzubuchender Betrag, falls abweichend von Orginaltransaktion
+		 * @param string $currency (default=null)  Währung, falls abweichend von Originaltransaktion [nur relevant wenn `amount` abweichend]
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $ccCountry (default=null)  Land [ISO 3166-1-alpha-2] der Kreditkarte wenn verfügbar, bspw. DE, AT, CH
+		 * @result string $ipCountry (default=null)  Land [ISO 3166-1-alpha-2] der IP wenn verfügbar, bspw. GB, US
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionCredit($accessKey, $testMode=0, $sessionId, $amount=null, $currency=null, $fraudDetection=1);
+
+		/**
+		 * Zuordnung einer `dataStorageId` von einem Bestandskunden Ihres Systems zu einem Kunden (customerId) bei micropayment
+		 * 
+		 *  Wichtig:
+		 *  Diese Funktion ist nur bei einem Wechsel von einem anderen DataStorage-Anbieter relevant und setzt den
+		 *  Import der zugehörigen Kreditkartendaten vorraus separat beantragt und durchgeführt werden muss,
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $dataStorageId Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * 
+		 * @return boolean 
+		 */
+		public function dataStorageIdImport($accessKey, $testMode=0, $customerId, $dataStorageId);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Kreditkartendaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result string $type (default=null)  Kartentyp
+		 * @result string $number (default=null)  partielle Kreditkartennummer [letzten 4 Stellen]
+		 * @result integer $expiryYear (default=null)  Gültigkeits Jahr
+		 * @result integer $expiryMonth (default=null) 	Gültigkeits Monat
+		 * @result boolean $cvc2Required Bei der nächsten Buchung ist der CVC2-Code erforderlich
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 */
+		public function creditcardDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Transaktion zur gebührenfreier Stornierung einer Buchung vor Kassenschnitt oder Freigabe von Vorautorisierungen.
+		 * 
+		 *  Die gebührenfreie Stornierung einer mit `transactionPurchase` durchgeführten Buchung muss am gleichen Tag vor Kassenschnitt um 24 Uhr erfolgen.
+		 *  Die Freigabe einer mittels `transactionAuthorization` erstellten Vorautorisierungen hingegen kann jederzeit durchgeführt werden.
+		 * 
+		 *  Zur Durchführung der Transaktion ist es notwendig das Sie mittels `sessionCreate` einen Bezahlvorgang erstellt,
+		 *  sowie unter Verwendung von `transactionAuthorization` eine Vorautorisierung oder mit `transactionPurchase` eine Buchung durchgeführt haben.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param string $transactionId Transaktionsnummer der Transaktion die zurückgebucht werden soll
+		 * @param integer $fraudDetection (default=1)  de/aktiviert FraudDetection
+		 * 
+		 * @return struct 
+		 * @result SessionStatus $sessionStatus Status der gesamten Session
+		 * @result TransactionStatus $transactionStatus Status der ausgelösten Transaktion
+		 * @result string $transactionId Transaktionsnummer
+		 * @result datetime $transactionCreated Zeitpunkt der Transaktion
+		 * @result string $transactionAuth AuthCode
+		 * @result string $dataStorageId (default=null)  Wenn DataStorage-Feature aktiv, ID der Kreditkartendaten im DataStorage-Service
+		 * @result string $transactionResultCode Transaktionergebnis-Code vom Terminal
+		 * @result string $transactionResultMessage Transaktionergebnis-Nachricht vom Terminal
+		 */
+		public function transactionReversal($accessKey, $testMode=0, $sessionId, $transactionId, $fraudDetection=1);
+
+		/**
+		 * Gibt eine Liste der, vom System durch Umrechnung, unterstützten Währungen zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetSupported($accessKey, $testMode=0);
+
+		/**
+		 * Gibt eine Liste der, von Ihrem Account, nativ unterstützten Währungen, optional für einen bestimmten Kartentyp, zurück.
+		 * 
+		 *  Hinweis:
+		 *  Die native Unterstützung weiterer Währungen erhalten Sie durch die Beantragung zusätzlicher VU-Nummern.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param CardType $cardtype (default=null)  Typ der Kreditkarte
+		 * 
+		 * @return string[] 
+		 */
+		public function currenciesGetNativeSupported($accessKey, $testMode=0, $cardtype=null);
+
+		/**
+		 * Überprüfung von Kreditkarten-Daten (Nummer und Ablaufdatum) auf Gültigkeit
+		 * 
+		 *  - syntaktischen Überprüfung
+		 *  - Luhn-Check
+		 *  - Überschreitung des Ablaufdatums
+		 * 
+		 *  Hinweis: Es findet keine Online-Überprüfung der Daten statt!
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Kreditkarten-Daten sind syntaktisch gültig
+		 */
+		public function creditcardCheckValidity($accessKey, $testMode=0, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Löscht alle im Testmodus übertragenen Daten
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * 
+		 * @return boolean 
+		 */
+		public function resetTest($accessKey, $testMode=1);
+
+		/**
+		 * Versendet eine Benachrichtigung über ein Chargeback an die im
+		 *  ControlCenter angegebene URL und gibt Debuginformationen darüber zurück
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=1)  aktiviert Testumgebung
+		 * @param string $transactionId Transaktionsnummer einer PURCHASE- oder CAPTURE-Transaktion
+		 * 
+		 * @return string 
+		 */
+		public function transactionChargebackNotificationTest($accessKey, $testMode=1, $transactionId);
+
+		/**
+		 * Verknüpft Adressdaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $address Strasse und Hausnummer
+		 * @param string $zipcode Postleitzahl
+		 * @param string $town Ort
+		 * @param string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 * 
+		 * @return boolean 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $address, $zipcode, $town, $country);
+
+		/**
+		 * Gibt die mit einem Kunden verknüpften Adressdaten zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)   aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $address Strasse und Hausnummer
+		 * @result string $zipcode Postleitzahl
+		 * @result string $town Ort
+		 * @result string $country Land [ISO 3166-1-alpha-2] bspw. DE, AT, CH
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Erstellt einen neuen Kunden.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt [min./max. Zeichen 10/40, alphanumerisch]
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * @param string $firstname Vorname des Kunden
+		 * @param string $surname Nachname des Kunde
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden, wenn nach den Transaktionen einen E-Mail an der Kunden versand werden soll
+		 * @param string $culture (default='de-DE')  Sprache & Land des Kunden | gültige Beispielwerte sind 'de', 'de-DE', 'en-US'
+		 * 
+		 * @return string eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null, $firstname, $surname, $email=null, $culture='de-DE');
+
+		/**
+		 * Ändert Daten eines bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern: [NULL] - Parameterliste bleibt unverändert | leeres HashMap - löscht Parameterliste | gefülltes HashMap erweitert/überschreibt bestehende Parameterliste
+		 * @param string $firstname (default=null)  Vorname des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Max'
+		 * @param string $surname (default=null)  Nachname des Kunde: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B 'Mustermann'
+		 * @param string $email (default=null)  E-Mail-Adresse des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültiger Wert z.B. 'max@mustermann.de' ersetzt den aktuellen Wert
+		 * @param string $culture (default=null)  Sprache & Land des Kunden: [NULL] - aktueller Wert bleibt erhalten | gültige Wert z.B. 'de-DE' ersetzt den aktuellen Wert
+		 * 
+		 * @return boolean 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null, $firstname=null, $surname=null, $email=null, $culture=null);
+
+		/**
+		 * Gibt die Daten eines bestehenden Kunden zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return struct 
+		 * @result map $freeParams (default=null)  Liste mit allen freien Parametern
+		 * @result string $firstname (default=null)  Vorname des Kunden
+		 * @result string $surname (default=null)  Nachname des Kunden
+		 * @result string $email (default=null)  E-Mail-Adresse des Kunden
+		 * @result string $culture (default=null)  Sprache & Land des Kunden
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Verknüpft Kreditkartendaten mit einem bestehenden Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $number Kreditkartennummer
+		 * @param integer $expiryYear Gültigkeits Jahr
+		 * @param integer $expiryMonth Gültigkeits Monat
+		 * 
+		 * @return boolean Rückgabewert gibt Auskunft darüber, ob bei der nächsten Buchung der CVC2-Code erforderlich ist
+		 */
+		public function creditcardDataSet($accessKey, $testMode=0, $customerId, $number, $expiryYear, $expiryMonth);
+
+		/**
+		 * Erzeugt einen neuen Bezahlvorgang für einen Kunden
+		 * 
+		 *  Zur Durchführung wird zwingender Weise ein Kunde (customerId) benötigt, den Sie mittels `customerCreate` anlegen können.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der Webmasterfähigkeit des Projekts vorraus - Hinweis: Webmasterfähigkeit steht momentan nicht zur Verfügung
+		 * @param string $webmasterCampaign (default=null)  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert übergeben, wird Der aus der Konfiguration verwendet
+		 * @param string $paytext (default=null)  Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wünschen
+		 * @param string $ip IPv4 des Benutzers
+		 * @param map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @param boolean $sendMail (default=true) 
+		 * 
+		 * @return struct 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result SessionStatus $status Vorgangsstatus "INIT"
+		 * @result datetime $expire Ablaufzeit des Vorgangs
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign=null, $amount=null, $currency='EUR', $title=null, $paytext=null, $ip, $freeParams=null, $sendMail=true);
+
+		/**
+		 * Gibt Informationen über einen Bezahlvorgang, inklusive einer Liste von verknüpften Transaktionen, zurück.
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId eindeutige ID des Vorgangs
+		 * 
+		 * @return struct 
+		 * @result string $customerId ID des Kunden
+		 * @result string $project das Projektkürzel für den Vorgang
+		 * @result string $projectCampaign ein Kampagnenkürzel des Projektbetreibers
+		 * @result string $account Account des beteiligten Webmasters sonst eigener
+		 * @result string $webmasterCampaign ein Kampagnenkürzel des Webmasters
+		 * @result integer $amount abzurechnender Betrag, wird kein Betrag übergeben, wird der Betrag aus der Konfiguration verwendet
+		 * @result string $currency Währungseinheit
+		 * @result string $title Bezeichnung der zu kaufenden Sache
+		 * @result string $ip IPv4 des Benutzers
+		 * @result map $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * @result SessionStatus $status 
+		 * @result datetime $expire (default=null)  Verfallsdatum der Session, nur wenn $status INIT oder EXPIRED
+		 * @result MailStatus $mail Status des Mailversands
+		 * @result string[] $transactionIds (default=null)  Liste von TransaktionsIds die mit dieser Session verknüpft sind
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_0.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_0.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_0.php	(revision 7754)
@@ -0,0 +1,193 @@
+<?php
+
+	/**
+	 * Api steuert die Bezahlung per Lastschrift
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Holger Heyne
+	 * @version 1.0
+	 * @created 2011-02-22 18:42:35
+	 */
+	interface IMcpDebitService_v1_0 {
+
+		/**
+		 * löscht alle Kunden und Transaktionen in der Testumgebung
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode Muss 1 sein
+		 * 
+		 * @return void 
+		 */
+		public function resetTest($accessKey, $testMode);
+
+		/**
+		 * legt neuen Kunden an
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $customerId eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter dem Kunden zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null);
+
+		/**
+		 * ermittelt alle freien Parameter des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result array $freeParams Liste mit allen freien Parametern
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Bankverbindung eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $accountHolder Kontoinhaber
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 */
+		public function bankaccountSet($accessKey, $testMode=0, $customerId, $country='DE', $bankCode, $accountNumber, $accountHolder);
+
+		/**
+		 * ermittelt die Bankverbindung des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $country Sitz der Bank
+		 * @result string $bankCode Bankleitzahl
+		 * @result string $bankName Name der Bank
+		 * @result string $accountNumber Kontonummer
+		 * @result string $accountHolder Kontoinhaber
+		 */
+		public function bankaccountGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt einen neuen Bezahlvorgang
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default='')  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default='')  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default='')  Account des beteiligten Webmasters
+		 * @param string $webmasterCampaign (default='')  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=0)  abzurechnender Betrag in Cent
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default='')  Bezeichnung der zu kaufenden Sache
+		 * @param string $payText (default='')  Abbuchungstext der Lastschrift
+		 * @param string $ip (default='')  IP des Benutzers
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result string $status Vorgangsstatus "INIT" oder "REINIT"
+		 * @result string $expire Ablaufzeit der Bestätigung
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId='', $project, $projectCampaign='', $account='', $webmasterCampaign='', $amount=0, $currency='EUR', $title='', $payText='', $ip='', $freeParams=null);
+
+		/**
+		 * ermittelt Daten eines Bezahlvorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "INIT", "REINIT", "EXPIRED", "APPROVED", "FAILED", "CHARGED" oder "REVERSED"
+		 * @result string $expire Ablaufzeit bzw. Bestätigung des Vorgangs
+		 * @result string $statusDetail Beschreibung für gescheiterte Transaktionen
+		 * @result string $customerId ID des Kunden
+		 * @result string $project zugeordnetes Projekt
+		 * @result string $projectCampaign zugeordnete Projektkampagne
+		 * @result string $account zugeordneter Webmasteraccount
+		 * @result string $webmasterCampaign zugeordnete Webmasterkampagne
+		 * @result integer $amount übergebener Betrag bzw. Standard aus Konfiguration in Cent
+		 * @result string $currency übergebene Währung bzw. "EUR"
+		 * @result string $title übergebene Kaufsache bzw. Standard aus Konfiguration
+		 * @result string $payText Abbuchungstext der Lastschrift
+		 * @result string $ip übergebene IP des Benutzers
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * bestätigt den Lastschrifteinzug eines Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "APPROVED" oder "FAILED"
+		 * @result string $expire Zeitpunkt der Bestätigung
+		 */
+		public function sessionApprove($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt alle Bezahlvorgänge eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in sessionIdList
+		 * @result array $sessionIdList 0-indizierte Liste mit Vorgang-IDs
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * simuliert die Abbuchung für alle bestätigten Vorgänge
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der gebuchten Vorgänge
+		 */
+		public function sessionChargeTest($accessKey, $testMode=0);
+
+		/**
+		 * simuliert Stornierung eines einzelnen Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return void 
+		 */
+		public function sessionReverseTest($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_1.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_1.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_1.php	(revision 7754)
@@ -0,0 +1,299 @@
+<?php
+
+	/**
+	 * Api steuert die Bezahlung per Lastschrift
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Holger Heyne
+	 * @version 1.1
+	 * @created 2011-02-22 18:42:47
+	 */
+	interface IMcpDebitService_v1_1 {
+
+		/**
+		 * löscht alle Kunden und Transaktionen in der Testumgebung
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode Muss 1 sein
+		 * 
+		 * @return void 
+		 */
+		public function resetTest($accessKey, $testMode);
+
+		/**
+		 * legt neuen Kunden an
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $customerId eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter dem Kunden zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null);
+
+		/**
+		 * ermittelt alle freien Parameter des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result array $freeParams Liste mit allen freien Parametern
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Bankverbindung eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $accountHolder Kontoinhaber
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountSet($accessKey, $testMode=0, $customerId, $country='DE', $bankCode, $accountNumber, $accountHolder);
+
+		/**
+		 * ermittelt die Bankverbindung des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $country Sitz der Bank
+		 * @result string $bankCode Bankleitzahl
+		 * @result string $bankName Name der Bank
+		 * @result string $accountNumber Kontonummer
+		 * @result string $accountHolder Kontoinhaber
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * prüft Bankleitzahl und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * 
+		 * @return array 
+		 * @result string $bankName Name der Bank
+		 */
+		public function bankCheck($accessKey, $testMode=0, $country='DE', $bankCode);
+
+		/**
+		 * prüft Bankverbindung und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountCheck($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber);
+
+		/**
+		 * Sperrt Bankverbindung oder gibt sie frei
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $barStatus Sperr-Status BARRED, ALLOWED
+		 * 
+		 * @return void 
+		 */
+		public function bankaccountBar($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber, $barStatus);
+
+		/**
+		 * erzeugt oder ändert Adressdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $firstName Vorname
+		 * @param string $surName Nachname
+		 * @param string $street Strasse und Hausnummer
+		 * @param string $zip Postleitzahl
+		 * @param string $city Ort
+		 * @param string $country (default='DE')  Land
+		 * 
+		 * @return void 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $firstName, $surName, $street, $zip, $city, $country='DE');
+
+		/**
+		 * ermittelt die Adresse des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $firstName Vorname
+		 * @result string $surName Nachname
+		 * @result string $street Strasse und Hausnummer
+		 * @result string $zip Postleitzahl
+		 * @result string $city Ort
+		 * @result string $country Land
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Kontaktdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $email (default=null)  Emailadresse des Kunden
+		 * @param string $phone (default=null)  Festnetzanschluss
+		 * @param string $mobile (default=null)  Handynummer
+		 * 
+		 * @return void 
+		 */
+		public function contactDataSet($accessKey, $testMode=0, $customerId, $email=null, $phone=null, $mobile=null);
+
+		/**
+		 * ermittelt die Kontaktdaten des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $email Emailadresse
+		 * @result string $phone Festnetzanschluss
+		 * @result string $mobile Handynummer
+		 */
+		public function contactDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt einen neuen Bezahlvorgang
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default='')  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default='')  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default='')  Account des beteiligten Webmasters
+		 * @param string $webmasterCampaign (default='')  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=0)  abzurechnender Betrag in Cent
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default='')  Bezeichnung der zu kaufenden Sache
+		 * @param string $payText (default='')  Abbuchungstext der Lastschrift
+		 * @param string $ip (default='')  IP des Benutzers
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result string $status Vorgangsstatus "INIT" oder "REINIT"
+		 * @result string $expire Ablaufzeit der Bestätigung
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId='', $project, $projectCampaign='', $account='', $webmasterCampaign='', $amount=0, $currency='EUR', $title='', $payText='', $ip='', $freeParams=null);
+
+		/**
+		 * ermittelt Daten eines Bezahlvorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "INIT", "REINIT", "EXPIRED", "APPROVED", "FAILED", "CHARGED" oder "REVERSED"
+		 * @result string $expire Ablaufzeit bzw. Bestätigung des Vorgangs
+		 * @result string $statusDetail Beschreibung für gescheiterte Transaktionen
+		 * @result string $customerId ID des Kunden
+		 * @result string $project zugeordnetes Projekt
+		 * @result string $projectCampaign zugeordnete Projektkampagne
+		 * @result string $account zugeordneter Webmasteraccount
+		 * @result string $webmasterCampaign zugeordnete Webmasterkampagne
+		 * @result integer $amount übergebener Betrag bzw. Standard aus Konfiguration in Cent
+		 * @result string $currency übergebene Währung bzw. "EUR"
+		 * @result string $title übergebene Kaufsache bzw. Standard aus Konfiguration
+		 * @result string $payText Abbuchungstext der Lastschrift
+		 * @result string $ip übergebene IP des Benutzers
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * bestätigt den Lastschrifteinzug eines Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "APPROVED" oder "FAILED"
+		 * @result string $expire Zeitpunkt der Bestätigung
+		 */
+		public function sessionApprove($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt alle Bezahlvorgänge eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in sessionIdList
+		 * @result array $sessionIdList 0-indizierte Liste mit Vorgang-IDs
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * simuliert die Abbuchung für alle bestätigten Vorgänge
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der gebuchten Vorgänge
+		 */
+		public function sessionChargeTest($accessKey, $testMode=0);
+
+		/**
+		 * simuliert Stornierung eines einzelnen Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return void 
+		 */
+		public function sessionReverseTest($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_2.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_2.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_2.php	(revision 7754)
@@ -0,0 +1,310 @@
+<?php
+
+	/**
+	 * Api steuert die Bezahlung per Lastschrift
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Holger Heyne
+	 * @version 1.2
+	 * @created 2011-02-22 18:43:23
+	 */
+	interface IMcpDebitService_v1_2 {
+
+		/**
+		 * löscht alle Kunden und Transaktionen in der Testumgebung
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode Muss 1 sein
+		 * 
+		 * @return void 
+		 */
+		public function resetTest($accessKey, $testMode);
+
+		/**
+		 * legt neuen Kunden an
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $customerId eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter dem Kunden zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null);
+
+		/**
+		 * ermittelt alle freien Parameter des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result array $freeParams Liste mit allen freien Parametern
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Bankverbindung eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $accountHolder Kontoinhaber
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountSet($accessKey, $testMode=0, $customerId, $country='DE', $bankCode, $accountNumber, $accountHolder);
+
+		/**
+		 * ermittelt die Bankverbindung des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $country Sitz der Bank
+		 * @result string $bankCode Bankleitzahl
+		 * @result string $bankName Name der Bank
+		 * @result string $accountNumber Kontonummer
+		 * @result string $accountHolder Kontoinhaber
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * prüft Bankleitzahl und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * 
+		 * @return array 
+		 * @result string $bankName Name der Bank
+		 */
+		public function bankCheck($accessKey, $testMode=0, $country='DE', $bankCode);
+
+		/**
+		 * prüft Bankverbindung und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountCheck($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber);
+
+		/**
+		 * Sperrt Bankverbindung oder gibt sie frei
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $barStatus Sperr-Status BARRED, ALLOWED
+		 * 
+		 * @return void 
+		 */
+		public function bankaccountBar($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber, $barStatus);
+
+		/**
+		 * erzeugt oder ändert Adressdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $firstName Vorname
+		 * @param string $surName Nachname
+		 * @param string $street Strasse und Hausnummer
+		 * @param string $zip Postleitzahl
+		 * @param string $city Ort
+		 * @param string $country (default='DE')  Land
+		 * 
+		 * @return void 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $firstName, $surName, $street, $zip, $city, $country='DE');
+
+		/**
+		 * ermittelt die Adresse des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $firstName Vorname
+		 * @result string $surName Nachname
+		 * @result string $street Strasse und Hausnummer
+		 * @result string $zip Postleitzahl
+		 * @result string $city Ort
+		 * @result string $country Land
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Kontaktdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $email (default=null)  Emailadresse des Kunden
+		 * @param string $phone (default=null)  Festnetzanschluss
+		 * @param string $mobile (default=null)  Handynummer
+		 * 
+		 * @return void 
+		 */
+		public function contactDataSet($accessKey, $testMode=0, $customerId, $email=null, $phone=null, $mobile=null);
+
+		/**
+		 * ermittelt die Kontaktdaten des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $email Emailadresse
+		 * @result string $phone Festnetzanschluss
+		 * @result string $mobile Handynummer
+		 */
+		public function contactDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt einen neuen Bezahlvorgang
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default='')  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default='')  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default='')  Account des beteiligten Webmasters
+		 * @param string $webmasterCampaign (default='')  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=0)  abzurechnender Betrag in Cent
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default='')  Bezeichnung der zu kaufenden Sache
+		 * @param string $payText (default='')  Abbuchungstext der Lastschrift
+		 * @param string $ip (default='')  IP des Benutzers
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result string $status Vorgangsstatus "INIT" oder "REINIT"
+		 * @result string $expire Ablaufzeit der Bestätigung
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId='', $project, $projectCampaign='', $account='', $webmasterCampaign='', $amount=0, $currency='EUR', $title='', $payText='', $ip='', $freeParams=null);
+
+		/**
+		 * ermittelt Daten eines Bezahlvorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "INIT", "REINIT", "EXPIRED", "APPROVED", "FAILED", "CHARGED", "REVERSED" oder "RECHARGED"
+		 * @result string $expire Ablaufzeit bzw. Bestätigung des Vorgangs
+		 * @result string $statusDetail Beschreibung für gescheiterte Transaktionen
+		 * @result string $customerId ID des Kunden
+		 * @result string $project zugeordnetes Projekt
+		 * @result string $projectCampaign zugeordnete Projektkampagne
+		 * @result string $account zugeordneter Webmasteraccount
+		 * @result string $webmasterCampaign zugeordnete Webmasterkampagne
+		 * @result integer $amount übergebener Betrag bzw. Standard aus Konfiguration in Cent
+		 * @result string $currency übergebene Währung bzw. "EUR"
+		 * @result string $title übergebene Kaufsache bzw. Standard aus Konfiguration
+		 * @result string $payText Abbuchungstext der Lastschrift
+		 * @result string $ip übergebene IP des Benutzers
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * bestätigt den Lastschrifteinzug eines Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "APPROVED" oder "FAILED"
+		 * @result string $expire Zeitpunkt der Bestätigung
+		 */
+		public function sessionApprove($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt alle Bezahlvorgänge eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in sessionIdList
+		 * @result array $sessionIdList 0-indizierte Liste mit Vorgang-IDs
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * simuliert die Abbuchung für alle bestätigten Vorgänge
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der gebuchten Vorgänge
+		 */
+		public function sessionChargeTest($accessKey, $testMode=0);
+
+		/**
+		 * simuliert Stornierung eines einzelnen Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return void 
+		 */
+		public function sessionReverseTest($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * simuliert die Nachzahlung eines stornierten Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return void 
+		 */
+		public function sessionRechargeTest($accessKey, $testMode=0, $sessionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_3.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_3.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_3.php	(revision 7754)
@@ -0,0 +1,384 @@
+<?php
+
+	/**
+	 * Api steuert die Bezahlung per Lastschrift
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Holger Heyne
+	 * @version 1.3
+	 * @created 2011-02-22 18:43:33
+	 */
+	interface IMcpDebitService_v1_3 {
+
+		/**
+		 * löscht alle Kunden und Transaktionen in der Testumgebung
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode Muss 1 sein
+		 * 
+		 * @return void 
+		 */
+		public function resetTest($accessKey, $testMode);
+
+		/**
+		 * legt neuen Kunden an
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $customerId eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter dem Kunden zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null);
+
+		/**
+		 * ermittelt alle freien Parameter des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * ermittelt alle Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param integer $from (default=0)  Position des ersten auszugebenden Kunden
+		 * @param integer $count (default=100)  Anzahl der auszugebenden Kunden
+		 * 
+		 * @return array 
+		 * @result array $customerIdList Liste mit allen freien Parametern
+		 * @result integer $count Anzahl der Kunden in der Liste
+		 * @result integer $maxCount Gesamtanzahl aller Kunden
+		 */
+		public function customerList($accessKey, $testMode=0, $from=0, $count=100);
+
+		/**
+		 * erzeugt oder ändert Bankverbindung eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $accountHolder Kontoinhaber
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountSet($accessKey, $testMode=0, $customerId, $country='DE', $bankCode, $accountNumber, $accountHolder);
+
+		/**
+		 * ermittelt die Bankverbindung des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $country Sitz der Bank
+		 * @result string $bankCode Bankleitzahl
+		 * @result string $bankName Name der Bank
+		 * @result string $accountNumber Kontonummer
+		 * @result string $accountHolder Kontoinhaber
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * prüft Bankleitzahl und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * 
+		 * @return array 
+		 * @result string $bankName Name der Bank
+		 */
+		public function bankCheck($accessKey, $testMode=0, $country='DE', $bankCode);
+
+		/**
+		 * prüft Bankverbindung und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountCheck($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber);
+
+		/**
+		 * Sperrt Bankverbindung oder gibt sie frei
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $barStatus Sperr-Status BARRED, ALLOWED
+		 * 
+		 * @return void 
+		 */
+		public function bankaccountBar($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber, $barStatus);
+
+		/**
+		 * erzeugt oder ändert Adressdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $firstName Vorname
+		 * @param string $surName Nachname
+		 * @param string $street Strasse und Hausnummer
+		 * @param string $zip Postleitzahl
+		 * @param string $city Ort
+		 * @param string $country (default='DE')  Land
+		 * 
+		 * @return void 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $firstName, $surName, $street, $zip, $city, $country='DE');
+
+		/**
+		 * ermittelt die Adresse des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $firstName Vorname
+		 * @result string $surName Nachname
+		 * @result string $street Strasse und Hausnummer
+		 * @result string $zip Postleitzahl
+		 * @result string $city Ort
+		 * @result string $country Land
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Kontaktdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $email (default=null)  Emailadresse des Kunden
+		 * @param string $phone (default=null)  Festnetzanschluss
+		 * @param string $mobile (default=null)  Handynummer
+		 * 
+		 * @return void 
+		 */
+		public function contactDataSet($accessKey, $testMode=0, $customerId, $email=null, $phone=null, $mobile=null);
+
+		/**
+		 * ermittelt die Kontaktdaten des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $email Emailadresse
+		 * @result string $phone Festnetzanschluss
+		 * @result string $mobile Handynummer
+		 */
+		public function contactDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt einen neuen Bezahlvorgang
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default='')  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default='')  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default='')  Account des beteiligten Webmasters
+		 * @param string $webmasterCampaign (default='')  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=0)  abzurechnender Betrag in Cent
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default='')  Bezeichnung der zu kaufenden Sache
+		 * @param string $payText (default='')  Abbuchungstext der Lastschrift
+		 * @param string $ip (default='')  IP des Benutzers
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result string $status Vorgangsstatus "INIT" oder "REINIT"
+		 * @result string $expire Ablaufzeit der Bestätigung
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId='', $project, $projectCampaign='', $account='', $webmasterCampaign='', $amount=0, $currency='EUR', $title='', $payText='', $ip='', $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter der Session zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function sessionSet($accessKey, $testMode=0, $sessionId, $freeParams=null);
+
+		/**
+		 * ermittelt Daten eines Bezahlvorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "INIT", "REINIT", "EXPIRED", "APPROVED", "FAILED", "CHARGED", "REVERSED" oder "RECHARGED"
+		 * @result string $expire Ablaufzeit bzw. Bestätigung des Vorgangs
+		 * @result string $statusDetail Beschreibung für gescheiterte Transaktionen
+		 * @result string $customerId ID des Kunden
+		 * @result string $project zugeordnetes Projekt
+		 * @result string $projectCampaign zugeordnete Projektkampagne
+		 * @result string $account zugeordneter Webmasteraccount
+		 * @result string $webmasterCampaign zugeordnete Webmasterkampagne
+		 * @result integer $amount übergebener Betrag bzw. Standard aus Konfiguration in Cent
+		 * @result integer $openAmount offener, noch zu zahlender Betrag der Session
+		 * @result string $currency übergebene Währung bzw. "EUR"
+		 * @result string $title übergebene Kaufsache bzw. Standard aus Konfiguration
+		 * @result string $payText Abbuchungstext der Lastschrift
+		 * @result string $ip übergebene IP des Benutzers
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * bestätigt den Lastschrifteinzug eines Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "APPROVED" oder "FAILED"
+		 * @result string $expire Zeitpunkt der Bestätigung
+		 */
+		public function sessionApprove($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt alle Bezahlvorgänge eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in sessionIdList
+		 * @result array $sessionIdList 0-indizierte Liste mit Vorgang-IDs
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * simuliert die Abbuchung für alle bestätigten Vorgänge
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der gebuchten Vorgänge
+		 */
+		public function sessionChargeTest($accessKey, $testMode=0);
+
+		/**
+		 * simuliert Stornierung eines einzelnen Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result integer $amount stornierter Betrag inkl. Gebühr
+		 */
+		public function sessionReverseTest($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * simuliert die komplette Nachzahlung eines stornierten Vorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * @param integer $amount (default=null) optional der nachgezahlte Teilbetrag
+		 * 
+		 * @return array 
+		 * @result integer $amount gebuchter Betrag
+		 */
+		public function sessionRechargeTest($accessKey, $testMode=0, $sessionId, $amount=null);
+
+		/**
+		 * erstellt eine Transaktion vom Typ "EXTERNAL"
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID der zugehörigen Session
+		 * @param string $date (default=null)  Datum der Transaktion
+		 * @param integer $amount Transaktionsbetrag
+		 * @param string $description (default='""')  Beschreibungstext
+		 * 
+		 * @return void 
+		 */
+		public function transactionCreate($accessKey, $testMode=0, $sessionId, $date=null, $amount, $description='""');
+
+		/**
+		 * ermittelt alle Transaktionen für einen Bezahlvorgang
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in transactionIdList
+		 * @result array $transactionIdList 0-indizierte Liste mit Transaktions-IDs
+		 */
+		public function transactionList($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt Daten einer Transaktion
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $sessionId ID des Vorgangs
+		 * @result string $date Datum der Transaktion
+		 * @result string $type Art der Transaktion "BOOKING", "REVERSAL", "BACKPAY", "EXTERNAL"
+		 * @result integer $amount Transaktionsbetrag
+		 * @result string $description Beschreibungstext
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_4.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_4.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpDebitService_v1_4.php	(revision 7754)
@@ -0,0 +1,425 @@
+<?php
+
+	/**
+	 * Api steuert die Bezahlung per Lastschrift
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Holger Heyne
+	 * @version 1.4
+	 * @created 2011-02-22 18:42:21
+	 */
+	interface IMcpDebitService_v1_4 {
+
+		/**
+		 * löscht alle Kunden und Transaktionen in der Testumgebung
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode Muss 1 sein
+		 * 
+		 * @return void 
+		 */
+		public function resetTest($accessKey, $testMode);
+
+		/**
+		 * legt neuen Kunden an
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $customerId eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter dem Kunden zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null);
+
+		/**
+		 * ermittelt alle freien Parameter des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * ermittelt alle Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param integer $from (default=0)  Position des ersten auszugebenden Kunden
+		 * @param integer $count (default=100)  Anzahl der auszugebenden Kunden
+		 * 
+		 * @return array 
+		 * @result array $customerIdList Liste mit allen freien Parametern
+		 * @result integer $count Anzahl der Kunden in der Liste
+		 * @result integer $maxCount Gesamtanzahl aller Kunden
+		 */
+		public function customerList($accessKey, $testMode=0, $from=0, $count=100);
+
+		/**
+		 * erzeugt oder ändert Bankverbindung eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $accountHolder Kontoinhaber
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountSet($accessKey, $testMode=0, $customerId, $country='DE', $bankCode, $accountNumber, $accountHolder);
+
+		/**
+		 * ermittelt die Bankverbindung des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $country Sitz der Bank
+		 * @result string $bankCode Bankleitzahl
+		 * @result string $bankName Name der Bank
+		 * @result string $accountNumber Kontonummer
+		 * @result string $accountHolder Kontoinhaber
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * prüft Bankleitzahl und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * 
+		 * @return array 
+		 * @result string $bankName Name der Bank
+		 */
+		public function bankCheck($accessKey, $testMode=0, $country='DE', $bankCode);
+
+		/**
+		 * prüft Bankverbindung und ermittelt Banknamen
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * 
+		 * @return array 
+		 * @result string $bankName der ermittelte Name der Bank
+		 * @result string $barStatus Sperr-Status der Kontoverbindung
+		 */
+		public function bankaccountCheck($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber);
+
+		/**
+		 * Sperrt Bankverbindung oder gibt sie frei
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $country (default='DE')  Sitz der Bank
+		 * @param string $bankCode Bankleitzahl
+		 * @param string $accountNumber Kontonummer
+		 * @param string $barStatus Sperr-Status BARRED, ALLOWED
+		 * 
+		 * @return void 
+		 */
+		public function bankaccountBar($accessKey, $testMode=0, $country='DE', $bankCode, $accountNumber, $barStatus);
+
+		/**
+		 * erzeugt oder ändert Adressdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $firstName Vorname
+		 * @param string $surName Nachname
+		 * @param string $street Strasse und Hausnummer
+		 * @param string $zip Postleitzahl
+		 * @param string $city Ort
+		 * @param string $country (default='DE')  Land
+		 * 
+		 * @return void 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $firstName, $surName, $street, $zip, $city, $country='DE');
+
+		/**
+		 * ermittelt die Adresse des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $firstName Vorname
+		 * @result string $surName Nachname
+		 * @result string $street Strasse und Hausnummer
+		 * @result string $zip Postleitzahl
+		 * @result string $city Ort
+		 * @result string $country Land
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Kontaktdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $email (default=null)  Emailadresse des Kunden
+		 * @param string $phone (default=null)  Festnetzanschluss
+		 * @param string $mobile (default=null)  Handynummer
+		 * 
+		 * @return void 
+		 */
+		public function contactDataSet($accessKey, $testMode=0, $customerId, $email=null, $phone=null, $mobile=null);
+
+		/**
+		 * ermittelt die Kontaktdaten des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $email Emailadresse
+		 * @result string $phone Festnetzanschluss
+		 * @result string $mobile Handynummer
+		 */
+		public function contactDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt einen neuen Bezahlvorgang
+		 *  löst die Benachrichtigung sessionStatus mit dem Status "INIT" bzw. "REINIT" aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default='')  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default='')  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default='')  Account des beteiligten Webmasters
+		 * @param string $webmasterCampaign (default='')  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=0)  abzurechnender Betrag in Cent
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default='')  Bezeichnung der zu kaufenden Sache
+		 * @param string $payText (default='')  Abbuchungstext der Lastschrift
+		 * @param string $ip (default='')  IP des Benutzers
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result string $status Vorgangsstatus "INIT" oder "REINIT"
+		 * @result string $expire Ablaufzeit der Bestätigung
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId='', $project, $projectCampaign='', $account='', $webmasterCampaign='', $amount=0, $currency='EUR', $title='', $payText='', $ip='', $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter der Session zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function sessionSet($accessKey, $testMode=0, $sessionId, $freeParams=null);
+
+		/**
+		 * ermittelt Daten eines Bezahlvorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "INIT", "REINIT", "APPROVED", "CHARGED", "REVERSED" oder "RECHARGED"
+		 * @result string $expire Ablaufzeit bzw. Bestätigung des Vorgangs
+		 * @result string $statusDetail Beschreibung für gescheiterte Transaktionen
+		 * @result string $customerId ID des Kunden
+		 * @result string $project zugeordnetes Projekt
+		 * @result string $projectCampaign zugeordnete Projektkampagne
+		 * @result string $account zugeordneter Webmasteraccount
+		 * @result string $webmasterCampaign zugeordnete Webmasterkampagne
+		 * @result integer $amount übergebener Betrag bzw. Standard aus Konfiguration in Cent
+		 * @result integer $openAmount offener, noch zu zahlender Betrag der Session
+		 * @result string $currency übergebene Währung bzw. "EUR"
+		 * @result string $title übergebene Kaufsache bzw. Standard aus Konfiguration
+		 * @result string $payText Abbuchungstext der Lastschrift
+		 * @result string $ip übergebene IP des Benutzers
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * bestätigt den Lastschrifteinzug eines Vorgangs
+		 *  löst die Benachrichtigung sessionStatus mit dem Status "APPROVED" aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "APPROVED" oder "FAILED"
+		 * @result string $expire Zeitpunkt der Bestätigung
+		 */
+		public function sessionApprove($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt alle Bezahlvorgänge eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in sessionIdList
+		 * @result array $sessionIdList 0-indizierte Liste mit Vorgang-IDs
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * simuliert die Abbuchung für alle bestätigten Vorgänge
+		 *  erzeugt für jede bestätigte Session eine neue Transaktion mit dem Typ "BOOKING" und löst die Benachrichtigung transactionCreate aus
+		 *  löst die Benachrichtigung sessionStatus mit dem Status "CHARGED" aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der gebuchten Vorgänge
+		 */
+		public function sessionChargeTest($accessKey, $testMode=0);
+
+		/**
+		 * simuliert Stornierung eines einzelnen Vorgangs
+		 *  erzeugt eine neue Transaktion mit dem Typ "REVERSAL" und löst die Benachrichtigung transactionCreate aus
+		 *  löst die Benachrichtigung sessionStatus mit dem Status "REVERSED" aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result integer $amount stornierter Betrag inkl. Gebühr
+		 */
+		public function sessionReverseTest($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * simuliert die komplette Nachzahlung eines stornierten Vorgangs
+		 *  erzeugt eine neue Transaktion mit dem Typ "BACKPAY" und löst die Benachrichtigung transactionCreate aus
+		 *  löst die Benachrichtigung sessionStatus mit dem Status "RECHARGED" aus, wenn der gesamte offene Betrag beglichen wurde
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * @param integer $amount (default=null) optional der nachgezahlte Teilbetrag
+		 * 
+		 * @return array 
+		 * @result integer $amount gebuchter Betrag
+		 */
+		public function sessionRechargeTest($accessKey, $testMode=0, $sessionId, $amount=null);
+
+		/**
+		 * Veranlasst eine (Teil-)Gutschrift und überweist sie zurück
+		 *  erzeugt eine neue Transaktion mit dem Typ "REFUND" und löst die Benachrichtigung transactionCreate aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID der zugehörigen Session
+		 * @param string $bankCode (default=null)  Bankleitzahl des altern. Empfängers
+		 * @param string $accountNumber (default=null)  Kontonummer des altern. Empfängers
+		 * @param string $accountHolder (default=null)  Kontoinhaber
+		 * @param integer $amount (default=null)  Überweisungsbetrag, stdm. wird der gesamte eingegangene Betrag überwiesen
+		 * @param string $payText (default=null)  Buchungstext, stdm. wird der ursprüngliche Buchungstext verwendet
+		 * 
+		 * @return array 
+		 * @result integer $amount Überweisungsbetrag
+		 * @result string $payText Buchungstext
+		 */
+		public function sessionRefund($accessKey, $testMode=0, $sessionId, $bankCode=null, $accountNumber=null, $accountHolder=null, $amount=null, $payText=null);
+
+		/**
+		 * simuliert Stornierung der letzten Gutschrift,
+		 *  erzeugt eine neue Transaktion mit dem Typ "REFUNDREVERSAL" und löst die Benachrichtigung transactionCreate aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result integer $amount stornierter Gutschriftbetrag
+		 */
+		public function sessionRefundReverseTest($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * erstellt eine Transaktion vom Typ "EXTERNAL"
+		 *  löst die Benachrichtigung transactionCreate aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID der zugehörigen Session
+		 * @param string $date (default=null)  Datum der Transaktion
+		 * @param integer $amount Transaktionsbetrag
+		 * @param string $description (default='""')  Beschreibungstext
+		 * 
+		 * @return void 
+		 */
+		public function transactionCreate($accessKey, $testMode=0, $sessionId, $date=null, $amount, $description='""');
+
+		/**
+		 * ermittelt alle Transaktionen für einen Bezahlvorgang
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in transactionIdList
+		 * @result array $transactionIdList 0-indizierte Liste mit Transaktions-IDs
+		 */
+		public function transactionList($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt Daten einer Transaktion
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $sessionId ID des Vorgangs
+		 * @result string $date Datum der Transaktion
+		 * @result string $type Art der Transaktion "BOOKING", "REVERSAL", "BACKPAY", "EXTERNAL", "REFUND", "REFUNDREVERSAL"
+		 * @result integer $amount Transaktionsbetrag
+		 * @result string $description Beschreibungstext
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpPrepayService_v1_0.php
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpPrepayService_v1_0.php	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/IMcpPrepayService_v1_0.php	(revision 7754)
@@ -0,0 +1,344 @@
+<?php
+
+	/**
+	 * Api steuert die Bezahlung per Vorkasse
+	 *
+	 * @copyright 2011 micropayment GmbH
+	 * @link http://www.micropayment.de/
+	 * @author Holger Heyne
+	 * @version 1.0
+	 * @created 2011-12-30 13:03:22
+	 */
+	interface IMcpPrepayService_v1_0 {
+
+		/**
+		 * löscht alle Kunden und Transaktionen in der Testumgebung
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode Muss 1 sein
+		 * 
+		 * @return void 
+		 */
+		public function resetTest($accessKey, $testMode);
+
+		/**
+		 * legt neuen Kunden an
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId (default=null)  eigene eindeutige ID des Kunden, wird anderenfalls erzeugt
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $customerId eigene oder erzeugte eindeutige ID des Kunden
+		 */
+		public function customerCreate($accessKey, $testMode=0, $customerId=null, $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter dem Kunden zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId eindeutige ID des Kunden
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function customerSet($accessKey, $testMode=0, $customerId, $freeParams=null);
+
+		/**
+		 * ermittelt alle freien Parameter des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function customerGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * ermittelt alle Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param integer $from (default=0)  Position des ersten auszugebenden Kunden
+		 * @param integer $count (default=100)  Anzahl der auszugebenden Kunden
+		 * 
+		 * @return array 
+		 * @result array $customerIdList Liste mit allen freien Parametern
+		 * @result integer $count Anzahl der Kunden in der Liste
+		 * @result integer $maxCount Gesamtanzahl aller Kunden
+		 */
+		public function customerList($accessKey, $testMode=0, $from=0, $count=100);
+
+		/**
+		 * erzeugt oder ändert Adressdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $form (default='NONE')  Anrede "NONE", "SIR", "MADAM", "MISS", "COMPANY"
+		 * @param string $firstName Vorname
+		 * @param string $surName Nachname
+		 * @param string $address (default='')  Zusätzliche Angaben z.B. "bei Schmidt"
+		 * @param string $street Strasse und Hausnummer
+		 * @param string $zip Postleitzahl
+		 * @param string $city Ort
+		 * @param string $country (default='DE')  Land
+		 * 
+		 * @return void 
+		 */
+		public function addressSet($accessKey, $testMode=0, $customerId, $form='NONE', $firstName, $surName, $address='', $street, $zip, $city, $country='DE');
+
+		/**
+		 * ermittelt die Adresse des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $form Anrede
+		 * @result string $firstName Vorname
+		 * @result string $surName Nachname
+		 * @result string $address Zusätzliche Angaben
+		 * @result string $street Strasse und Hausnummer
+		 * @result string $zip Postleitzahl
+		 * @result string $city Ort
+		 * @result string $country Land
+		 */
+		public function addressGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt oder ändert Kontaktdaten eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $email (default=null)  Emailadresse des Kunden
+		 * @param string $phone (default=null)  Festnetzanschluss
+		 * @param string $mobile (default=null)  Handynummer
+		 * @param string $language (default=null)  Sprache
+		 * 
+		 * @return void 
+		 */
+		public function contactDataSet($accessKey, $testMode=0, $customerId, $email=null, $phone=null, $mobile=null, $language=null);
+
+		/**
+		 * ermittelt die Kontaktdaten des Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result string $email Emailadresse
+		 * @result string $phone Festnetzanschluss
+		 * @result string $mobile Handynummer
+		 * @result string $language Sprache
+		 */
+		public function contactDataGet($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * erzeugt einen neuen Bezahlvorgang
+		 *  löst die Benachrichtigung sessionStatus mit dem Status "INIT" aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * @param string $sessionId (default=null)  eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt
+		 * @param string $project das Projektkürzel für den Vorgang
+		 * @param string $projectCampaign (default=null)  ein Kampagnenkürzel des Projektbetreibers
+		 * @param string $account (default=null)  Account des beteiligten Webmasters
+		 * @param string $webmasterCampaign (default='')  ein Kampagnenkürzel des Webmasters
+		 * @param integer $amount (default=null)  abzurechnender Betrag in Cent, Standard aus Konfiguration
+		 * @param string $currency (default='EUR')  Währung
+		 * @param string $title (default=null)  Bezeichnung der zu kaufenden Sache, Standard aus Konfiguration
+		 * @param string $payText (default=null)  Verwendungszweck für Überweisung, Standard Projektname und $title
+		 * @param string $expireDays (default=21)  Ablauf der Session in Tagen, genauer Ablauf wird als $expireDate zurückgegeben
+		 * @param string $ip (default=null)  IP des Benutzers
+		 * @param array $freeParams (default=null)  Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+		 * 
+		 * @return array 
+		 * @result string $sessionId eigene oder erzeugte eindeutige ID des Vorgangs
+		 * @result string $status Vorgangsstatus "INIT"
+		 * @result integer $amount übergebener Betrag bzw. Standard aus Konfiguration in Cent
+		 * @result string $currency übergebene Währung bzw. "EUR"
+		 * @result string $title übergebene Kaufsache bzw. Standard aus Konfiguration
+		 * @result string $payToken Token, das Kunde bei Überweisung angeben muss
+		 * @result string $payText Verwendungszweck, inkl. Token
+		 * @result string $expireDate Ablaufdatum der Session, kann bis zu 2 Tagen länger sein als durch expireDays vorgegeben
+		 * @result string $dueDate letzter Überweisungstermin für Kunden
+		 * @result string $bankName Bank, an die überwiesen werden soll
+		 * @result string $bankCountry Land der Bank
+		 * @result string $bankCode Bankleitzahl
+		 * @result string $accountNumber Kontonummer
+		 * @result string $accountHolder Kontoinhaber
+		 * @result string $bic SWIFT BIC für ausländische Kunden
+		 * @result string $iban IBAN
+		 */
+		public function sessionCreate($accessKey, $testMode=0, $customerId, $sessionId=null, $project, $projectCampaign=null, $account=null, $webmasterCampaign='', $amount=null, $currency='EUR', $title=null, $payText=null, $expireDays=21, $ip=null, $freeParams=null);
+
+		/**
+		 * ordnet weitere freie Parameter der Session zu, oder ändert sie
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * @param array $freeParams (default=null)  Liste mit zusätzlichen freien Parametern
+		 * 
+		 * @return void 
+		 */
+		public function sessionSet($accessKey, $testMode=0, $sessionId, $freeParams=null);
+
+		/**
+		 * ermittelt Daten eines Bezahlvorgangs
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $status Vorgangsstatus "INIT", "OPEN", "PAID", "OVERPAID", "CLOSED"
+		 * @result string $customerId ID des Kunden
+		 * @result string $project zugeordnetes Projekt
+		 * @result string $projectCampaign zugeordnete Projektkampagne
+		 * @result string $account zugeordneter Webmasteraccount
+		 * @result string $webmasterCampaign zugeordnete Webmasterkampagne
+		 * @result integer $amount übergebener Betrag bzw. Standard aus Konfiguration in Cent
+		 * @result integer $orderAmount geforderter Betrag der Session
+		 * @result integer $paidAmount bereits bezahlter Betrag
+		 * @result integer $openAmount offener bzw. überzahlter (negativer) Betrag, Differenz aus orderAmount und paidAmount
+		 * @result string $currency übergebene Währung bzw. "EUR"
+		 * @result string $title übergebene Kaufsache bzw. Standard aus Konfiguration
+		 * @result string $payToken Token, das Kunde bei Überweisung angeben muss
+		 * @result string $payText Verwendungszweck für Überweisung
+		 * @result string $expireDate Ablaufdatum
+		 * @result string $dueDate letzter Überweisungstermin
+		 * @result string $bankName Bank
+		 * @result string $bankCode Bankleitzahl
+		 * @result string $accountNumber Kontonummer
+		 * @result string $accountHolder Kontoinhaber
+		 * @result string $bic BIC
+		 * @result string $iban IBAN
+		 * @result string $ip IP des Benutzers
+		 * @result array $freeParams (default=null)  Liste mit allen freien Parametern
+		 */
+		public function sessionGet($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt alle Bezahlvorgänge eines Kunden
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $customerId ID des Kunden
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in sessionIdList
+		 * @result array $sessionIdList 0-indizierte Liste mit Vorgang-IDs
+		 */
+		public function sessionList($accessKey, $testMode=0, $customerId);
+
+		/**
+		 * Veranlasst eine Minderung des Betrags und ggf. eine (Teil-)Gutschrift
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID der zugehörigen Session
+		 * @param integer $amount Minderung der Forderung, als positiver Betrag
+		 * 
+		 * @return array 
+		 * @result string $status ggf. neuer Status, "INIT", "OPEN", "PAID", "OVERPAID", "CLOSED"
+		 * @result integer $orderAmount neuer geforderter Betrag
+		 * @result integer $paidAmount insgesamt gezahlter Betrag
+		 * @result integer $openAmount offener bzw. überzahlter Betrag
+		 */
+		public function sessionChange($accessKey, $testMode=0, $sessionId, $amount);
+
+		/**
+		 * simuliert einen Zahlungeingang für eine oder mehrere Sessions
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID der zugehörigen Session
+		 * @param integer $amount gezahlter Betrag
+		 * @param string $bankCountry (default='DE')  Land der Bank
+		 * @param string $bankCode (default=null)  Bankleitzahl des Kunden
+		 * @param string $accountNumber (default=null)  Kontonummer des Kunden
+		 * @param string $accountHolder (default=null)  Kontoinhaber des Kunden
+		 * 
+		 * @return null 
+		 */
+		public function sessionPayinTest($accessKey, $testMode=0, $sessionId, $amount, $bankCountry='DE', $bankCode=null, $accountNumber=null, $accountHolder=null);
+
+		/**
+		 * simuliert das Auslösen einer Erinnerungsmail
+		 *  löst die Benachrichtigung sessionRemind aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * @param bool $lastRemind (default=false)  Letzte Erinnerung
+		 * 
+		 * @return null 
+		 */
+		public function sessionRemindTest($accessKey, $testMode=0, $sessionId, $lastRemind=false);
+
+		/**
+		 * simuliert den Ablauf einer Session
+		 *  löst die Benachrichtigung sessionStatus mit dem Status "CLOSED" aus
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return null 
+		 */
+		public function sessionExpireTest($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * simuliert die automatische Rücküberweisung für überzahlte Beträge
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  muss 1 sein
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return null 
+		 */
+		public function sessionRefundTest($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt alle Transaktionen für einen Bezahlvorgang
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $sessionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result integer $count Anzahl der Einträge in transactionIdList
+		 * @result array $transactionIdList 0-indizierte Liste mit Transaktions-IDs
+		 */
+		public function transactionList($accessKey, $testMode=0, $sessionId);
+
+		/**
+		 * ermittelt Daten einer Transaktion
+		 *
+		 * @param string $accessKey AccessKey aus dem Controlcenter
+		 * @param integer $testMode (default=0)  aktiviert Testumgebung
+		 * @param string $transactionId ID des Vorgangs
+		 * 
+		 * @return array 
+		 * @result string $sessionId ID des Vorgangs
+		 * @result string $date Datum der Transaktion
+		 * @result string $type Art der Transaktion "CREATE", "PAYIN", "CHANGE", "REFUND", "EXPIRE"
+		 * @result integer $orderAmount Veränderung des geforderten Betrags
+		 * @result integer $paidAmount Veränderung des bezahlten Betrags
+		 * @result integer $openAmount (default=null)  Veränderung des offenen Betrags
+		 */
+		public function transactionGet($accessKey, $testMode=0, $transactionId);
+
+	}
+
+?>
Index: /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/readme.txt
===================================================================
--- /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/readme.txt	(revision 7754)
+++ /system/old/mods/mod_micropayment/mcp-serviceclient_1_17/services/readme.txt	(revision 7754)
@@ -0,0 +1,1 @@
+Hinterlegen Sie hier bitte die Services-Interfaces die Sie auf der Seite der ServiceBeschreibung herrunterladen können.
Index: /system/old/wpsg_mod_micropayment.class.php
===================================================================
--- /system/old/wpsg_mod_micropayment.class.php	(revision 7754)
+++ /system/old/wpsg_mod_micropayment.class.php	(revision 7754)
@@ -0,0 +1,991 @@
+<?php
+
+	/**
+	 * Klasse, die verschiedene Zahlungsarten ÃŒber den micropayment.de Dienstleister ermÃ¶glicht
+	 * Ist nur fÃŒr die Lizenztypen Pro und Enterpreise zulÃ€ssig
+	 * @author Daschmi (05.07.2013)
+	 */
+	class wpsg_mod_micropayment extends wpsg_mod_basic
+	{
+		
+		var $lizenz = 2;
+		var $id = 1750;
+		var $hilfeURL = 'http://wpshopgermany.de/?p=3424';
+		
+		var $event_creditcard_url = 'http://billing.micropayment.de/creditcard/event/';
+		var $event_directdebit_url = 'http://billing.micropayment.de/lastschrift/event/';
+		var $event_ebank2pay_url = 'http://billing.micropayment.de/ebank2pay/event/';				
+		var $event_prepayment_url = 'http://billing.micropayment.de/prepay/event/';
+		var $event_call2pay_url = 'http://billing.micropayment.de/call2pay/event/';
+		var $event_handypay_url = 'http://billing.micropayment.de/handypay/event/';
+		
+		var $dispatcher = false;
+		
+		/**
+		 * Costructor
+		 */
+		public function __construct()
+		{
+				
+			parent::__construct();
+				
+			$this->name = __('micropaymentâ¢', 'wpsg');
+			$this->group = __('Zahlungsarten', 'wpsg');
+			$this->desc = __('ErmÃ¶glicht die Zahlung ÃŒber den Zahlungsdienstleister <a href="http://r132.micropayment.de">micropaymentâ¢</a>.', 'wpsg');
+		 			
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_creditcard_url'))) $this->event_creditcard_url = $this->shop->get_option('wpsg_mod_micropayment_event_creditcard_url');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_directdebit_url'))) $this->event_directdebit_url = $this->shop->get_option('wpsg_mod_micropayment_event_directdebit_url');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_ebank2pay_url'))) $this->event_ebank2pay_url = $this->shop->get_option('wpsg_mod_micropayment_event_ebank2pay_url');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_prepayment_url'))) $this->event_prepayment_url = $this->shop->get_option('wpsg_mod_micropayment_event_prepayment_url');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_call2pay_url'))) $this->event_call2pay_url = $this->shop->get_option('wpsg_mod_micropayment_event_call2pay_url');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_event_handypay_url'))) $this->event_handypay_url = $this->shop->get_option('wpsg_mod_micropayment_event_handypay_url');
+			
+		} // public function __construct()
+		
+		public function install()
+		{
+
+			// Kundentabelle erweitern
+			require_once(WPSG_PATH_WP.'/wp-admin/includes/upgrade.php');
+			
+			$sql = "CREATE TABLE ".WPSG_TBL_ORDER." (
+		   		wpsg_mod_micropayment_customerid VARCHAR(255) NOT NULL,
+				wpsg_mod_micropayment_sessionid VARCHAR(255) NOT NULL,
+				wpsg_mod_micropayment_transactionid VARCHAR(255) NOT NULL			
+		   	) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";
+			
+			dbDelta($sql);
+			
+			// Kreditkarte
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_name', 'Kreditkarte micropaymentâ¢', false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_hint', __('Abrechnung per Kreditkarte', 'wpsg'), false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_mwst', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcard_mwstland', '0', false, false);
+						
+			// Kreditkarte mit Reserivierung
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_name', 'Kreditkarte micropaymentâ¢ (Reservierung)', false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_hint', __('Abrechnung per Kreditkarte (Reservierung)', 'wpsg'), false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_mwst', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_creditcardreservation_mwstland', '0', false, false);
+			
+			// Lastschrift
+			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_name', 'Lastschrift micropaymentâ¢', false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_hint', __('Abrechnung per Lastschrift', 'wpsg'), false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_mwst', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_mwstland', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_directdebit_subject', 'O%order_id% - K%kunde_id%', false, true);
+			
+			// eBank2Pay
+			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_name', 'Online Ãberweisung micropaymentâ¢', false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_hint', __('Abrechnung per Online Banking', 'wpsg'), false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_mwst', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_ebank2pay_mwstland', '0', false, false);
+						
+			// Vorkasse
+			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_name', 'Vorkasse micropaymentâ¢', false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_hint', __('Abrechnung per Vorkasse', 'wpsg'), false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_mwst', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_mwstland', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_prepayment_subject', 'O%order_id% - K%kunde_id%', false, true);
+			
+			// Call2Pay
+			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_name', 'Call2Pay micropaymentâ¢', false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_hint', __('Abrechnung per Anruf / Telefon', 'wpsg'), false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_mwst', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_call2pay_mwstland', '0', false, false);
+						
+			// HandyPay
+			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_name', 'HandyPay micropaymentâ¢', false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_hint', __('Abrechnung per SMS / TAN', 'wpsg'), false, true);
+			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_mwst', '0', false, false);
+			$this->shop->checkDefault('wpsg_mod_micropayment_handypay_mwstland', '0', false, false);
+						
+		} // public function install()
+		
+		public function settings_edit()
+		{
+			
+			$pages = get_pages();
+			
+			$arPages = array(
+					'-1' => __('Neu anlegen und zuordnen', 'wpsg')
+			);
+			
+			foreach ($pages as $k => $v)
+			{
+				$arPages[$v->ID] = $v->post_title.' (ID:'.$v->ID.')';
+			}
+			
+			$this->shop->view['wpsg_mod_micropayment']['arPages'] = $arPages;
+			
+			$api_url = $this->shop->getURL(wpsg_ShopController::URL_BASKET);
+				
+			if (strpos($api_url, '?') === false)
+			{
+			
+				$api_url .= '?wpsg_plugin=wpsg_mod_micropayment&confirm=micropayment';
+			
+			}
+			else
+			{
+			
+				$api_url .= '&wpsg_plugin=wpsg_mod_micropayment&confirm=micropayment';
+			
+			}
+			
+			$this->shop->view['wpsg_mod_micropayment']['apiURL'] = $api_url;
+			
+			$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_micropayment/settings_edit.phtml');
+			
+		} // public function settings_edit()
+		
+		public function settings_save()
+		{
+					
+			// Allgemein
+		    $this->shop->update_option('wpsg_mod_micropayment_projectid', $_REQUEST['wpsg_mod_micropayment_projectid'], false, false, WPSG_SANITIZE_APIKEY);
+		    $this->shop->update_option('wpsg_mod_micropayment_accountid', $_REQUEST['wpsg_mod_micropayment_accountid'], false, false, WPSG_SANITIZE_APIKEY);
+		    $this->shop->update_option('wpsg_mod_micropayment_accesskey', $_REQUEST['wpsg_mod_micropayment_accesskey'], false, false, WPSG_SANITIZE_APIKEY);
+		    $this->shop->createPage(__('Erfolgreiche Zahlung', 'wpsg'), 'wpsg_mod_micropayment_successPage', wpsg_sinput(WPSG_SANITIZE_INT, $_REQUEST['wpsg_mod_micropayment_successPage']));
+			$this->shop->update_option('wpsg_mod_micropayment_paystart', $_REQUEST['wpsg_mod_micropayment_paystart'], false, false, WPSG_SANITIZE_CHECKBOX);
+			
+			$this->shop->update_option('wpsg_mod_micropayment_account', $_REQUEST['wpsg_mod_micropayment_account'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_layout', $_REQUEST['wpsg_mod_micropayment_layout'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_bgcolor', $_REQUEST['wpsg_mod_micropayment_bgcolor'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_campaign', $_REQUEST['wpsg_mod_micropayment_campaign'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_sandbox', $_REQUEST['wpsg_mod_micropayment_sandbox'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_bggfx', $_REQUEST['wpsg_mod_micropayment_bggfx'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			
+			// Kreditkarte
+			$this->shop->update_option('wpsg_mod_micropayment_creditcard_activ', $_REQUEST['wpsg_mod_micropayment_creditcard_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcard_name', $_REQUEST['wpsg_mod_micropayment_creditcard_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcard_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcard_name']));
+			$this->shop->update_option('wpsg_mod_micropayment_creditcard_hint', $_REQUEST['wpsg_mod_micropayment_creditcard_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcard_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcard_hint']));
+			$this->shop->update_option('wpsg_mod_micropayment_creditcard_logo', $_REQUEST['wpsg_mod_micropayment_creditcard_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcard_gebuehr', $_REQUEST['wpsg_mod_micropayment_creditcard_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcard_mwst', $_REQUEST['wpsg_mod_micropayment_creditcard_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcard_mwstland', $_REQUEST['wpsg_mod_micropayment_creditcard_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
+			
+			// Kreditkarte (Reservierung)
+			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_activ', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_name', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcardreservation_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcardreservation_name']));
+			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_hint', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_creditcardreservation_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_creditcardreservation_hint']));
+			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_logo', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_gebuehr', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_mwst', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
+			$this->shop->update_option('wpsg_mod_micropayment_creditcardreservation_mwstland', $_REQUEST['wpsg_mod_micropayment_creditcardreservation_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
+						
+			// Lastschrift
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_activ', $_REQUEST['wpsg_mod_micropayment_directdebit_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_name', $_REQUEST['wpsg_mod_micropayment_directdebit_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_directdebit_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_directdebit_name']));
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_hint', $_REQUEST['wpsg_mod_micropayment_directdebit_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_directdebit_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_directdebit_hint']));
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_logo', $_REQUEST['wpsg_mod_micropayment_directdebit_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_gebuehr', $_REQUEST['wpsg_mod_micropayment_directdebit_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_mwst', $_REQUEST['wpsg_mod_micropayment_directdebit_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_mwstland', $_REQUEST['wpsg_mod_micropayment_directdebit_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_directdebit_subject', $_REQUEST['wpsg_mod_micropayment_directdebit_subject'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			
+			// eBank2Pay
+			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_activ', $_REQUEST['wpsg_mod_micropayment_ebank2pay_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_name', $_REQUEST['wpsg_mod_micropayment_ebank2pay_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_ebank2pay_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_ebank2pay_name']));
+			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_hint', $_REQUEST['wpsg_mod_micropayment_ebank2pay_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_ebank2pay_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_ebank2pay_hint']));
+			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_logo', $_REQUEST['wpsg_mod_micropayment_ebank2pay_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_gebuehr', $_REQUEST['wpsg_mod_micropayment_ebank2pay_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
+			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_mwst', $_REQUEST['wpsg_mod_micropayment_ebank2pay_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
+			$this->shop->update_option('wpsg_mod_micropayment_ebank2pay_mwstland', $_REQUEST['wpsg_mod_micropayment_ebank2pay_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
+						
+			// Vorkasse
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_activ', $_REQUEST['wpsg_mod_micropayment_prepayment_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_name', $_REQUEST['wpsg_mod_micropayment_prepayment_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_prepayment_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_prepayment_name']));
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_hint', $_REQUEST['wpsg_mod_micropayment_prepayment_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_prepayment_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_prepayment_hint']));
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_logo', $_REQUEST['wpsg_mod_micropayment_prepayment_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_gebuehr', $_REQUEST['wpsg_mod_micropayment_prepayment_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_mwst', $_REQUEST['wpsg_mod_micropayment_prepayment_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_mwstland', $_REQUEST['wpsg_mod_micropayment_prepayment_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_prepayment_subject', $_REQUEST['wpsg_mod_micropayment_prepayment_subject'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			
+			// Call2Pay
+			$this->shop->update_option('wpsg_mod_micropayment_call2pay_activ', $_REQUEST['wpsg_mod_micropayment_call2pay_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_call2pay_name', $_REQUEST['wpsg_mod_micropayment_call2pay_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_call2pay_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_call2pay_name']));
+			$this->shop->update_option('wpsg_mod_micropayment_call2pay_hint', $_REQUEST['wpsg_mod_micropayment_call2pay_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_call2pay_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_call2pay_hint']));
+			$this->shop->update_option('wpsg_mod_micropayment_call2pay_logo', $_REQUEST['wpsg_mod_micropayment_call2pay_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_call2pay_gebuehr', $_REQUEST['wpsg_mod_micropayment_call2pay_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
+			$this->shop->update_option('wpsg_mod_micropayment_call2pay_mwst', $_REQUEST['wpsg_mod_micropayment_call2pay_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
+			$this->shop->update_option('wpsg_mod_micropayment_call2pay_mwstland', $_REQUEST['wpsg_mod_micropayment_call2pay_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
+						
+			// HandyPay
+			$this->shop->update_option('wpsg_mod_micropayment_handypay_activ', $_REQUEST['wpsg_mod_micropayment_handypay_activ'], false, false, WPSG_SANITIZE_CHECKBOX);
+			$this->shop->update_option('wpsg_mod_micropayment_handypay_name', $_REQUEST['wpsg_mod_micropayment_handypay_name'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_handypay_name', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_handypay_name']));
+			$this->shop->update_option('wpsg_mod_micropayment_handypay_hint', $_REQUEST['wpsg_mod_micropayment_handypay_hint'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->addTranslationString('wpsg_mod_micropayment_handypay_hint', wpsg_sinput(WPSG_SANITIZE_TEXTFIELD, $_REQUEST['wpsg_mod_micropayment_handypay_hint']));
+			$this->shop->update_option('wpsg_mod_micropayment_handypay_logo', $_REQUEST['wpsg_mod_micropayment_handypay_logo'], false, false, WPSG_SANITIZE_TEXTFIELD);
+			$this->shop->update_option('wpsg_mod_micropayment_handypay_gebuehr', $_REQUEST['wpsg_mod_micropayment_handypay_gebuehr'], false, false, WPSG_SANITIZE_FLOAT);
+			$this->shop->update_option('wpsg_mod_micropayment_handypay_mwst', $_REQUEST['wpsg_mod_micropayment_handypay_mwst'], false, false, WPSG_SANITIZE_TAXKEY);
+			$this->shop->update_option('wpsg_mod_micropayment_handypay_mwstland', $_REQUEST['wpsg_mod_micropayment_handypay_mwstland'], false, false, WPSG_SANITIZE_CHECKBOX);
+						
+			$this->getBillingURLs();
+			
+		} // public function settings_save()
+
+        public function wpsg_deinstall_sites() {
+
+            wp_delete_post($this->shop->get_option('wpsg_mod_micropayment_successPage'));
+
+        } // public function wpsg_deinstall_sites()
+
+		public function addPayment(&$arPayment) {
+			
+			// Neue ZustÃ€nde hinzufÃŒgen
+			$this->shop->arStatus['700'] = __('Zahlung reserviert', 'wpsg');
+			$this->shop->arStatus['701'] = __('Reservierung eingelÃ¶st', 'wpsg');
+			
+			// Kreditkarte
+			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_creditcard_activ') == '1') {
+				 
+				$arPayment[$this->id.'_1'] = array(
+					'id' => $this->id.'_1',
+					'name' => __($this->shop->get_option('wpsg_mod_micropayment_creditcard_name'), 'wpsg'),
+					'price' => $this->shop->get_option('wpsg_mod_micropayment_creditcard_gebuehr'),
+					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_creditcard_mwst'),
+					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_creditcard_mwstland'),
+					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_creditcard_hint')),
+					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcard_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcard_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
+				);
+						
+			}
+			
+			// Kreditkartenreservierung
+			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_activ')) {
+				
+				$arPayment[$this->id.'_7'] = array(
+					'id' => $this->id.'_7',
+					'name' => __($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_name'), 'wpsg'),
+					'price' => $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_gebuehr'),
+					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_mwst'),
+					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_mwstland'),
+					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_hint')),
+					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
+				);
+								
+			}
+			
+			// Lastschrift
+			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_directdebit_activ') == '1') {
+
+				$arPayment[$this->id.'_2'] = array(
+					'id' => $this->id.'_2',
+					'name' => __($this->shop->get_option('wpsg_mod_micropayment_directdebit_name'), 'wpsg'),
+					'price' => $this->shop->get_option('wpsg_mod_micropayment_directdebit_gebuehr'),
+					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_directdebit_mwst'),
+					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_directdebit_mwstland'),
+					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_directdebit_hint')),
+					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_directdebit_logo')))?$this->shop->get_option('wpsg_mod_micropayment_directdebit_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
+				);
+					 
+			}
+			
+			// eBank2Pay
+			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_activ') == '1') {
+
+				$arPayment[$this->id.'_3'] = array(
+					'id' => $this->id.'_3',
+					'name' => __($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_name'), 'wpsg'),
+					'price' => $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_gebuehr'),
+					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_mwst'),
+					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_ebank2pay_mwstland'),
+					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_hint')),
+					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
+				);
+				 			
+			}
+			
+			// Vorkasse
+			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_prepayment_activ') == '1') {
+				
+				$arPayment[$this->id.'_4'] = array(
+					'id' => $this->id.'_4',
+					'name' => __($this->shop->get_option('wpsg_mod_micropayment_prepayment_name'), 'wpsg'),
+					'price' => $this->shop->get_option('wpsg_mod_micropayment_prepayment_gebuehr'),
+					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_prepayment_mwst'),
+					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_prepayment_mwstland'),
+					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_prepayment_hint')),
+					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_prepayment_logo')))?$this->shop->get_option('wpsg_mod_micropayment_prepayment_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
+				);
+			
+			}
+			
+			// Call2Pay
+			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_call2pay_activ') == '1') {
+				 	
+				$arPayment[$this->id.'_5'] = array(
+					'id' => $this->id.'_5',
+					'name' => __($this->shop->get_option('wpsg_mod_micropayment_call2pay_name'), 'wpsg'),
+					'price' => $this->shop->get_option('wpsg_mod_micropayment_call2pay_gebuehr'),
+					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_call2pay_mwst'),
+					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_call2pay_mwstland'),
+					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_call2pay_hint')),
+					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_call2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_call2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
+				);
+					 			
+			}
+			
+			// HandyPay
+			if (is_admin() || $this->shop->get_option('wpsg_mod_micropayment_handypay_activ') == '1') {
+					
+				
+				$arPayment[$this->id.'_6'] = array(
+					'id' => $this->id.'_6',
+					'name' => __($this->shop->get_option('wpsg_mod_micropayment_handypay_name'), 'wpsg'),
+					'price' => $this->shop->get_option('wpsg_mod_micropayment_handypay_gebuehr'),
+					'tax_key' => $this->shop->get_option('wpsg_mod_micropayment_handypay_mwst'),
+					'mwst_null' => $this->shop->get_option('wpsg_mod_micropayment_handypay_mwstland'),
+					'hint' => __($this->shop->get_option('wpsg_mod_micropayment_handypay_hint')),
+					'logo' => ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_handypay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_handypay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/logo_100x25.png'))
+				);
+					 
+			}
+				
+		} // public function addPayment(&$arPayment)
+		 
+		public function order_done(&$order_id, &$done_view)
+		{
+			
+			$oOrder = wpsg_order::getInstance($order_id);
+			
+			// Bestellungen mit 0 geben nix aus
+			if ($oOrder->getToPay() <= 0) return;
+				
+			if (preg_match('/^'.$this->id.'_\d+$/', $this->shop->view['basket']['checkout']['payment']))
+			{
+
+				$payment = $this->shop->view['basket']['checkout']['payment'];
+				
+				switch ($payment)
+				{
+										
+					case $this->id.'_1': // Kreditkarte
+						
+						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcard_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcard_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/creditcard.png'));						
+						break;
+						
+					case $this->id.'_7': // Kreditkarte mit Reservierung
+						
+						//$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo')))?$this->shop->get_option('wpsg_mod_micropayment_creditcardreservation_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/creditcard.png'));
+						$logo = false;
+						
+						break;
+						
+					case $this->id.'_2': // Lastschrift
+
+						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_directdebit_logo')))?$this->shop->get_option('wpsg_mod_micropayment_directdebit_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/directdebit.png'));
+						break;
+						
+					case $this->id.'_3': // eBankPay
+
+						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_ebank2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/bank2pay.png'));
+						break;
+						
+					case $this->id.'_4': // Vorkasse
+
+						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_prepayment_logo')))?$this->shop->get_option('wpsg_mod_micropayment_prepayment_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/prepayment.png'));
+						break;
+						
+					case $this->id.'_5': // Call2Pay
+
+						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_call2pay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_call2pay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/call2pay.png'));
+						break;
+						
+					case $this->id.'_6': // HandyPay
+						  
+						$logo = ((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_handypay_logo')))?$this->shop->get_option('wpsg_mod_micropayment_handypay_logo'):$this->shop->getRessourceURL('mods/mod_micropayment/gfx/handypay.png'));
+						break;
+						
+					default: throw new \wpsg\Exception(__('Im Basket Array war eine Micropayment Zahlungsart die nicht definiert ist (Innerhalb calcPayment)', 'wpsg'));
+					
+				}
+				
+				$this->shop->view['wpsg_mod_micropayment']['logo'] = $logo;
+				
+				if ($payment != $this->id.'_7')
+				{
+				
+					$this->shop->view['wpsg_mod_micropayment']['payLink'] = $this->getPayLink($order_id);
+									
+				}
+				else
+				{
+					
+					$this->shop->view['wpsg_mod_micropayment']['payLink'] = false;
+						
+				}
+					
+				$this->shop->render(WPSG_PATH_VIEW.'/mods/mod_micropayment/order_done.phtml');
+				
+			}
+		
+		} // public function order_done(&$order_id)
+		 
+		public function mail_payment()
+		{
+		
+			if (!preg_match('/^'.$this->id.'_\d+$/', $this->shop->view['basket']['checkout']['payment'])) return;
+			
+			if ($this->shop->htmlMail === true)
+			{
+				
+				echo '<a href="'.$this->shop->getDoneURL($this->shop->view['o_id']).'">'.__('Zahlungslink', 'wpsg').'</a>'.__(', um die Zahlung durchzufÃŒhren', 'wpsg');						
+				
+			}
+			else
+			{
+			
+				echo wpsg_pad_right(__('Zahlungslink', 'wpsg').':', 35).$this->shop->getDoneURL($this->shop->view['o_id']);
+				
+			}
+				
+		} // public function mail_payment()
+		
+		public function template_redirect() 
+		{
+			
+			if (wpsg_getStr($_REQUEST['wpsg_plugin']) == 'wpsg_mod_micropayment' && $_REQUEST['module_action'] == 'pay')
+			{
+
+				$_REQUEST['order_id'] = wpsg_sinput("key", $_REQUEST['order_id']);
+
+				$form_data = null;
+				parse_str(wpsg_sinput("text_field", $_REQUEST['form_data']), $form_data);
+				
+				if (!wpsg_isSizedString($form_data['number'])) die(__('Bitte die Kreditkartennummer angeben.', 'wpsg'));
+				if (!wpsg_isSizedString($form_data['cvc2'])) die(__('Bitte die PrÃŒfziffer der Kreditkarte angeben.', 'wpsg'));
+								
+				$oOrder = $this->shop->cache->loadOrderObject($_REQUEST['order_id']);
+				$this->api_init();
+				
+				$api_customer_id = null;
+				
+				if (!wpsg_isSizedString($oOrder->wpsg_mod_micropayment_customerid))
+				{
+										
+					$api_customer_id = $this->api_customerCreate($oOrder);
+					$oOrder->wpsg_mod_micropayment_customerid = $api_customer_id;
+					
+					$this->db->UpdateQuery(WPSG_TBL_ORDER, array(
+						'wpsg_mod_micropayment_customerid' => wpsg_q($api_customer_id)
+					), " `id` = '".wpsg_q($oOrder->id)."' ");
+										
+				}
+				else
+				{
+					
+					$api_customer_id = $oOrder->wpsg_mod_micropayment_customerid;
+					
+				}
+								 
+				try 
+				{
+				
+					// Kreditkartendaten ÃŒbermitteln
+					$result = $this->api_creditcardDataSet($oOrder, $api_customer_id, $form_data['number'], $form_data['expiryYear'], $form_data['expiryMonth']);
+					
+					// Session erstellen
+					$result = $this->api_sessionCreate($oOrder, $api_customer_id);
+
+					if (wpsg_isSizedString($result['sessionId']))
+					{
+						
+						$session_id = $result['sessionId'];
+						$result = $this->api_transactionAuthorization($oOrder, $result['sessionId'], $form_data['cvc2']);
+						
+						if (wpsg_isSizedString($result['transactionId']) && $result['transactionStatus'] == 'SUCCESS')
+						{
+							
+							// Authorisierung erfolgreich
+							$this->db->UpdateQuery(WPSG_TBL_ORDER, array(
+								'wpsg_mod_micropayment_sessionid' => wpsg_q($session_id),
+								'wpsg_mod_micropayment_transactionid' => wpsg_q($result['transactionId'])								
+							), " `id` = '".wpsg_q($oOrder->id)."' ");
+							
+							// Status setzen
+							$this->shop->setOrderStatus($oOrder->id, '700', false);
+							
+							$oOrder->log(
+								__('Erfolgreiche Micropayment Authorisierung', 'wpsg'),
+								print_r($result, 1)
+							);
+							
+						}
+						else
+						{
+														
+							die(__('Authorisierung konnte nicht durchgefÃŒhrt werden.', 'wpsg'));
+							
+						}
+						
+					}
+					else
+					{
+			 
+						die(__('Session fÃŒr Zahlung konnte nicht aufgebaut werden.', 'wpsg'));
+						
+					}
+					
+				}
+				catch (Exception $e)
+				{
+
+					wpsg_debug($e);
+					die(__('Die Kreditkartendaten wurden nicht akzeptiert.', 'wpsg'));
+					
+				}
+				
+				die("1");
+				
+			}
+			else if ($_REQUEST['wpsg_plugin'] == 'wpsg_mod_micropayment' && $_REQUEST['confirm'] == 'micropayment')
+			{
+
+				$_REQUEST['title'] = wpsg_sinput("text_field", $_REQUEST['title']);
+				$_REQUEST['amount'] = wpsg_sinput("key", $_REQUEST['amount']);
+
+				$title = explode('|', $_REQUEST['title']);
+				$order_id = $title[0];
+				$token = base64_decode($title[1]);
+				
+				$order_data = $this->shop->cache->loadOrder($order_id);
+				
+				if ($order_data['id'] != $order_id || $order_id <= 0) throw new \wpsg\Exception(__('UngÃŒltiger Titel oder Bestellung nicht gefunden bei MP Request', 'wpsg'));
+				
+				$token_check = md5($this->shop->get_option('wpsg_mod_micropayment_accesskey').$order_data['cdate']);
+				
+				if ($token_check != $token) throw new \wpsg\Exception(__('UngÃŒltiger Sicherheitstoken bei MP Request', 'wpsg'));
+				
+				$this->db->ImportQuery(WPSG_TBL_OL, array(
+					"title" => __("Micropayment REQUEST", "wpsg"),
+					"cdate" => "NOW()",
+					"o_id" => wpsg_q($order_id),
+					"mailtext" => wpsg_q(wpsg_hspc(print_r($_REQUEST, 1)))
+				));
+				
+				switch ($_REQUEST['function'])
+				{
+					
+					case 'billing':
+						
+						if ($this->shop->setPayMent($order_id, $_REQUEST['amount'] / 100))
+						{
+								
+							$this->shop->setOrderStatus($order_id, 100, true);
+							
+						}
+						
+						break; 
+					
+				}
+				
+				$url = get_permalink($this->shop->get_option('wpsg_mod_micropayment_successPage'));
+				die("status=ok\nurl=".$url."\ntarget=_top\nforward=1");
+				
+			}
+				
+		} // public function template_redirect()			
+		
+		public function admin_debugInfo() 
+		{ 
+			
+			echo $this->shop->render(WPSG_PATH_VIEW.'/mods/mod_micropayment/debugInfo.phtml', true);			
+			
+		} // public function admin_debugInfo()
+		
+		public function setOrderStatus($order_id, $status_id, $inform) 
+		{ 
+			
+			if (!in_array($status_id, array('500', '701'))) return;
+			
+			$oOrder = $this->shop->cache->loadOrderObject($order_id);
+			$bError = false; $ol_text = "";
+			
+			$this->api_init();
+			
+			if ($status_id == '701')
+			{
+												
+				// Wechsel auf "Reservierung eingelÃ¶st"
+				try 
+				{
+					
+					$result = $this->api_transactionCapture($oOrder);
+									
+					if ($result['transactionStatus'] == "SUCCESS" && $result['sessionStatus'] == "SUCCESS")
+					{
+						
+						$oOrder->log(
+							__('Micropayment: Zahlung wurde gebucht', 'wpsg'),
+							print_r($result, 1)								
+						);
+						
+					}
+					else
+					{
+						
+						$bError = true;
+						$ol_text = print_r($result, 1);
+												
+					}
+					
+				} 
+				catch (Exception $e)
+				{
+					
+					$bError = true;
+					$ol_text = $e->getMessage();
+					
+				}
+
+				if ($bError === true)
+				{
+					
+					// Sonst ist die Meldung mit dem erfolgreichem Statuswechsel sichtbar
+					unset($_SESSION['wpsg']['backendMessage']);
+					
+					// Statuswechsel abrechen					
+					$this->shop->addBackendError(
+						wpsg_translate(
+							__('Reservierung konnte nicht gebucht werden. Status auf #1# zurÃŒckgesetzt.', 'wpsg'),
+							$this->shop->arStatus[$this->shop->view['order']['status']]
+						)
+					);
+						
+					$oOrder->log(
+						wpsg_translate(
+							__('Micropayment: Zahlung konnte nicht freigegeben werden / Status auf #1# zurÃŒckgesetzt.', 'wpsg'),
+							$this->shop->arStatus[$this->shop->view['order']['status']]
+						),
+						$ol_text
+					);
+					
+					$this->db->UpdateQuery(WPSG_TBL_ORDER, array(
+						'status' => wpsg_q($this->shop->view['order']['status'])
+					), " `id` = '".wpsg_q($oOrder->id)."' ");
+						 
+				}
+				
+			}
+			else if ($status_id == '500' && $this->shop->view['order']['status'] == '700')
+			{
+				
+				// Storniert
+				
+				try 
+				{
+				
+					$result = $this->api_transactionReversal($oOrder);
+					
+					if ($result['sessionStatus'] === "SUCCESS" && $result['transactionStatus'] === "SUCCESS")
+					{
+						
+						$oOrder->log(
+							__('Micropayment: Zahlungsreservierung wurde erfolgreich storniert', 'wpsg'),
+							print_r($result, 1)								
+						);
+										
+					}
+					else
+					{
+						
+						$bError = true;
+						$ol_text = print_r($result, 1);
+						
+					}
+					
+				} 
+				catch (Exception $e)
+				{
+					
+					$bError = true;
+					$ol_text = $e->getMessage();
+					
+				}
+				
+				if ($bError === true)
+				{
+					
+					// Kein zurÃŒcksetzen, ich denke es macht Sinn das der Status denoch auf storniert geht 
+					$this->shop->addBackendError(__('Zahlungsreservierung konnte nicht aufgehoben werden', 'wpsg'));
+					
+					$oOrder->log(
+						__('Micropayment: Zahlungsreservierung konnte nicht aufgehoben werden', 'wpsg'),
+						$ol_text
+					);
+					
+				}
+				 
+			}
+			
+			
+		} // public function setOrderStatus($order_id, $status_id, $inform)
+		
+		/** Modulfunktionen */
+		
+		private function api_init()
+		{
+			
+			require_once WPSG_PATH_MOD.'mod_micropayment/mcp-serviceclient_1_17/lib/init.php';
+			require_once WPSG_PATH_MOD.'mod_micropayment/mcp-serviceclient_1_17/services/IMcpCreditcardService_v1_2.php';
+			require_once MCP__SERVICELIB_DISPATCHER.'TNvpServiceDispatcher.php';
+			
+			$this->dispatcher = new TNvpServiceDispatcher('IMcpCreditcardService_v1_2', 'https://sipg.micropayment.de/public/creditcard/v1.2/nvp/');
+			
+		} // private function api_init()
+		
+		private function api_customerCreate(&$oOrder)
+		{
+			  			
+			$result = $this->dispatcher->customerCreate(
+				$this->shop->get_option('wpsg_mod_micropayment_accesskey'),
+				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'),
+				null,
+				null, //  Liste mit freien Parametern, die dem Kunden zugeordnet werden
+				$oOrder->getInvoiceFirstName(),
+				$oOrder->getInvoiceName(), 
+				$oOrder->getCustomer()->getEMail(), 
+				'de-DE' // 	Sprache & Land des Kunden | gÃŒltige Beispielwerte sind 'de', 'de-DE', 'en-US'
+			); 
+			
+			return $result;
+	 
+		} // private function api_customerCreate($order_id)
+		
+		private function api_sessionCreate(&$oOrder, $api_customer_id)
+		{ 
+			  
+			$_SERVER['REMOTE_ADDR'] = '134.97.73.195';
+			$result = $this->dispatcher->sessionCreate(
+				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
+				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
+				$api_customer_id, // ID des Kunden
+				null, // eigene eindeutige ID des Vorgangs, wird anderenfalls erzeugt [max. 40 Zeichen]
+				$this->shop->get_option('wpsg_mod_micropayment_projectid'), // das ProjektkÃŒrzel fÃŒr den Vorgang
+				((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_campaign')))?$this->shop->get_option('wpsg_mod_micropayment_campaign'):null), // ein KampagnenkÃŒrzel des Projektbetreibers
+				((wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_account')))?$this->shop->get_option('wpsg_mod_micropayment_account'):null), // Account des beteiligten Webmasters sonst eigener - setzt eine Aktivierung der WebmasterfÃ€higkeit des Projekts vorraus - Hinweis: WebmasterfÃ€higkeit steht momentan nicht zur VerfÃŒgung
+				null, // ein KampagnenkÃŒrzel des Webmasters
+				wpsg_round($oOrder->getAmount(), 2) * 100, // abzurechnender Betrag, wird kein Betrag ÃŒbergeben, wird der Betrag aus der Konfiguration verwendet
+				'EUR', // WÃ€hrung
+				null, // Bezeichnung der zu kaufenden Sache - Verwendung in Falle einer auftretenden Benachrichtigung wird dieser Wert als Produktidentifizierung mit geschickt, wird kein Wert ÃŒbergeben, wird Der aus der Konfiguration verwendet
+				null, // Bezeichnung der zu kaufenden Sache - Verwendung beim Mailversand, sollten Sie Diesen wÃŒnschen
+				$_SERVER['REMOTE_ADDR'], // IPv4 des Benutzers
+				null, // Liste mit freien Parametern, die dem Vorgang zugeordnet werden
+				false // sendMail ?
+			);
+			
+			return $result;
+			
+		}
+		
+		public function api_transactionAuthorization(&$oOrder, $session_id, $cvc2)
+		{
+
+			$result = $this->dispatcher->transactionAuthorization(
+				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
+				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
+				$session_id,
+				$cvc2					
+			);
+			
+			return $result;
+			
+		} // public function api_transactionAuthorization(&$oOrder, $session_id, $cvc2)
+		
+		public function api_transactionReversal(&$oOrder)
+		{
+			
+			$result = $this->dispatcher->transactionReversal(
+				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
+				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung	
+				$oOrder->wpsg_mod_micropayment_sessionid,
+				$oOrder->wpsg_mod_micropayment_transactionid
+			);
+			
+			return $result;
+			
+		} // public function api_transactionReversal(&$oOrder)
+		
+		public function api_creditcardDataSet(&$oOrder, $api_customer_id, $number, $expiryYear, $expiryMonth)
+		{
+			 				
+			$result = $this->dispatcher->creditcardDataSet(
+				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
+				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
+				$api_customer_id, // ID des Kunden
+				$number,
+				$expiryYear,
+				$expiryMonth
+			); 
+			
+			return $result;
+			
+		} // public function creditcardDataSet($order_id, $api_customer_id, $number, $expiryYear, $expiryMonth)
+		
+		public function api_transactionCapture(&$oOrder)
+		{
+			
+			$result = $this->dispatcher->transactionCapture(
+				$this->shop->get_option('wpsg_mod_micropayment_accesskey'), // AccessKey aus dem Controlcenter
+				(($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')?'1':'0'), // aktiviert Testumgebung
+				$oOrder->wpsg_mod_micropayment_sessionid,
+				$oOrder->wpsg_mod_micropayment_transactionid
+			);
+			
+			return $result;
+			
+		} // public function api_transactionCapture(&$oOrder)
+		
+		/**
+		 * Ruft die URLs von dem Micropayment Billing Info auf
+		 */
+		public function getBillingURLs()
+		{
+			
+			$url = 'https://webservices.micropayment.de/public/info/index.php?'.http_build_query(
+				array(
+					'action' => 'GenerateUrl',
+					'format' => 'json',
+					'account_id' => '27937'
+				),
+				null,
+				'&'		
+			);
+			
+			$json_data = json_decode($this->shop->get_url_content($url));
+					 
+			if (wpsg_isSizedString($json_data->billing))
+			{
+				
+				$this->shop->update_option('wpsg_mod_micropayment_event_creditcard_url', 'http://'.$json_data->billing.'/creditcard/event/');
+				$this->shop->update_option('wpsg_mod_micropayment_event_directdebit_url', 'http://'.$json_data->billing.'/lastschrift/event/');
+				$this->shop->update_option('wpsg_mod_micropayment_event_ebank2pay_url', 'http://'.$json_data->billing.'/ebank2pay/event/');
+				$this->shop->update_option('wpsg_mod_micropayment_event_prepayment_url', 'http://'.$json_data->billing.'/prepay/event/');
+				$this->shop->update_option('wpsg_mod_micropayment_event_call2pay_url', 'http://'.$json_data->billing.'/call2pay/event/');
+				$this->shop->update_option('wpsg_mod_micropayment_event_handypay_url', 'http://'.$json_data->billing.'/handypay/event/');
+				 
+			}
+			
+		} // public function getBillingURLs()
+		
+		/**
+		 * Gibt den Link zum bezahlen einer Bestellung anhand der BestellID zurÃŒck
+		 * @param Int $order_id ID der Bestellung 
+		 */
+		public function getPayLink($order_id)
+		{
+			
+			$order_data = $this->shop->cache->loadOrder($order_id);
+			 
+			$oOrder = wpsg_order::getInstance($order_id);
+			
+			if (!preg_match('/^'.$this->id.'_\d+$/', $order_data['type_payment'])) throw new \wpsg\Exception(__('Es wurde versucht einen Zahlungslink fÃŒr eine Bestellung anzufragen, die nicht mit Micropayment bezahlt wurde', 'wpsg'));
+			
+			$subPayTyp = preg_replace('/^\d+_/', '', $order_data['type_payment']);
+			
+			$arParam = array();
+			$arParam['project'] = $this->shop->get_option('wpsg_mod_micropayment_projectid');
+			
+			$arParam['title'] = $order_id.'|'.base64_encode(md5($this->shop->get_option('wpsg_mod_micropayment_accesskey').$order_data['cdate']));
+			
+			switch ($subPayTyp)
+			{
+									
+				case '1': // Kreditkarte
+					
+					$url = $this->event_creditcard_url;
+					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
+					$arParam['currency'] = 'EUR';
+					
+					break;
+					
+				case '7': // Kreditkarte mit Reservierung
+					
+					$url = $this->event_creditcard_url;
+					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
+					$arParam['currency'] = 'EUR';
+							
+					break;
+					
+				case '2': // Lastschrift
+					
+					$url = $this->event_directdebit_url;
+					$arParam['paytext'] = $this->shop->replaceUniversalPlatzhalter(__($this->shop->get_option('wpsg_mod_micropayment_directdebit_subject'), 'wpsg'), $order_id);
+					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
+					$arParam['userid'] = $order_data['k_id'];
+					
+					break;
+					
+				case '3': // eBankPay
+					
+					$url = $this->event_ebank2pay_url;
+					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
+					
+					break;
+					
+				case '4': // Vorkasse
+					
+					$url = $this->event_prepayment_url;
+					$arParam['paytext'] = $this->shop->replaceUniversalPlatzhalter(__($this->shop->get_option('wpsg_mod_micropayment_prepayment_subject'), 'wpsg'), $order_id);
+					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
+					
+					break;
+					
+				case '5': // Call2Pay
+				
+					$url = $this->event_call2pay_url;
+					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
+					
+					break;
+					
+				case '6': // HandyPay
+							
+					$url = $this->event_handypay_url; 
+					$arParam['amount'] = wpsg_round($oOrder->getToPay(), 2) * 100;
+					
+					break;
+					
+				default: throw new \wpsg\Exception(__('Es wurde keine gÃŒltige Micropayment Zahlungsart beim generieren des Bezahllinks gefunden', 'wpsg'));
+				
+			}
+			
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_account'))) $arParam['account'] = $this->shop->get_option('wpsg_mod_micropayment_account');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_layout'))) $arParam['theme'] = $this->shop->get_option('wpsg_mod_micropayment_layout');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_bgcolor'))) $arParam['bgcolor'] = $this->shop->get_option('wpsg_mod_micropayment_bgcolor');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_campaign'))) $arParam['projectcampaign'] = $this->shop->get_option('wpsg_mod_micropayment_campaign');
+			if (wpsg_isSizedString($this->shop->get_option('wpsg_mod_micropayment_bggfx'))) $arParam['bggfx'] = $this->shop->get_option('wpsg_mod_micropayment_bggfx'); 
+			
+			$params = http_build_query($arParam, null, '&');
+			
+			$seal = md5($params.$this->shop->get_option('wpsg_mod_micropayment_accesskey'));
+			$params .= '&seal='.$seal;
+
+			if ($this->shop->get_option('wpsg_mod_micropayment_sandbox') == '1')
+			{
+				
+				$params .= '&testmode=1';
+				
+			}
+			
+			return $url.'?'.$params;
+			
+		} // public function getPayLink($order_id)
+		
+	} // class wpsg_mod_micropayment extends wpsg_mod_basic
+
Index: /views/admin/versandzonen_list.phtml
===================================================================
--- /views/admin/versandzonen_list.phtml	(revision 7753)
+++ /views/admin/versandzonen_list.phtml	(revision 7754)
@@ -84,5 +84,9 @@
 
 			jQuery.ajax( {
-				url: '<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Admin&subaction=vz&do=inlinedit&noheader=1',
+				url: '<?php
+
+                    echo html_entity_decode(wp_nonce_url(WPSG_URL_WP.'wp-admin/admin.php?page=wpsg-Admin&subaction=vz&do=inlinedit&noheader=1', 'wpsg-admin-versandzonen-inline_edit-'.$vz['id']));
+
+                ?>',
 				data: {
 					field: 'innereu',
Index: /views/css/frontend.css
===================================================================
--- /views/css/frontend.css	(revision 7753)
+++ /views/css/frontend.css	(revision 7754)
@@ -85,4 +85,6 @@
 .wpsg_checkout .wpsg_checkoutblock label { vertical-align:middle; }
 .wpsg_checkout .wpsg_checkoutblock input.wpsg_input_text,
+.wpsg_checkout .wpsg_checkoutblock input[type="tel"],
+.wpsg_checkout .wpsg_checkoutblock input[type="fax"],
 .wpsg_checkout .wpsg_checkoutblock input[type="text"], 
 .wpsg_checkout .wpsg_checkoutblock input[type="number"], 
Index: /views/mods/mod_kundenkontakt/templates/zahlungserinnerung.phtml
===================================================================
--- /views/mods/mod_kundenkontakt/templates/zahlungserinnerung.phtml	(revision 7753)
+++ /views/mods/mod_kundenkontakt/templates/zahlungserinnerung.phtml	(revision 7754)
@@ -28,5 +28,5 @@
 
 <?php echo __('Nutzen Sie bitte folgenden Link um den Zahlvorgang abschlieÃen zu kÃ¶nnen', 'wpsg'); ?>:
-<?php echo $this->getDoneURL($this->view['order']['id']); ?> 
+<?php echo $this->getDofneURL($this->view['order']['id']); ?>
 
 <?php echo __('Mit freundlichen GrÃŒÃen', 'wpsg') ?>
Index: /views/mods/mod_micropayment_paywindow/order_done.phtml
===================================================================
--- /views/mods/mod_micropayment_paywindow/order_done.phtml	(revision 7753)
+++ /views/mods/mod_micropayment_paywindow/order_done.phtml	(revision 7754)
@@ -11,129 +11,27 @@
 <div class="wpsg_mod_micropayment_paywindow_order_done">
 
-    <p>
-        <?php echo __('Klicken Sie auf folgendes Banner um Ihre Bestellung zu bezahlen.', 'wpsg'); ?>
-    </p>
+    <?php if ($view['order_status'] === wpsg_ShopController::STATUS_ZAHLUNGAKZEPTIERT) { ?>
 
-    <br />
+        <p>
 
-    <a href="<?php echo $view['url']; ?>" title="<?php echo __('Hier Ihre Bestellung bezahlen.', 'wpsg'); ?>">
-        <img src="<?php echo $view['logo']; ?>" alt="<?php echo $view['title']; ?>" />
-    </a>
+            <?php echo wpsg_translate(__('Betrag wurde mit #1# bereits beglichen.', 'wpsg'), $view['title']); ?>
+
+        </p>
+
+    <?php } else { ?>
+
+        <p>
+
+            <?php echo __('Klicken Sie auf folgendes Banner um Ihre Bestellung zu bezahlen.', 'wpsg'); ?>
+
+            <br />
+
+            <a href="<?php echo $view['url']; ?>" title="<?php echo __('Hier Ihre Bestellung bezahlen.', 'wpsg'); ?>">
+                <img src="<?php echo $view['logo']; ?>" alt="<?php echo $view['title']; ?>" />
+            </a>
+
+        </p>
+
+    <?php } ?>
 
 </div>
-
-<?php /* if (wpsg_isSizedString($this->view['wpsg_mod_micropayment']['payLink'])) { ?>
-<?php echo __('Klicken Sie auf das folgende Logo um ihre Bestellung zu bezahlen.', 'wpsg'); ?>
-<br /><br />
-
-<a href="<?php echo $this->view['wpsg_mod_micropayment']['payLink']; ?>"><img src="<?php echo $this->view['wpsg_mod_micropayment']['logo']; ?>" alt="<?php echo $this->view['wpsg_mod_micropayment']['title']; ?>" /></a>
-
-	<?php if ($this->get_option('wpsg_mod_micropayment_paystart') == '1') { ?>
-	<script type="text/javascript">
-	 
-		jQuery(document).ready(function() { 
-			window.setTimeout(function() {
-	    	location.href = "<?php echo $this->view['wpsg_mod_micropayment']['payLink']; ?>";
-			}, 1000);
-		} );
-		
-	</script>
-	<?php } ?>
-
-<?php } else { ?>
-
-<p><?php echo __('Bitte geben Sie ihre Kreditkarteninformationen (Kartennummer, GÃŒltigkeitsdatum und PrÃŒfnummer) in folgende Felder ein. Die Daten werden an Micropayment ÃŒbermittelt und nicht durch uns gespeichert oder ausgewertet.', 'wpsg'); ?></p>
-
-<form method="post" id="wpsg_mod_micropayment_creditcard">
-
-	<div class="micropayment_card">
-		<div class="front card">
-			<div class="chip"></div>
-			<div class="number"><input placeholder="<?php echo __('Kreditkartennummer', 'wpsg'); ?>" type="text" name="number" /></div>
-			<div class="bankname"><?php echo __('Kreditkarte - Vorderseite', 'wpsg'); ?></div>
-			<div class="name"><?php echo __('Max Mustermann', 'wpsg'); ?></div>
-			<div class="validthrough"><?php echo __('GÃŒltig bis', 'wpsg'); ?>:</div>
-			<div class="valid">
-				<select name="expiryMonth">
-					<?php for ($i = 1; $i <= 12; $i ++) { ?>
-					<option value="<?php echo $i; ?>"><?php echo str_pad($i, 2, '0', STR_PAD_LEFT); ?>
-					<?php } ?>		
-				</select>
-				<span>/</span>
-				<select name="expiryYear">
-					<?php for ($i = date('Y'); $i <= date('Y') + 10; $i ++) { ?>
-					<option value="<?php echo $i; ?>"><?php echo $i; ?></option>
-					<?php } ?>
-				</select>						
-			</div>			
-		</div>	
-		
-		<div class="back card">
-			<div class="bankname"><?php echo __('Kreditkarte - RÃŒckseite', 'wpsg'); ?></div>
-			<div class="blackmagnetic"></div>
-			<div class="number"><?php echo __('HC600214C', 'wpsg'); ?></div>
-			<div class="signature"><?php echo __('Unterschrift Max Mustermann', 'wpsg'); ?></div>
-			<div class="sign"><input type="text" name="cvc2" value="" placeholder="<?php echo __('PrÃŒfnummer', 'wpsg'); ?>" /></div>
-		</div>
-		
-		<input type="button" id="wpsg_mod_micropayment_pay_button" class="wpsg_button" value="<?php echo __('Zahlung starten', 'wpsg'); ?>" />
-		
-	</div>
-
-</form>
-
-<script type="text/javascript">
-
-	jQuery(document).ready(function() {
-
-		jQuery('#wpsg_mod_micropayment_pay_button').bind('click', function() {
-			
-			var form_data = jQuery('#wpsg_mod_micropayment_creditcard').serialize();
-			
-			jQuery('.micropayment_card input, .micropayment_card select').prop('disabled', true);
-			
-			jQuery.ajax( {
-				url: wpsg_ajax.ajaxurl,
-				data: {
-					action: 'ajax',
-					wpsg_plugin: 'wpsg_mod_micropayment',
-					module_action: 'pay', 
-					form_data: form_data,
-					order_id: <?php echo $this->view['o_id']; ?>
-				},
-				success: function(data) {
-
-					if (data === "1")
-					{
-
-						alert('<?php echo __('Vielen Dank fÃŒr Ihre Zahlungsreservierung.', 'wpsg'); ?>');
-						location.href = '<?php echo get_permalink($this->get_option('wpsg_mod_micropayment_successPage')); ?>';
-						
-					}
-					else
-					{
-
-						alert(data);
-
-					}
-
-					jQuery('.micropayment_card input, .micropayment_card select').prop('disabled', false);
-						
-				},
-				error: function(rdata, data)
-				{
-					
-					alert("<?php echo __('Unerwarteter Serverfehler!', 'wpsg'); ?>");
-					
-				}
-			} );
-			
-			return false;
-			
-		} );
-		
-	} );
-
-</script>
-
-<?php } */ ?>
Index: /views/mods/mod_micropayment_paywindow/settings_edit.phtml
===================================================================
--- /views/mods/mod_micropayment_paywindow/settings_edit.phtml	(revision 7753)
+++ /views/mods/mod_micropayment_paywindow/settings_edit.phtml	(revision 7754)
@@ -10,5 +10,7 @@
 <?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_paywindow_accesskey', __('AccessKey', 'wpsg'), $this->get_option('wpsg_mod_micropayment_paywindow_accesskey'), array('help' => 'wpsg_mod_micropayment_paywindow_accesskey')); ?>
 <?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_paywindow_projectid', __('Project', 'wpsg'), $this->get_option('wpsg_mod_micropayment_paywindow_projectid'), array('help' => 'wpsg_mod_micropayment_paywindow_projectid')); ?>
-<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_paywindow_notificationurl', __('Benachrichtigungs-URL', 'wpsg'), $view['notificationurl'], ['readonly' => true]); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_paywindow_notification_url', __('Benachrichtigungs-URL', 'wpsg'), $view['notification_url'], ['readonly' => true]); ?>
+<?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_paywindow_notification_password', __('Benachrichtigungs-Kennwort (notification_password)', 'wpsg'), $view['notification_password'], ['readonly' => true]); ?>
+<?php echo wpsg_drawForm_Select('wpsg_mod_micropayment_paywindow_page_error', __('Fehlerseite', 'wpsg'), $view['arPages'], $this->get_option('wpsg_mod_micropayment_paywindow_page_error'), array('help' => 'wpsg_mod_micropayment_paywindow_page_error')); ?>
 <?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_paywindow_paytitle', __('Titel der Zahlung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_paywindow_paytitle'), ['placeholder' => $view['default_pay_title'], 'hint' => __('Maximal 150 Zeichen', 'wpsg')]); ?>
 <?php echo wpsg_drawForm_Input('wpsg_mod_micropayment_paywindow_paytext', __('Titel der Zahlung', 'wpsg'), $this->get_option('wpsg_mod_micropayment_paywindow_paytext'), ['placeholder' => $view['default_pay_text'], 'hint' => __('Maximal 250 Zeichen', 'wpsg')]); ?>
@@ -19,5 +21,5 @@
 <?php foreach ($view['arPaymentWindow'] as $pw_key => $pw) { ?>
 
-    <?php echo wpsg_drawForm_AdminboxStart($pw['title'], $pw_key); ?>
+    <?php echo wpsg_drawForm_AdminboxStart($pw['title'], $pw_key, ['collapsable' => true, 'collapsed' => (($this->get_option('wpsg_mod_micropayment_paywindow_'.$pw_key.'_activ') === '1')?false:true)]); ?>
 
         <?php echo wpsg_drawForm_Checkbox('wpsg_mod_micropayment_paywindow_'.$pw_key.'_activ', __('Zahlungsart aktiv', 'wpsg'), $this->get_option('wpsg_mod_micropayment_paywindow_'.$pw_key.'_activ'), []); ?>
Index: /views/produkt/import.phtml
===================================================================
--- /views/produkt/import.phtml	(revision 7753)
+++ /views/produkt/import.phtml	(revision 7754)
@@ -23,55 +23,59 @@
 				</div>
 			</div>
-		</nav>
-	<div class="wpsg-filter wpsg-customer-tab wpsg-customer-tab-0 container-fluid from horizontal" >
-		<div class="row">	
-			<div class="col-lg-4">
-					
-				<form method="POST" action="<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&amp;action=import&noheader=1" id="import_form" enctype="multipart/form-data">
-				
-					<?php echo wp_nonce_field('wpsg-product-import-do'); ?>
-					
-					<div class="wpsg_hinweis"><?php echo __('Laden Sie ein vorher exportiertes CSV File hoch, die Produktdaten werden dann aus dieser Datei importiert.', 'wpsg'); ?></div>
-					<br />
-				
-					<input type="file" id="wpsg_importfile" name="wpsg_importfile" />
-					
-					<br /><br />
-					<input type="submit" class="button-primary" value="<?php echo __('Import der Produktedaten starten', 'wpsg'); ?>" name="wpsg_import" />
-					
-				</form>
-				
-				<script type="text/javascript">/* <![CDATA[ */
-							  
-					jQuery('#import_form').on('submit', function(evt) {
-									 
-						var file = jQuery('#wpsg_importfile')[0].files[0];
-									
-						if (file && file.size < <?php echo wpsg_get_file_upload_max_size(); ?>){
-										
-							return true;
-										
-						} else if (file) {
-										
-							alert("<?php echo wpsg_translate(__('DateigrÃ¶Ãe ÃŒbersteigt Upload Limit von #1#.', 'wpsg'), wpsg_formatSize(wpsg_get_file_upload_max_size())); ?>");
-										
-							evt.preventDefault();
-							return false;
-								
-						} else {
-						
-							alert("<?php echo wpsg_translate(__('Es wurde keine Datei ausgewÃ€hlt.', 'wpsg')); ?>");
-										
-							evt.preventDefault();
-							return false;
-											
-						}
-															
-					} );
-													
-				/* ]]> */</script>
-				
-			</div>
-		</div>
+
+    </nav>
+
+    <div class="wpsg_msg_wrap"><hr class="wp-header-end wpsg-wp-header-end"/></div>
+
+    <div class="content">
+
+        <?php echo wpsg_drawForm_AdminboxStart('Produktimport'); ?>
+
+        <form method="POST" action="<?php echo WPSG_URL_WP; ?>wp-admin/admin.php?page=wpsg-Produkt&amp;action=import&noheader=1" id="import_form" enctype="multipart/form-data">
+
+            <?php echo wp_nonce_field('wpsg-product-import-do'); ?>
+
+            <div class="wpsg_hinweis"><?php echo __('Laden Sie ein vorher exportiertes CSV File hoch, die Produktdaten werden dann aus dieser Datei importiert.', 'wpsg'); ?></div>
+            <br />
+
+            <input type="file" id="wpsg_importfile" name="wpsg_importfile" />
+
+            <br /><br />
+            <input type="submit" class="button-primary" value="<?php echo __('Import der Produktedaten starten', 'wpsg'); ?>" name="wpsg_import" />
+
+        </form>
+
+        <?php echo wpsg_drawForm_AdminboxEnd(); ?>
+
+        <script>
+
+            jQuery('#import_form').on('submit', function(evt) {
+
+                var file = jQuery('#wpsg_importfile')[0].files[0];
+
+                if (file && file.size < <?php echo wpsg_get_file_upload_max_size(); ?>){
+
+                    return true;
+
+                } else if (file) {
+
+                    alert("<?php echo wpsg_translate(__('DateigrÃ¶Ãe ÃŒbersteigt Upload Limit von #1#.', 'wpsg'), wpsg_formatSize(wpsg_get_file_upload_max_size())); ?>");
+
+                    evt.preventDefault();
+                    return false;
+
+                } else {
+
+                    alert("<?php echo wpsg_translate(__('Es wurde keine Datei ausgewÃ€hlt.', 'wpsg')); ?>");
+
+                    evt.preventDefault();
+                    return false;
+
+                }
+
+            } );
+
+        </script>
+
 	</div>
 </div>
Index: /views/warenkorb/checkout.phtml
===================================================================
--- /views/warenkorb/checkout.phtml	(revision 7753)
+++ /views/warenkorb/checkout.phtml	(revision 7754)
@@ -192,5 +192,5 @@
 					<?php if ($this->view['pflicht']['fax'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>
 					</label>
-					<input class="wpsg_input_text <?php echo (($this->view['pflicht']['fax'] != '1')?'validate[required]':''); ?> wpsg_checkout <?php echo ((in_array("fax", (array)$this->view['error']))?'wpsg_error':''); ?>" type="tel" id="fax" name="wpsg[checkout][fax]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['basket']['checkout']['fax'])); ?>" />
+					<input class="wpsg_input_text <?php echo (($this->view['pflicht']['fax'] != '1')?'validate[required]':''); ?> wpsg_checkout <?php echo ((in_array("fax", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="fax" name="wpsg[checkout][fax]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['basket']['checkout']['fax'])); ?>" />
 				</div>
 				<?php } ?>
@@ -201,5 +201,5 @@
 					<?php if ($this->view['pflicht']['tel'] != '1') { ?><span class="wpsg_required">*</span><?php } ?>
 					</label>
-					<input class="wpsg_input_text <?php echo (($this->view['pflicht']['tel'] != '1')?'validate[required]':''); ?> wpsg_checkout <?php echo ((in_array("tel", (array)$this->view['error']))?'wpsg_error':''); ?>" type="tel" id="tel" name="wpsg[checkout][tel]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['basket']['checkout']['tel'])); ?>" />
+					<input class="wpsg_input_text <?php echo (($this->view['pflicht']['tel'] != '1')?'validate[required]':''); ?> wpsg_checkout <?php echo ((in_array("tel", (array)$this->view['error']))?'wpsg_error':''); ?>" type="text" id="tel" name="wpsg[checkout][tel]" value="<?php echo htmlspecialchars(wpsg_getStr($this->view['basket']['checkout']['tel'])); ?>" />
 				</div>
 				<?php } ?>
