Ankündigung

Einklappen
Keine Ankündigung bisher.

Bestellen ohne Kundenkonto und Amazon Payment

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Bestellen ohne Kundenkonto und Amazon Payment

    Ich habe ein Problem mit Amazon Payment nach Einbau des Moduls Bestellen ohne Kundenkonto:

    Bei Klick auf den Amazon-Button lande ich im Schritt 1 von 3, Lieferinformationen.
    Die Versandkosten nach Zonen, die eigentlich € 4,95 betragen sollten, werden jetzt mit € 20,00 ausgewiesen.
    Nach Klick auf Weiter sehe ich im Schritt 2 von 3, Zahlungsinformationen den Warenbetrag als Nettobetrag
    und weiterhin die € 20,00 Versandkosten.
    Ein weiterer Klick auf Weiter bringt mich erneut auf die Anmeldeseite.

    Ansonsten funktioniert das Bezahlen mit Amazon sowohl mit und ohne Kundenanmeldung, wenn Amazon-Payment
    als Bezahlart bei den Zahlungsarten ausgewählt wird.

    Ich bräuchte dazu bitte dringend Hilfe.
    Vielen Dank

    #2
    Das Modul Amazon Pay enthält im Ordner OPTIONAL eigene Dateien für die Verwendung mit Cowoa. Bitte Anleitung zu Amazon Pay lesen und entsprechend ändern.

    Kommentar


      #3
      Unterschied zwischen Sandbox und Produktion?

      Ich habe zum Test eine mit meinem Shop identische Testumgebung aufgebaut
      und dabei festgestellt, dass Amazon Pay mit Button in der Sandbox-Umgebung
      völlig korrekt läuft, bei Umschalten auf die produktive Umgebung kommt der
      Fehler wie gehabt.

      Gibt es Unterschiede zwischen den beiden Umgebungen?
      Ich bin ein wenig ratlos.

      Kann das daran liegen, dass ich noch nicht die neueste Version des
      Amazon-Payment Moduls verwende?

      Kommentar


        #4
        Poste den Inhalt der beiden folgenden Dateien als Code (zwischen # Schaltflächen):
        includes/modules/pages/checkout_frites_login/header_php.php
        includes/modules/pages/account_edit/header_php.php

        Kommentar


          #5
          Hier der Inhalt der beiden Dateien.

          In der Testumgebung habe ich die beiden Versionen dieser Dateien aus der optionalen Version für
          das Bestellen ohne Kundenkonto eingebaut wie du schon gemeint hattest, jedoch macht es keinen Unterschied.

          Vielleicht sollte ich Amazon Payment wirklich auf die aktuellste Version heben und dann
          nochmals probieren.

          Sehr befremdlich ist jedoch der Unterschied zwischen Sandbox und Produktion. Das macht
          einem das Testen nicht leicht....


          Code:
          <?php
          /**
           * Header code file for the customer's Account-Edit page
           *
           * @package page
           * @copyright Copyright 2003-2016 Zen Cart Development Team
           * @copyright Portions Copyright 2003 osCommerce
           * @license http://www.zen-cart-pro.at/license/2_0.txt GNU Public License V2.0
           * @version $Id: header_php.php 734 2016-05-08 09:49:16Z webchills $
           */
          // This should be first line of the script:
          $zco_notifier->notify('NOTIFY_HEADER_START_ACCOUNT_EDIT');
          
          if (!$_SESSION['customer_id']) {
            $_SESSION['navigation']->set_snapshot();
            zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
          }
          
          require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));
          if (isset($_POST['action']) && ($_POST['action'] == 'process')) {
            if (ACCOUNT_GENDER == 'true') $gender = zen_db_prepare_input($_POST['gender']);
            $firstname = zen_db_prepare_input($_POST['firstname']);
            $lastname = zen_db_prepare_input($_POST['lastname']);
            $nick = (!empty($_POST['nick']) ? zen_db_prepare_input($_POST['nick']) : '');
            if (ACCOUNT_DOB == 'true') $dob = (empty($_POST['dob']) ? zen_db_prepare_input('0001-01-01 00:00:00') : zen_db_prepare_input($_POST['dob']));
            $email_address = zen_db_prepare_input($_POST['email_address']);
            $email_address_confirm = zen_db_prepare_input($_POST['email_address_confirm']);
            $telephone = zen_db_prepare_input($_POST['telephone']);
            $fax = zen_db_prepare_input($_POST['fax']);
            $email_format = zen_db_prepare_input($_POST['email_format']);
          
            if (CUSTOMERS_REFERRAL_STATUS == '2' and $_POST['customers_referral'] != '') $customers_referral = zen_db_prepare_input($_POST['customers_referral']);
          
            $error = false;
          
            if (ACCOUNT_GENDER == 'true') {
              if ( ($gender != 'm') && ($gender != 'f') ) {
                $error = true;
                $messageStack->add('account_edit', ENTRY_GENDER_ERROR);
              }
            }
          
            if (strlen($firstname) < ENTRY_FIRST_NAME_MIN_LENGTH) {
              $error = true;
              $messageStack->add('account_edit', ENTRY_FIRST_NAME_ERROR);
            }
          
            if (strlen($lastname) < ENTRY_LAST_NAME_MIN_LENGTH) {
              $error = true;
              $messageStack->add('account_edit', ENTRY_LAST_NAME_ERROR);
            }
          
            if (ACCOUNT_DOB == 'true') {
              if (ENTRY_DOB_MIN_LENGTH > 0 or !empty($_POST['dob'])) {
                if (substr_count($dob,'/') > 2 || checkdate((int)substr(zen_date_raw($dob), 4, 2), (int)substr(zen_date_raw($dob), 6, 2), (int)substr(zen_date_raw($dob), 0, 4)) == false) {
                  $error = true;
                  $messageStack->add('account_edit', ENTRY_DATE_OF_BIRTH_ERROR);
                }
              }
            }
          
            if (strlen($email_address) < ENTRY_EMAIL_ADDRESS_MIN_LENGTH) {
              $error = true;
              $messageStack->add('account_edit', ENTRY_EMAIL_ADDRESS_ERROR);
            }
          
            if (!zen_validate_email($email_address)) {
              $error = true;
              $messageStack->add('account_edit', ENTRY_EMAIL_ADDRESS_CHECK_ERROR);
            }
            elseif ($email_address != $email_address_confirm) {
                $error = true;
                $messageStack->add('account_edit', ENTRY_EMAIL_ADDRESS_CONFIRM_NOT_MATCHING);
              }
          
            $check_email_query = "SELECT count(*) AS total
                                  FROM   " . TABLE_CUSTOMERS . "
                                  WHERE  customers_email_address = :emailAddress
                                  AND    customers_id != :customersID";
          
            $check_email_query = $db->bindVars($check_email_query, ':emailAddress', $email_address, 'string');
            $check_email_query = $db->bindVars($check_email_query, ':customersID', $_SESSION['customer_id'], 'integer');
            $check_email = $db->Execute($check_email_query);
          
            if ($check_email->fields['total'] > 0) {
              $error = true;
              $messageStack->add('account_edit', ENTRY_EMAIL_ADDRESS_ERROR_EXISTS);
            }
          
            // check external hook for duplicate email address, so we can reject the change if duplicates aren't allowed externally
            // (the observers should set any messageStack output as needed)
            $nick_error = false;
            $zco_notifier->notify('NOTIFY_NICK_CHECK_FOR_EXISTING_EMAIL', $email_address, $nick_error, $nick);
            if ($nick_error) $error = true;
          
          
            if (strlen($telephone) < ENTRY_TELEPHONE_MIN_LENGTH) {
              $error = true;
              $messageStack->add('account_edit', ENTRY_TELEPHONE_NUMBER_ERROR);
            }
          
            $zco_notifier->notify('NOTIFY_HEADER_ACCOUNT_EDIT_VERIFY_COMPLETE');
          
            if ($error == false) {
              //update external bb system with new email address
              $zco_notifier->notify('NOTIFY_NICK_UPDATE_EMAIL_ADDRESS', $nick, $db->prepareInput($email_address));
          
              // build array of data to store the requested changes
              $sql_data_array = array(array('fieldName'=>'customers_firstname', 'value'=>$firstname, 'type'=>'stringIgnoreNull'),
                                      array('fieldName'=>'customers_lastname', 'value'=>$lastname, 'type'=>'stringIgnoreNull'),
                                      array('fieldName'=>'customers_email_address', 'value'=>$email_address, 'type'=>'stringIgnoreNull'),
                                      array('fieldName'=>'customers_telephone', 'value'=>$telephone, 'type'=>'stringIgnoreNull'),
                                      array('fieldName'=>'customers_fax', 'value'=>$fax, 'type'=>'stringIgnoreNull'),
                                      array('fieldName'=>'customers_email_format', 'value'=>$email_format, 'type'=>'stringIgnoreNull')
              );
          
              if ((CUSTOMERS_REFERRAL_STATUS == '2' and $customers_referral != '')) {
                $sql_data_array[] = array('fieldName'=>'customers_referral', 'value'=>$customers_referral, 'type'=>'stringIgnoreNull');
              }
              if (ACCOUNT_GENDER == 'true') {
                $sql_data_array[] = array('fieldName'=>'customers_gender', 'value'=>$gender, 'type'=>'stringIgnoreNull');
              }
              if (ACCOUNT_DOB == 'true') {
                if ($dob == '0001-01-01 00:00:00' or $_POST['dob'] == '') {
                  $sql_data_array[] = array('fieldName'=>'customers_dob', 'value'=>'0001-01-01 00:00:00', 'type'=>'date');
                } else {
                  $sql_data_array[] = array('fieldName'=>'customers_dob', 'value'=>zen_date_raw($_POST['dob']), 'type'=>'date');
                }
              }
          
              $where_clause = "customers_id = :customersID";
              $where_clause = $db->bindVars($where_clause, ':customersID', $_SESSION['customer_id'], 'integer');
              $db->perform(TABLE_CUSTOMERS, $sql_data_array, 'update', $where_clause);
          
              $sql = "UPDATE " . TABLE_CUSTOMERS_INFO . "
                      SET    customers_info_date_account_last_modified = now()
                      WHERE  customers_info_id = :customersID";
          
              $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
          
              $db->Execute($sql);
          
              $where_clause = "customers_id = :customersID AND address_book_id = :customerDefaultAddressID";
              $where_clause = $db->bindVars($where_clause, ':customersID', $_SESSION['customer_id'], 'integer');
              $where_clause = $db->bindVars($where_clause, ':customerDefaultAddressID', $_SESSION['customer_default_address_id'], 'integer');
              $sql_data_array = array(array('fieldName'=>'entry_firstname', 'value'=>$firstname, 'type'=>'stringIgnoreNull'),
              array('fieldName'=>'entry_lastname', 'value'=>$lastname, 'type'=>'string'));
          
              $db->perform(TABLE_ADDRESS_BOOK, $sql_data_array, 'update', $where_clause);
          
              $zco_notifier->notify('NOTIFY_HEADER_ACCOUNT_EDIT_UPDATES_COMPLETE');
          
              // reset the session variables
              $_SESSION['customer_first_name'] = $firstname;
              $_SESSION['customer_last_name'] = $lastname;
          
              $messageStack->add_session('account', SUCCESS_ACCOUNT_UPDATED, 'success');
          
              zen_redirect(zen_href_link(FILENAME_ACCOUNT, '', 'SSL'));
            }
          }
          
          $account_query = "SELECT customers_gender, customers_firstname, customers_lastname,
                                   customers_dob, customers_email_address, customers_telephone, customers_nick,
                                   customers_fax, customers_email_format, customers_referral
                            FROM   " . TABLE_CUSTOMERS . "
                            WHERE  customers_id = :customersID";
          
          $account_query = $db->bindVars($account_query, ':customersID', $_SESSION['customer_id'], 'integer');
          $account = $db->Execute($account_query);
          if (ACCOUNT_GENDER == 'true') {
            if (isset($gender)) {
              $male = ($gender == 'm') ? true : false;
            } else {
              $male = ($account->fields['customers_gender'] == 'm') ? true : false;
            }
            $female = !$male;
          }
          
          // if DOB field has database default setting, show blank:
          $dob = ($dob == '0001-01-01 00:00:00') ? '' : $dob;
          
          $customers_referral = $account->fields['customers_referral'];
          
          if (isset($customers_email_format)) {
            $email_pref_html = (($customers_email_format == 'HTML') ? true : false);
            $email_pref_none = (($customers_email_format == 'NONE') ? true : false);
            $email_pref_optout = (($customers_email_format == 'OUT')  ? true : false);
            $email_pref_text = (($email_pref_html || $email_pref_none || $email_pref_out) ? false : true);  // if not in any of the others, assume TEXT
          } else {
            $email_pref_html = (($account->fields['customers_email_format'] == 'HTML') ? true : false);
            $email_pref_none = (($account->fields['customers_email_format'] == 'NONE') ? true : false);
            $email_pref_optout = (($account->fields['customers_email_format'] == 'OUT')  ? true : false);
            $email_pref_text = (($email_pref_html || $email_pref_none || $email_pref_out) ? false : true);  // if not in any of the others, assume TEXT
          }
          
          $breadcrumb->add(NAVBAR_TITLE_1, zen_href_link(FILENAME_ACCOUNT, '', 'SSL'));
          $breadcrumb->add(NAVBAR_TITLE_2);
          
          // This should be last line of the script:
          $zco_notifier->notify('NOTIFY_HEADER_END_ACCOUNT_EDIT');
          Code:
          <?php
          /**
           * @package Amazon Pay for Zen Cart German
           * @copyright Copyright 2003-2014 Webiprog
           * @copyright Copyright 2003-2017 Zen Cart Development Team
           * @copyright Portions Copyright 2003 osCommerce
           * @license http://www.zen-cart-pro.at/license/2_0.txt GNU Public License V2.0
           * @version $Id: header_php.php 2017-10-16 20:29:16Z webchills $
           */
          // This should be first line of the script:
          $zco_notifier->notify('NOTIFY_HEADER_START_LOGIN');
          
          // redirect the customer to a friendly cookie-must-be-enabled page if cookies are disabled (or the session has not started)
          if ($session_started == false) {
              zen_redirect(zen_href_link(FILENAME_COOKIE_USAGE));
          }
          include_once((IS_ADMIN_FLAG === true ? DIR_FS_CATALOG_MODULES : DIR_WS_MODULES) . 'payment/frites/frites_functions.php');
          
          $links = fritesLinks();
          
          $frites_logged = fritesLogin();
          //echo '<pre>';print_r($frites_logged);echo '</pre>';die();
          
          //echo '<pre>';print_r(md5($frites_logged['user_profile']['user_id']));echo '</pre>';die();
          
          
          $loginAuthorized = false;
          
          if (!empty($frites_logged['status']) && isset($frites_logged['user_profile']['email']) && $frites_logged['user_profile']['email'] && isset($frites_logged['user_profile']['user_id'])
          ) {
          
              // define
              $customer_email = $frites_logged['user_profile']['email'];
              $frites_md = md5($frites_logged['user_profile']['user_id']);
          
              // Check if email exists
              $check_customer_query = "SELECT *
                                     FROM " . TABLE_CUSTOMERS . "
                                     WHERE customers_email_address = :emailAddress";
          
              $check_customer_query = $db->bindVars($check_customer_query, ':emailAddress', $customer_email, 'string');
              $check_customer = $db->Execute($check_customer_query);
          
              //fixed by oppo webiprog.com  (oleg@webiprog.com)
          // set the frites user_profile id If not logged in via Amazon
              if ($check_customer->RecordCount() && isset($check_customer->fields['customers_frites_userid']) && $check_customer->fields['customers_frites_userid'] == '' && $check_customer->fields['customers_email_address'] == $frites_logged['user_profile']['email'] && !empty($check_customer->fields['customers_id']) && is_numeric($check_customer->fields['customers_id'])
              ) {
          
                  $customer_name = explode(' ', $frites_logged['user_profile']['name'], 2);
          
                  // set the amazon user_profile id If not logged in via Amazon and update name
                  $sql_customer_id = intval($check_customer->fields['customers_id']);
                  $sql = "UPDATE " . TABLE_CUSTOMERS . "
                              SET 
                              customers_frites_userid = :fritesUserid,
                              customers_firstname = :fritesFirstName, 
                              customers_lastname = :fritesLastName
                              WHERE customers_id = :custID";
                  $sql = $db->bindVars($sql, ':fritesUserid', $frites_md, 'string');
                  $sql = $db->bindVars($sql, ':fritesFirstName', (!empty($customer_name[0]) ? $customer_name[0] : ''), 'string');
                  $sql = $db->bindVars($sql, ':fritesLastName', (!empty($customer_name[1]) ? $customer_name[1] : ''), 'string');
                  $sql = $db->bindVars($sql, ':custID', $sql_customer_id, 'integer');
                  $db->Execute($sql);
          
              }
          
          
              if ($check_customer->RecordCount() && isset($check_customer->fields['customers_authorization']) && $check_customer->fields['customers_authorization'] == '4') {
                  // this account is banned
                  $zco_notifier->notify('NOTIFY_LOGIN_BANNED');
                  $messageStack->add('login', TEXT_LOGIN_BANNED);
              } elseif ($check_customer->RecordCount() && !isset($check_customer->fields['customers_frites_userid'])) {
                  //account exists but was not registered by amazon || user_id is wrong || fieldname `customers_frites_userid` not exists
                  //redirect to original login
                  zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
          
              } elseif (!$check_customer->RecordCount()) {
                  $new_acct_notify = true;
                  $customer_name = explode(' ', $frites_logged['user_profile']['name'], 2);
          
                  $acct_exists = false;
                  // Create an account, if the account does not exist
                  if (!$acct_exists) {
                      // debug
                      if (MODULE_PAYMENT_FRITES_IPN_DEBUG == 'Log File') {
                          fritesWriteLog('Creating account for ' . $frites_logged['user_profile']['email']);
                      }
          
                      // Generate a random 12-char password
                      $password = zen_create_random_value(12);
          
                      $sql_data_array = array();
          
                      // set the customer information in the array for the table insertion
                      $sql_data_array = array('customers_firstname' => (isset($customer_name[0]) ? trim($customer_name[0]) : ''), 'customers_lastname' => (isset($customer_name[1]) ? trim($customer_name[1]) : ''), 'customers_email_address' => $frites_logged['user_profile']['email'], 'customers_email_format' => (ACCOUNT_EMAIL_PREFERENCE == '1' ? 'HTML' : 'TEXT'), 'customers_telephone' => '', 'customers_fax' => '', 'customers_gender' => 'm', 'customers_newsletter' => '0', 'customers_password' => zen_encrypt_password($password), 'customers_frites_userid' => $frites_md);
          
                      // insert the data
                      $result = zen_db_perform(TABLE_CUSTOMERS, $sql_data_array);
          
                      // grab the customer_id (last insert id)
                      $customer_id = $db->Insert_ID();
          
                      // set the Guest customer ID -- for PWA purposes
                      $_SESSION['customer_guest_id'] = $customer_id;
          
                      // TODO fix country codes and replace with currencies
                      $country_id = frites_get_default_country_id();
                      $state_id = 0;
          
                      /*if (MODULE_PAYMENT_FRITES_REGION == 'UK') {
                          $country_id = 222;
                      }
          
                      if (MODULE_PAYMENT_FRITES_REGION == 'DE') {
                          $country_id = 81;
                      }*/
          
                      // set the customer address information in the array for the table insertion
                      $sql_data_array = array('customers_id' => $customer_id, 'entry_gender' => 'm', 'entry_firstname' => (isset($customer_name[0]) ? trim($customer_name[0]) : ''), 'entry_lastname' => (isset($customer_name[1]) ? trim($customer_name[1]) : ''), 'entry_street_address' => '', 'entry_suburb' => '', 'entry_city' => '', 'entry_zone_id' => $state_id, 'entry_postcode' => $frites_logged['user_profile']['postal_code'], 'entry_country_id' => $country_id);
          
                      // insert the data
                      zen_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);
          
                      // grab the address_id (last insert id)
                      $address_id = $db->Insert_ID();
          
                      // set the address id lookup for the customer
                      $sql = "UPDATE " . TABLE_CUSTOMERS . "
                              SET customers_default_address_id = :addrID
                              WHERE customers_id = :custID";
                      $sql = $db->bindVars($sql, ':addrID', $address_id, 'integer');
                      $sql = $db->bindVars($sql, ':custID', $customer_id, 'integer');
                      $db->Execute($sql);
          
                      // insert the new customer_id into the customers info table for consistency
                      $sql = "INSERT INTO " . TABLE_CUSTOMERS_INFO . "
                                     (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created, customers_info_date_of_last_logon)
                              VALUES (:custID, 1, now(), now())";
                      $sql = $db->bindVars($sql, ':custID', $customer_id, 'integer');
                      $db->Execute($sql);
          
                      // send Welcome Email if appropriate
                      if ($new_acct_notify) {
                          // require the language file
                          global $language_page_directory, $template_dir;
                          if (!isset($language_page_directory))
                              $language_page_directory = DIR_WS_LANGUAGES . $_SESSION['language'] . '/';
                          if (file_exists($language_page_directory . $template_dir . '/create_account.php')) {
                              $template_dir_select = $template_dir . '/';
                          } else {
                              $template_dir_select = '';
                          }
          
                          require($language_page_directory . $template_dir_select . '/create_account.php');
          
                          // set the mail text
                          $email_text = sprintf(EMAIL_GREET_NONE, $frites_logged['user_profile']['name']) . EMAIL_WELCOME . "\n\n" . EMAIL_TEXT;
                          $email_text .= "\n\n" . EMAIL_EC_ACCOUNT_INFORMATION . "\nUsername: " . $frites_logged['user_profile']['email'] . "\nPassword: " . $password . "\n\n";
                          $email_text .= EMAIL_CONTACT;
                          // include create-account-specific disclaimer
                          $email_text .= "\n\n" . sprintf(EMAIL_DISCLAIMER_NEW_CUSTOMER, STORE_OWNER_EMAIL_ADDRESS) . "\n\n";
                          $email_html = array();
                          $email_html['EMAIL_GREETING'] = sprintf(EMAIL_GREET_NONE, $frites_logged['user_profile']['name']);
                          $email_html['EMAIL_WELCOME'] = EMAIL_WELCOME;
                          $email_html['EMAIL_MESSAGE_HTML'] = nl2br(EMAIL_TEXT . "\n\n" . EMAIL_EC_ACCOUNT_INFORMATION . "\nUsername: " . $frites_logged['user_profile']['email'] . "\nPassword: " . $password . "\n\n");
                          $email_html['EMAIL_CONTACT_OWNER'] = EMAIL_CONTACT;
                          $email_html['EMAIL_CLOSURE'] = nl2br(EMAIL_GV_CLOSURE);
                          $email_html['EMAIL_DISCLAIMER'] = sprintf(EMAIL_DISCLAIMER_NEW_CUSTOMER, '<a href="mailto:' . STORE_OWNER_EMAIL_ADDRESS . '">' . STORE_OWNER_EMAIL_ADDRESS . ' </a>');
          
                          // send the mail
                          if (trim(EMAIL_SUBJECT) != 'n/a')
                              zen_mail($frites_logged['user_profile']['name'], $frites_logged['user_profile']['email'], EMAIL_SUBJECT, $email_text, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, $email_html, 'welcome');
          
                      } else {
                      }
          
                      // hook notifier class vis a vis account-creation
                      $zco_notifier->notify('NOTIFY_LOGIN_SUCCESS_VIA_CREATE_ACCOUNT');
          
                  } else {
                  }
          
                  // Check if email exists
                  $check_customer_query = "SELECT customers_id, customers_firstname, customers_lastname, customers_password,
                                                  customers_email_address, customers_default_address_id,
                                                  customers_authorization, customers_referral
                                         FROM " . TABLE_CUSTOMERS . "
                                         WHERE customers_email_address = :emailAddress";
          
                  $check_customer_query = $db->bindVars($check_customer_query, ':emailAddress', $customer_email, 'string');
                  $check_customer = $db->Execute($check_customer_query);
          
                  $loginAuthorized = true;
          
              }
          
              if ($check_customer->RecordCount() && isset($check_customer->fields['customers_frites_userid']) && $check_customer->fields['customers_frites_userid'] == $frites_md
              ) {
          
                  $loginAuthorized = true;
              }
          
          
              if (!$loginAuthorized) {
                  $error = true;
                  $messageStack->add('login', TEXT_LOGIN_ERROR);
              } else {
                  if (SESSION_RECREATE == 'True') {
                      zen_session_recreate();
                  }
          
                  $check_country_query = "SELECT entry_country_id, entry_zone_id
                                        FROM " . TABLE_ADDRESS_BOOK . "
                                        WHERE customers_id = :customersID
                                        AND address_book_id = :addressBookID";
          
                  $check_country_query = $db->bindVars($check_country_query, ':customersID', $check_customer->fields['customers_id'], 'integer');
                  $check_country_query = $db->bindVars($check_country_query, ':addressBookID', $check_customer->fields['customers_default_address_id'], 'integer');
                  $check_country = $db->Execute($check_country_query);
          
                  $_SESSION['customer_id'] = $check_customer->fields['customers_id'];
                  $_SESSION['customer_default_address_id'] = $check_customer->fields['customers_default_address_id'];
                  $_SESSION['customers_authorization'] = $check_customer->fields['customers_authorization'];
                  $_SESSION['customer_first_name'] = $check_customer->fields['customers_firstname'];
                  $_SESSION['customer_last_name'] = $check_customer->fields['customers_lastname'];
                  $_SESSION['customer_country_id'] = $check_country->fields['entry_country_id'];
                  $_SESSION['customer_zone_id'] = $check_country->fields['entry_zone_id'];
          
                  // enforce db integrity: make sure related record exists
                  $sql = "SELECT customers_info_date_of_last_logon FROM " . TABLE_CUSTOMERS_INFO . " WHERE customers_info_id = :customersID";
                  $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
                  $result = $db->Execute($sql);
                  if ($result->RecordCount() == 0) {
                      $sql = "insert into " . TABLE_CUSTOMERS_INFO . " (customers_info_id) values (:customersID)";
                      $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
                      $db->Execute($sql);
                  }
          
                  // update login count
                  $sql = "UPDATE " . TABLE_CUSTOMERS_INFO . "
                        SET customers_info_date_of_last_logon = now(),
                            customers_info_number_of_logons = IF(customers_info_number_of_logons, customers_info_number_of_logons+1, 1)
                        WHERE customers_info_id = :customersID";
          
                  $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
                  $db->Execute($sql);
                  $zco_notifier->notify('NOTIFY_LOGIN_SUCCESS');
          
                  // bof: contents merge notice
                  // save current cart contents count if required
                  if (SHOW_SHOPPING_CART_COMBINED > 0) {
                      $zc_check_basket_before = $_SESSION['cart']->count_contents();
                  }
          
                  // bof: not require part of contents merge notice
                  // restore cart contents
                  $_SESSION['cart']->restore_contents();
                  // eof: not require part of contents merge notice
          
                  // check current cart contents count if required
                  if (SHOW_SHOPPING_CART_COMBINED > 0 && $zc_check_basket_before > 0) {
                      $zc_check_basket_after = $_SESSION['cart']->count_contents();
                      if (($zc_check_basket_before != $zc_check_basket_after) && $_SESSION['cart']->count_contents() > 0 && SHOW_SHOPPING_CART_COMBINED > 0) {
                          if (SHOW_SHOPPING_CART_COMBINED == 2) {
                              // warning only do not send to cart
                              $messageStack->add_session('header', WARNING_SHOPPING_CART_COMBINED, 'caution');
                          }
                          if (SHOW_SHOPPING_CART_COMBINED == 1) {
                              // show warning and send to shopping cart for review
                              $messageStack->add_session('shopping_cart', WARNING_SHOPPING_CART_COMBINED, 'caution');
                              zen_redirect(zen_href_link(FILENAME_SHOPPING_CART, '', 'NONSSL'));
                          }
                      }
                  }
                  // eof: contents merge notice
          
                  if (isset($_GET['only_login']) && $_GET['only_login']) {
                      zen_redirect(zen_href_link(FILENAME_ACCOUNT, '', 'NONSSL'));
                  } elseif (!empty($_GET['checkout_frites_confirmation'])) {
                      zen_redirect($links['checkout_frites_confirmation']);
                  } else {
                      zen_redirect($links['checkout_frites_shipping']);
                  }
              }
          
          } else {
          
              //fixed by oppo webiprog.com  (oleg@webiprog.com)
              //redirect to original login
              // Amazon did not accept login
              zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
          }
          
          if (isset($_GET['only_login']) && $_GET['only_login']) {
              zen_redirect(zen_href_link(FILENAME_ACCOUNT, '', 'NONSSL'));
          } elseif (!empty($_GET['checkout_frites_confirmation'])) {
              zen_redirect($links['checkout_frites_confirmation']);
          } else {
              zen_redirect($links['checkout_frites_shipping']);
          }
          /*echo $loginAuthorized;
          echo '<pre>';print_r($_SESSION);echo '</pre>';
          echo '<pre>';print_r($frites_logged);echo '</pre>';
          echo '<pre>';print_r($_SERVER);echo '</pre>';
          die();
          
          zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));*/
          
          
          // This should be last line of the script:
          $zco_notifier->notify('NOTIFY_HEADER_END_LOGIN');

          Kommentar


            #6
            Wenn Du Dir Deine gepostete includes/modules/pages/checkout_frites_login/header_php.php und die aus dem Ordner OPTIONAL nochmal etwas genauer ansiehst, dann siehst Du, dass Du die nötige Änderung für COWOA eben nicht vorgenommen hast.
            Korrekt wäre:

            Code:
            <?php
            /**
             * @package Amazon Pay for Zen Cart Deutsch (www.zen-cart-pro.at)
             * @copyright Copyright 2003-2014 Webiprog
             * @copyright Copyright 2003-2018 Zen Cart Development Team
             * @copyright Portions Copyright 2003 osCommerce
             * @license http://www.zen-cart-pro.at/license/2_0.txt GNU Public License V2.0
             * @version $Id: header_php.php for COWOA 2018-04-04 18:29:16Z webchills $
             */
            // This should be first line of the script:
            $zco_notifier->notify('NOTIFY_HEADER_START_LOGIN');
            
            // redirect the customer to a friendly cookie-must-be-enabled page if cookies are disabled (or the session has not started)
            if ($session_started == false) {
                zen_redirect(zen_href_link(FILENAME_COOKIE_USAGE));
            }
            include_once (IS_ADMIN_FLAG === true ? DIR_FS_CATALOG_MODULES : DIR_WS_MODULES) . 'payment/frites/frites_functions.php';
            
            $links = fritesLinks();
            
            $frites_logged = fritesLogin();
            
            
            
            $loginAuthorized = false;
            
            if (!empty($frites_logged['status']) && isset($frites_logged['user_profile']['email']) && $frites_logged['user_profile']['email'] && isset($frites_logged['user_profile']['user_id'])
            ) {
            
                // define
                $customer_email = $frites_logged['user_profile']['email'];
                $frites_md = md5($frites_logged['user_profile']['user_id']);
            
                [COLOR=#ff0000]// Check if email exists
                $check_customer_query = "SELECT *
                                       FROM " . TABLE_CUSTOMERS . "
                                       WHERE customers_email_address = :emailAddress
                                       AND COWOA_account != 1";[/COLOR]
            
                $check_customer_query = $db->bindVars($check_customer_query, ':emailAddress', $customer_email, 'string');
                $check_customer = $db->Execute($check_customer_query);
            
                //fixed by oppo webiprog.com  (oleg@webiprog.com)
            // set the frites user_profile id If not logged in via Amazon
                if ($check_customer->RecordCount() && isset($check_customer->fields['customers_frites_userid']) && $check_customer->fields['customers_frites_userid'] == '' && $check_customer->fields['customers_email_address'] == $frites_logged['user_profile']['email'] && !empty($check_customer->fields['customers_id']) && is_numeric($check_customer->fields['customers_id'])
                ) {
            
                    $customer_name = explode(' ', $frites_logged['user_profile']['name'], 2);
            
                    // set the amazon user_profile id If not logged in via Amazon and update name
                    $sql_customer_id = intval($check_customer->fields['customers_id']);
                    $sql = 'UPDATE ' . TABLE_CUSTOMERS . '
                                SET 
                                customers_frites_userid = :fritesUserid,
                                customers_firstname = :fritesFirstName, 
                                customers_lastname = :fritesLastName
                                WHERE customers_id = :custID';
                    $sql = $db->bindVars($sql, ':fritesUserid', $frites_md, 'string');
                    $sql = $db->bindVars($sql, ':fritesFirstName', (!empty($customer_name[0]) ? $customer_name[0] : ''), 'string');
                    $sql = $db->bindVars($sql, ':fritesLastName', (!empty($customer_name[1]) ? $customer_name[1] : ''), 'string');
                    $sql = $db->bindVars($sql, ':custID', $sql_customer_id, 'integer');
                    $db->Execute($sql);
            
                }
            
            
                if ($check_customer->RecordCount() && isset($check_customer->fields['customers_authorization']) && $check_customer->fields['customers_authorization'] == '4') {
                    // this account is banned
                    $zco_notifier->notify('NOTIFY_LOGIN_BANNED');
                    $messageStack->add('login', TEXT_LOGIN_BANNED);
                } elseif ($check_customer->RecordCount() && !isset($check_customer->fields['customers_frites_userid'])) {
                    //account exists but was not registered by amazon || user_id is wrong || fieldname `customers_frites_userid` not exists
                    //redirect to original login
                    zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
            
                } elseif (!$check_customer->RecordCount()) {
                    $new_acct_notify = true;
                    $customer_name = explode(' ', $frites_logged['user_profile']['name'], 2);
            
                    $acct_exists = false;
                    // Create an account, if the account does not exist
                    if (!$acct_exists) {
                        // debug
                        if (MODULE_PAYMENT_FRITES_IPN_DEBUG == 'Log File') {
                            fritesWriteLog('Creating account for ' . $frites_logged['user_profile']['email']);
                        }
            
                        // Generate a random 12-char password
                        $password = zen_create_random_value(12);
            
                        $sql_data_array = array();
            
                        // set the customer information in the array for the table insertion
                        $sql_data_array = array('customers_firstname' => isset($customer_name[0]) ? trim($customer_name[0]) : '', 'customers_lastname' => isset($customer_name[1]) ? trim($customer_name[1]) : '', 'customers_email_address' => $frites_logged['user_profile']['email'], 'customers_email_format' => ACCOUNT_EMAIL_PREFERENCE == '1' ? 'HTML' : 'TEXT', 'customers_telephone' => '', 'customers_fax' => '', 'customers_gender' => 'm', 'customers_newsletter' => '0', 'customers_password' => zen_encrypt_password($password), 'customers_frites_userid' => $frites_md);
            
                        // insert the data
                        $result = zen_db_perform(TABLE_CUSTOMERS, $sql_data_array);
            
                        // grab the customer_id (last insert id)
                        $customer_id = $db->Insert_ID();
            
                        // set the Guest customer ID -- for PWA purposes
                        $_SESSION['customer_guest_id'] = $customer_id;
            
                        // TODO fix country codes and replace with currencies
                        $country_id = frites_get_default_country_id();
                        $state_id = 0;
            
                        
                        // set the customer address information in the array for the table insertion
                        $sql_data_array = array('customers_id' => $customer_id, 'entry_gender' => 'm', 'entry_firstname' => isset($customer_name[0]) ? trim($customer_name[0]) : '', 'entry_lastname' => isset($customer_name[1]) ? trim($customer_name[1]) : '', 'entry_street_address' => '', 'entry_suburb' => '', 'entry_city' => '', 'entry_zone_id' => $state_id, 'entry_postcode' => $frites_logged['user_profile']['postal_code'], 'entry_country_id' => $country_id);
            
                        // insert the data
                        zen_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);
            
                        // grab the address_id (last insert id)
                        $address_id = $db->Insert_ID();
            
                        // set the address id lookup for the customer
                        $sql = 'UPDATE ' . TABLE_CUSTOMERS . '
                                SET customers_default_address_id = :addrID
                                WHERE customers_id = :custID';
                        $sql = $db->bindVars($sql, ':addrID', $address_id, 'integer');
                        $sql = $db->bindVars($sql, ':custID', $customer_id, 'integer');
                        $db->Execute($sql);
            
                        // insert the new customer_id into the customers info table for consistency
                        $sql = 'INSERT INTO ' . TABLE_CUSTOMERS_INFO . '
                                       (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created, customers_info_date_of_last_logon)
                                VALUES (:custID, 1, now(), now())';
                        $sql = $db->bindVars($sql, ':custID', $customer_id, 'integer');
                        $db->Execute($sql);
            
                        // send Welcome Email if appropriate
                        if ($new_acct_notify) {
                            // require the language file
                            global $language_page_directory, $template_dir;
                            if (!isset($language_page_directory))
                                $language_page_directory = DIR_WS_LANGUAGES . $_SESSION['language'] . '/';
                            if (file_exists($language_page_directory . $template_dir . '/create_account.php')) {
                                $template_dir_select = $template_dir . '/';
                            } else {
                                $template_dir_select = '';
                            }
            
                            require $language_page_directory . $template_dir_select . '/create_account.php';
            
                            // set the mail text
                            $email_text = sprintf(EMAIL_GREET_NONE, $frites_logged['user_profile']['name']) . EMAIL_WELCOME . "\n\n" . EMAIL_TEXT;
                            $email_text .= "\n\n" . EMAIL_EC_ACCOUNT_INFORMATION . "\nUsername: " . $frites_logged['user_profile']['email'] . "\nPassword: " . $password . "\n\n";
                            $email_text .= EMAIL_CONTACT;
                            // include create-account-specific disclaimer
                            $email_text .= "\n\n" . sprintf(EMAIL_DISCLAIMER_NEW_CUSTOMER, STORE_OWNER_EMAIL_ADDRESS) . "\n\n";
                            $email_html = array();
                            $email_html['EMAIL_GREETING'] = sprintf(EMAIL_GREET_NONE, $frites_logged['user_profile']['name']);
                            $email_html['EMAIL_WELCOME'] = EMAIL_WELCOME;
                            $email_html['EMAIL_MESSAGE_HTML'] = nl2br(EMAIL_TEXT . "\n\n" . EMAIL_EC_ACCOUNT_INFORMATION . "\nUsername: " . $frites_logged['user_profile']['email'] . "\nPassword: " . $password . "\n\n");
                            $email_html['EMAIL_CONTACT_OWNER'] = EMAIL_CONTACT;
                            $email_html['EMAIL_CLOSURE'] = nl2br(EMAIL_GV_CLOSURE);
                            $email_html['EMAIL_DISCLAIMER'] = sprintf(EMAIL_DISCLAIMER_NEW_CUSTOMER, '<a href="mailto:' . STORE_OWNER_EMAIL_ADDRESS . '">' . STORE_OWNER_EMAIL_ADDRESS . ' </a>');
            
                            // send the mail
                            if (trim(EMAIL_SUBJECT) != 'n/a')
                                zen_mail($frites_logged['user_profile']['name'], $frites_logged['user_profile']['email'], EMAIL_SUBJECT, $email_text, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, $email_html, 'welcome');
            
                        } else {
                        }
            
                        // hook notifier class vis a vis account-creation
                        $zco_notifier->notify('NOTIFY_LOGIN_SUCCESS_VIA_CREATE_ACCOUNT');
            
                    } else {
                    }
            
                   // Check if email exists
                    $check_customer_query = "SELECT customers_id, customers_firstname, customers_lastname, customers_password,
                                                    customers_email_address, customers_default_address_id,
                                                    customers_authorization, customers_referral
                                           FROM " . TABLE_CUSTOMERS . "
                                           WHERE customers_email_address = :emailAddress
                                           AND COWOA_account != 1";
            
                    $check_customer_query = $db->bindVars($check_customer_query, ':emailAddress', $customer_email, 'string');
                    $check_customer = $db->Execute($check_customer_query);
            
                    $loginAuthorized = true;
            
                }
            
                if ($check_customer->RecordCount() && isset($check_customer->fields['customers_frites_userid']) && $check_customer->fields['customers_frites_userid'] == $frites_md
                ) {
            
                    $loginAuthorized = true;
                }
            
            
                if (!$loginAuthorized) {
                    $error = true;
                    $messageStack->add('login', TEXT_LOGIN_ERROR);
                } else {
                    if (SESSION_RECREATE == 'True') {
                        zen_session_recreate();
                    }
            
                    $check_country_query = 'SELECT entry_country_id, entry_zone_id
                                          FROM ' . TABLE_ADDRESS_BOOK . '
                                          WHERE customers_id = :customersID
                                          AND address_book_id = :addressBookID';
            
                    $check_country_query = $db->bindVars($check_country_query, ':customersID', $check_customer->fields['customers_id'], 'integer');
                    $check_country_query = $db->bindVars($check_country_query, ':addressBookID', $check_customer->fields['customers_default_address_id'], 'integer');
                    $check_country = $db->Execute($check_country_query);
            
                    $_SESSION['customer_id'] = $check_customer->fields['customers_id'];
                    $_SESSION['customer_default_address_id'] = $check_customer->fields['customers_default_address_id'];
                    $_SESSION['customers_authorization'] = $check_customer->fields['customers_authorization'];
                    $_SESSION['customer_first_name'] = $check_customer->fields['customers_firstname'];
                    $_SESSION['customer_last_name'] = $check_customer->fields['customers_lastname'];
                    $_SESSION['customer_country_id'] = $check_country->fields['entry_country_id'];
                    $_SESSION['customer_zone_id'] = $check_country->fields['entry_zone_id'];
            
                    // enforce db integrity: make sure related record exists
                    $sql = 'SELECT customers_info_date_of_last_logon FROM ' . TABLE_CUSTOMERS_INFO . ' WHERE customers_info_id = :customersID';
                    $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
                    $result = $db->Execute($sql);
                    if ($result->RecordCount() == 0) {
                        $sql = 'insert into ' . TABLE_CUSTOMERS_INFO . ' (customers_info_id) values (:customersID)';
                        $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
                        $db->Execute($sql);
                    }
            
                    // update login count
                    $sql = 'UPDATE ' . TABLE_CUSTOMERS_INFO . '
                          SET customers_info_date_of_last_logon = now(),
                              customers_info_number_of_logons = IF(customers_info_number_of_logons, customers_info_number_of_logons+1, 1)
                          WHERE customers_info_id = :customersID';
            
                    $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
                    $db->Execute($sql);
                    $zco_notifier->notify('NOTIFY_LOGIN_SUCCESS');
            
                    // bof: contents merge notice
                    // save current cart contents count if required
                    if (SHOW_SHOPPING_CART_COMBINED > 0) {
                        $zc_check_basket_before = $_SESSION['cart']->count_contents();
                    }
            
                    // bof: not require part of contents merge notice
                    // restore cart contents
                    $_SESSION['cart']->restore_contents();
                    // eof: not require part of contents merge notice
            
                    // check current cart contents count if required
                    if (SHOW_SHOPPING_CART_COMBINED > 0 && $zc_check_basket_before > 0) {
                        $zc_check_basket_after = $_SESSION['cart']->count_contents();
                        if (($zc_check_basket_before != $zc_check_basket_after) && $_SESSION['cart']->count_contents() > 0 && SHOW_SHOPPING_CART_COMBINED > 0) {
                            if (SHOW_SHOPPING_CART_COMBINED == 2) {
                                // warning only do not send to cart
                                $messageStack->add_session('header', WARNING_SHOPPING_CART_COMBINED, 'caution');
                            }
                            if (SHOW_SHOPPING_CART_COMBINED == 1) {
                                // show warning and send to shopping cart for review
                                $messageStack->add_session('shopping_cart', WARNING_SHOPPING_CART_COMBINED, 'caution');
                                zen_redirect(zen_href_link(FILENAME_SHOPPING_CART, '', 'NONSSL'));
                            }
                        }
                    }
                    // eof: contents merge notice
            
                    if (isset($_GET['only_login']) && $_GET['only_login']) {
                        zen_redirect(zen_href_link(FILENAME_ACCOUNT, '', 'NONSSL'));
                    } elseif (!empty($_GET['checkout_frites_confirmation'])) {
                        zen_redirect($links['checkout_frites_confirmation']);
                    } else {
                        zen_redirect($links['checkout_frites_shipping']);
                    }
                }
            
            } else {
            
               
                //redirect to original login
                // Amazon did not accept login
                zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
            }
            
            if (isset($_GET['only_login']) && $_GET['only_login']) {
                zen_redirect(zen_href_link(FILENAME_ACCOUNT, '', 'NONSSL'));
            } elseif (!empty($_GET['checkout_frites_confirmation'])) {
                zen_redirect($links['checkout_frites_confirmation']);
            } else {
                zen_redirect($links['checkout_frites_shipping']);
            }
            // This should be last line of the script:
            $zco_notifier->notify('NOTIFY_HEADER_END_LOGIN');
            Und dann wird es auch funktionieren.

            Mit Sandbox versus Production hat das nichts zu tun.

            Nimm das zum Anlass, das Amazon Modul komplett zu entfernen.
            Dann installierst Du gleich die aktuelle Version und nimmst die für COWOA nötigen Änderungen wirklich vor

            Zusätzlich solltest Du dann bevor Du den nächsten Checkout machst, das Kundenkonto, das mit der Amazon Live Emailadresse wohl im Shop schon existiert löschen und dann frisch mit Amazon einloggen.

            Generell gibt es überhaupt keinen Amazon Checkout "ohne Kundenkonto". Es wird ei einem Amazon Checkout immer ein Kundenkonto angelegt. Gibt es bereits ein COWOA Konto mit dieser Adresse, dann wird ein neues echtes Kundenkonto angelegt. Voraussetzung dafür ist die Anpassung der includes/modules/pages/checkout_frites_login/header_php.php so wie es auch in der Anleitung beschrieben ist.

            Kommentar


              #7
              Vielen Dank für deine Antwort.

              Die von dir gepostete Version habe ich alternativ in meiner Test-Umgebung eingebaut, die
              auch SSL gesichert ist und wo ich ebenfalls frei zwischen Sandbox und Live
              Umgebung umschalten kann. Es ist im Verhalten jedoch wirklich kein Unterschied
              zu merken. Beide Versionen der beiden header-Dateien bringen das gleiche Ergebnis.

              Nun ich werde das Modul auf die neueste Version updaten und dann mit frischer
              E-Mail (ohne bestehendem Kundenkonto im Shop) nochmals neu starten.

              Die Frage ist aber dennoch, warum es aktuell in der Sandbox-Umgebung reibungsfrei
              funktioniert (obwohl es doch eigentlich nicht gehen dürfte). Wieso werden in der
              Sandbox-Umgebung Preise mit MwSt und korrekte Versandkosten augewiesen und
              im Live-Betrieb nicht?

              Muss ich zum Entfernen des alten Moduls alle Dateien wieder auf Originalzustand zurücksetzen
              und die im damaligen Ordner neuen Dateien löschen? Aber das werde ich wohl sehen, wenn
              ich die beiden Versionen vergleiche.

              Kommentar


                #8
                Ich habe jetzt die neueste Version eingebaut und es funktioniert - auch mit Firefox

                Vielen Dank nochmals für die Unterstützung.

                Kommentar

                Info zu diesem Forenarchiv:
                Mit Release von 1.5.7 wurde die deutsche Zen Cart Version auf eine reine DIY-Lösung umgestellt.
                Für einen Support via Forum stehen keine personellen und zeitlichen Ressourcen mehr zur Verfügung.
                Dieses Supportforum bleibt im Nur-Lesen-Modus als Wissensarchiv noch online verfügbar.
                PM Funktionalität, Registrierung und Posten neuer Beiträge sind deaktiviert.
                Zugriff auf Anhänge in den Postings ist auch ohne Registrierung/Einloggen möglich.
                FAQ und Downloadbereich des Forums wurden in die neue umfangreiche Knowledgebase auf der zen-cart-pro.at Website übernommen.

                Das Development der deutschen Zen Cart Version geht wie bisher auf Github weiter.
                Wir werden auch weiterhin neue Versionen bereitstellen und die Onlinedokumentation/Knowledgebase aktualisieren.
                Fehler in der Software können auf Github als Issues gemeldet werden.
                Follow us
                aktuelle version
                Zen Cart 1.5.7g deutsch
                vom 12.12.2023
                [Download]
                Lädt...
                X