Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Zahlungsart abhängig von Versandart?

    zvenson

    • Frisch an Board
    • Beiträge: 69
    • Geschlecht:
    Zahlungsart abhängig von Versandart?
    am: 11. Dezember 2013, 10:29:29
    Hi Community!
    Ich frage mich ob es eine einfache Möglichkeit gibt die Bezahlarten in Abhängigkeit der Versandart zu setzen. Es geht darum, dass man ja um rechtlich sicher zu sein eine Selbstabholung anbieten muss wir hier vor Ort aber keine Möglichkeit habe Kreditkartenzahlung zu akzeptieren. Daher würde ich diese Zahlart gerne ausschalten wenn jemand selbst abholen möchte. Ich weiß leider nur nicht wie man das bewerkstelligen könnte. Kann mir jemand einen Tipp geben?
    Danke sehr!


    Linkback: https://www.modified-shop.org/forum/index.php?topic=28626.0

    CojaX

    • Mitglied
    • Beiträge: 124
    Re: Zahlungsart abhängig von Versandart?
    Antwort #1 am: 11. Dezember 2013, 11:12:47

    zvenson

    • Frisch an Board
    • Beiträge: 69
    • Geschlecht:
    Re: Zahlungsart abhängig von Versandart?
    Antwort #2 am: 11. Dezember 2013, 11:54:18
    Hey Vielen Dank! Leider benötige ich genau die andere Ricthung, also dass gewissen Bezahlarten pro Versandart ausgeschlossen werden können und nicht gewissen Versandarten pro Bezahlart.

    Ist ja auch eigentlich komisch, denn die Versandart wird bei mir zuerst gewählt. So gesehen macht die andere richtung keinen Sinn, oder?

    Ist es denn nun in 1.6 integriert wie Tomcraft sagt denn auch ich finde keine Möglichkeit das einzustellen...

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Zahlungsart abhängig von Versandart?
    Antwort #3 am: 11. Dezember 2013, 12:07:40
    ... um rechtlich sicher zu sein eine Selbstabholung anbieten muss ...

    Wie das denn?

    zvenson

    • Frisch an Board
    • Beiträge: 69
    • Geschlecht:
    Re: Zahlungsart abhängig von Versandart?
    Antwort #4 am: 11. Dezember 2013, 12:26:56
    das sagten die Menschen von Trusted Shops. Man müsse das wohl anbieten...
    Ich finde es auch grundsätzlich gut wenn Menschen Ihre Waren direkt abholen können, aber das ist ja nicht das Thema

    webald

    • modified Team
    • Beiträge: 2.791
    Re: Zahlungsart abhängig von Versandart?
    Antwort #5 am: 11. Dezember 2013, 12:45:15
    Ich sehe aber das Problem nicht. Wenn die Kunden im Shop bestellen, Selbstabholung wählen und mit Kreditkarte zahlen, dann ist die Zahlung doch schon erfolgt und du mußt nur noch die Ware übergeben. Da mußt Du doch kein Gerät zur Kreditkartenzahlung haben.

    Wenn nun aber doch ein Kunde mal vor Ort mit Karte zahlen möchte, dann lass Ihn die Daten selber in den Shop eintippen und Du hast alle Zahlungarten, die Du auch im Shop anbietest.

    biersommelier

    • Fördermitglied
    • Beiträge: 1
    Re: Zahlungsart abhängig von Versandart?
    Antwort #6 am: 22. Januar 2014, 12:38:07
    nicht bös sein leute, aber auf bestimmte technische fragen hier und in anderen threads mit "sehe das problem nicht/wozu brauchtsn das" zu antworten ist entbehrlich. ein shopbetreiber wird gründe haben dafür, dass sein unternehmen bestimmte funktionen braucht, und das gilt auch für andere die das lesen und sich brauchbare lösungvorschläge erhoffen. auch diese hier angefragte funktion ist mehr als sinnvoll, wird in vielen betrieben notwendig sein und hat dazu vor jahren schon ein gewisser
    Code: PHP  [Auswählen]
    // Hendrik - 15.07.2010 - exlusion config for shipping modules
    ein snippet geschrieben und ich meine auch, hier veröffentlicht. bin selbst grad am modified1.06 update, habe die halbe nacht verbracht es zu suchen weil auch ich seinerzeit den programmiererfehler no1 begangen habe: nicht selbst dokumentiert. kann es sein, dass mit der seinerzeitigen forenumstellung gutes altwissen verloren ging oder hab ich das von wo anders?
    egal, meine alte shopversion archäologisch untersucht (textsuche alle files:-), und die lösung herausextrahiert. frage noch an das entwicklerteam: meinem bescheidenem verständnis nach ist dieses snippet wirklich elegant und sauber. könnte man es nicht zum standard in modified machen? angekündigt war diese funktion doch mal, glaub ich. genug geschwafelt, hier die lösung von "hendrik":

    =======================

    IM SHOPADMIN einstellen, dass eine bezahlart im checkout nicht angeboten wird wenn kunde davor bestimmte versandarten gewählt hat, hier am beispiel "Nachnahme" (cod):

    im file /shop/includes/modules/payment/cod.php

    1. Schritt: in der function update_status() suchen:

    Code: PHP  [Auswählen]
                    if ($_SESSION['shipping']['id'] == 'selfpickup_selfpickup') {
                            $this->enabled = false;
                    }

    Dieser code ist bereits eine hart codierte, also vom shop vorgegebene ausschließung dieser bezahlart für den fall "selbstabholung". der wird nun ersetzt mit

    Code: PHP  [Auswählen]
                 // BOF - Hendrik - 15.07.2010 - exlusion config for shipping modules  
                if( MODULE_PAYMENT_COD_NEG_SHIPPING != '' ) {
                  $neg_shpmod_arr = explode(',',MODULE_PAYMENT_COD_NEG_SHIPPING);
                  foreach( $neg_shpmod_arr as $neg_shpmod ) {
                    $nd=$neg_shpmod.'_'.$neg_shpmod;
                    if( $_SESSION['shipping']['id']==$nd || $_SESSION['shipping']['id']==$neg_shpmod ) {  
                      $this->enabled = false;
                      break;
                    }
                  }
                }  
             
            //    if ($_SESSION['shipping']['id'] == 'selfpickup_selfpickup') {
            //      $this->enabled = false;
            //    }
                 // EOF - Hendrik - 15.07.2010 - exlusion config for shipping modules

    2. Schritt: in der function install() vor der schließenden "}" einfügen:

    Code: PHP  [Auswählen]
                // Hendrik - 15.07.2010 - exlusion config for shipping modules
                xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_COD_NEG_SHIPPING', 'selfpickup', '6', '0', now())");
     

    Diese Zeile bewirkt den richtigen Datenbankeintrag für das Backend. Daher muss die bezahlart nach ende dieser arbeiten deinstalliert und wieder installiert werden. die technisch versierten können aus diesem codestück aber auch das SQL-statement herauskopieren und direkt mit dem richtigen tabellenanamen z.b. in phpMyAdmin absetzen.

    3. Schritt: in der function keys() vor der schließenden "}" die beiden schlusszeichen ");" (klammer+strichpunkt) ersetzen mit

    Code: PHP  [Auswählen]
    , 'MODULE_PAYMENT_COD_NEG_SHIPPING'         );       // Hendrik - 15.07.2010 - exlusion config for shipping modules

    Achtung, hier wirklich sauber arbeiten, auch geübten programmieren passieren hier abstürze, weil einfach mal ein beistrich vergessen wird: es wird einem array ein weiteres element hinzugefügt, also beginnt dieses snippet mit einen beistrich, dann dem neuen variablennamen, das array wird wieder mit ); geschlossen, dann folgt der urheberkommentar.

    technik fertig, jetzt noch die sprachsteuerung:

    4. Schritt: im file /shop/lang/german/modules/payment/cod.php vor dem programmende (das sind die zeichen "?>") einfügen

    Code: PHP  [Auswählen]
    // Hendrik - 15.07.2010 - exlusion config for shipping modules
    define('MODULE_PAYMENT_COD_NEG_SHIPPING_TITLE', 'Ausschluß bei Versandmodulen');
    define('MODULE_PAYMENT_COD_NEG_SHIPPING_DESC', 'Dieses Zahlungsmodul deaktivieren wenn Versandmodul gewählt (Komma separierte Liste)');

    5. Schritt das ganze für englisch: im file /shop/lang/english/modules/payment/cod.php vor dem programmende (das sind die zeichen "?>") einfügen

    Code: PHP  [Auswählen]
    // Hendrik - 15.07.2010 - exlusion config for shipping modules
    define('MODULE_PAYMENT_COD_NEG_SHIPPING_TITLE', 'Exclusion in case of shipping');
    define('MODULE_PAYMENT_COD_NEG_SHIPPING_DESC', 'deactivate this payment if one of these shippingtypes are selected (list separated by commas)');

    usw. mit jeder sprache die es sonst noch braucht. fertig.

    ========================

    Im Shop-Admin (Backend)  können jetzt als Liste mit "," getrennt alle Versandarten eingegeben werden, für die diese Bezahlmethode nicht angeboten wird, siehe screenshot:

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    im beispiel wird die bezahlart "barzahlung" für die versandarten österreichische Post (ap), versand nach zonen (zones) und GLS (gls) ausgeschlossen. wird also in meinem fall nur noch bei selbstabholung angezeigt. es müssen die modulnamen der versandarten eingegeben werden (siehe spalte "Modulname (für internen Gebrauch)" im shopadmin.

    hab das mit cod (nachname) und cash (barzahlung) im modified1.06 erfolgreich implementiert. sollte im prinzip mit allen bezahlarten gehen, man muss nur im jeweiligen modul-file schritt 1-3 sinngemäß nachvollziehen, es könnte aber bei komplexeren modulen (kreditkarten) kniffliger sein, den einhängepunkt (=schritt 1) zu finden (ob das gewährleistungsfolgen des payment-providers haben kann, betrachte ich hier nicht).

    [EDIT Tomcraft 01.12.2014: Beitrag leserlich formatiert.]

    demoncleaner

    • Fördermitglied
    • Beiträge: 482
    Re: Zahlungsart abhängig von Versandart?
    Antwort #7 am: 09. Mai 2014, 16:00:00
    Super Umbau. Danke dir fürs posten bzw. dem Ersteller fürs Programmieren. Hatte erst nicht ganz verstanden, dass man das für die jeweilige Bezahlvariante einrichten muss. Also wenn man z.B. auf Rechnung für selfpickup ausschließen will, dann einfach genau die selben Schritte in der invoice.php statt cod.php durchführen. Evtl. hab ich auch nur zu flüchtig quergelesen. Also... beide Daumen hoch und es funktioniert prima in 1.06

    Barcelo

    • Mitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Zahlungsart abhängig von Versandart?
    Antwort #8 am: 01. Dezember 2014, 16:14:54
    @biersommelier
    Vielen Dank Dir für die Erstellung der Anleitung & Hendrik für die Programmierung - perfekt!
    Genau danach hatte ich gesucht (in meinem Fall für MONEYORDER).

    Wäre doch super, wenn das in einer der nächsten Releases implementiert wäre. Ist meiner Meinung nach eine absolut hilfreiche Funktion.

     :thx:

    Barcelo

    • Mitglied
    • Beiträge: 103
    • Geschlecht:
    Re: Zahlungsart abhängig von Versandart?
    Antwort #9 am: 01. Dezember 2014, 17:29:01
    Irgendwie will das bei mir mit MONEYORDER & DHL (als DHL Express Modul genutzt -> DHL MDX) nicht so recht funktionieren (DP funktioniert).

    Momentan tappe ich im Dunkel... da ich nicht weiß, wie "DHL MDX" in die Session geschrieben wird.

    Meine moneyorder.php sieht wie folgt aus:
    Code: PHP  [Auswählen]
    <?php

    /* -----------------------------------------------------------------------------------------
       $Id: moneyorder.php 998 2005-07-07 14:18:20Z mz $  

       XT-Commerce - community made shopping
       http://www.(( Wir dulden keine kommerziellen Werbelinks - Bitte Forenregeln beachten! ))

       Copyright (c) 2003 XT-Commerce
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
       (c) 2002-2003 osCommerce(moneyorder.php,v 1.10 2003/01/29); www.oscommerce.com
       (c) 2003      nextcommerce (moneyorder.php,v 1.7 2003/08/24); www.nextcommerce.org

       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    class moneyorder {
            var $code, $title, $description, $enabled;

            function moneyorder() {
                    global $order;

                    $this->code = 'moneyorder';
                    $this->title = MODULE_PAYMENT_MONEYORDER_TEXT_TITLE;
                    $this->description = MODULE_PAYMENT_MONEYORDER_TEXT_DESCRIPTION;
                    $this->sort_order = MODULE_PAYMENT_MONEYORDER_SORT_ORDER;
                    $this->enabled = ((MODULE_PAYMENT_MONEYORDER_STATUS == 'True') ? true : false);
                    $this->info = MODULE_PAYMENT_MONEYORDER_TEXT_INFO;
                    if ((int) MODULE_PAYMENT_MONEYORDER_ORDER_STATUS_ID > 0) {
                            $this->order_status = MODULE_PAYMENT_MONEYORDER_ORDER_STATUS_ID;
                    }

                    if (is_object($order))
                            $this->update_status();

                    $this->email_footer = MODULE_PAYMENT_MONEYORDER_TEXT_EMAIL_FOOTER;
            }

            function update_status() {
                    global $order;

    // BOF AUSSCHLUSS BEI BESTIMMTEN VERSANDMODULEN
                if( MODULE_PAYMENT_MONEYORDER_NEG_SHIPPING != '' ) {
                  $neg_shpmod_arr = explode(',',MODULE_PAYMENT_MONEYORDER_NEG_SHIPPING);
                  foreach( $neg_shpmod_arr as $neg_shpmod ) {
                    $nd=$neg_shpmod.'_'.$neg_shpmod;
                    if( $_SESSION['shipping']['id']==$nd || $_SESSION['shipping']['id']==$neg_shpmod ) {  
                      $this->enabled = false;
                      break;
                    }
                  }
                }
    // EOF AUSSCHLUSS BEI BESTIMMTEN VERSANDMODULEN

                    if (($this->enabled == true) && ((int) MODULE_PAYMENT_MONEYORDER_ZONE > 0)) {
                            $check_flag = false;
                            $check_query = xtc_db_query("select zone_id from ".TABLE_ZONES_TO_GEO_ZONES." where geo_zone_id = '".MODULE_PAYMENT_MONEYORDER_ZONE."' and zone_country_id = '".$order->billing['country']['id']."' order by zone_id");
                            while ($check = xtc_db_fetch_array($check_query)) {
                                    if ($check['zone_id'] < 1) {
                                            $check_flag = true;
                                            break;
                                    }
                                    elseif ($check['zone_id'] == $order->billing['zone_id']) {
                                            $check_flag = true;
                                            break;
                                    }
                            }

                            if ($check_flag == false) {
                                    $this->enabled = false;
                            }
                    }
            }

            function javascript_validation() {
                    return false;
            }

            function selection() {
                    return array ('id' => $this->code, 'module' => $this->title, 'description' => $this->info);
            }

            function pre_confirmation_check() {
                    return false;
            }

            function confirmation() {
                    return array ('title' => MODULE_PAYMENT_MONEYORDER_TEXT_DESCRIPTION);
            }

            function process_button() {
                    return false;
            }

            function before_process() {
                    return false;
            }

            function after_process() {
                    global $insert_id;
                    if ($this->order_status)
                            xtc_db_query("UPDATE ".TABLE_ORDERS." SET orders_status='".$this->order_status."' WHERE orders_id='".$insert_id."'");

            }

            function get_error() {
                    return false;
            }

            function check() {
                    if (!isset ($this->_check)) {
                            $check_query = xtc_db_query("select configuration_value from ".TABLE_CONFIGURATION." where configuration_key = 'MODULE_PAYMENT_MONEYORDER_STATUS'");
                            $this->_check = xtc_db_num_rows($check_query);
                    }
                    return $this->_check;
            }

            function install() {
                    xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, set_function, date_added) values ('MODULE_PAYMENT_MONEYORDER_STATUS', 'True', '6', '1', 'xtc_cfg_select_option(array(\'True\', \'False\'), ', now());");
                    xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_MONEYORDER_ALLOWED', '',   '6', '0', now())");
                    xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_MONEYORDER_PAYTO', '', '6', '1', now());");
                    xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_MONEYORDER_SORT_ORDER', '0', '6', '0', now())");
                    xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, use_function, set_function, date_added) values ('MODULE_PAYMENT_MONEYORDER_ZONE', '0',  '6', '2', 'xtc_get_zone_class_title', 'xtc_cfg_pull_down_zone_classes(', now())");
                    xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, set_function, use_function, date_added) values ('MODULE_PAYMENT_MONEYORDER_ORDER_STATUS_ID', '0', '6', '0', 'xtc_cfg_pull_down_order_statuses(', 'xtc_get_order_status_name', now())");
    // BOF AUSSCHLUSS BEI BESTIMMTEN VERSANDMODULEN
                    xtc_db_query("insert into ".TABLE_CONFIGURATION." ( configuration_key, configuration_value,  configuration_group_id, sort_order, date_added) values ('MODULE_PAYMENT_MONEYORDER_NEG_SHIPPING', 'dhl', '6', '0', now())");
    // EOF AUSSCHLUSS BEI BESTIMMTEN VERSANDMODULEN
            }

            function remove() {
                    xtc_db_query("delete from ".TABLE_CONFIGURATION." where configuration_key in ('".implode("', '", $this->keys())."')");
            }

            function keys() {
    // BOF AUSSCHLUSS BEI BESTIMMTEN VERSANDMODULEN
    //              return array ('MODULE_PAYMENT_MONEYORDER_STATUS', 'MODULE_PAYMENT_MONEYORDER_ALLOWED', 'MODULE_PAYMENT_MONEYORDER_ZONE', 'MODULE_PAYMENT_MONEYORDER_ORDER_STATUS_ID', 'MODULE_PAYMENT_MONEYORDER_SORT_ORDER', 'MODULE_PAYMENT_MONEYORDER_PAYTO');
                    return array ('MODULE_PAYMENT_MONEYORDER_STATUS', 'MODULE_PAYMENT_MONEYORDER_ALLOWED', 'MODULE_PAYMENT_MONEYORDER_ZONE', 'MODULE_PAYMENT_MONEYORDER_ORDER_STATUS_ID', 'MODULE_PAYMENT_MONEYORDER_SORT_ORDER', 'MODULE_PAYMENT_MONEYORDER_PAYTO', 'MODULE_PAYMENT_MONEYORDER_NEG_SHIPPING');
    // EOF AUSSCHLUSS BEI BESTIMMTEN VERSANDMODULEN
            }
    }
    ?>
     

    EDIT: Hat sich erledigt - habe den Fehler eben gefunden!

    Der Radio-Button hat's im Firebug verraten  :idea:

    dhl_MDX muss dann eingetragen werden.

    Angeal

    • Fördermitglied
    • Beiträge: 411
    • Geschlecht:
    Re: Zahlungsart abhängig von Versandart?
    Antwort #10 am: 19. Dezember 2014, 17:26:01
    Das hier wäre etwas das ich mir noch in der Version 2.0 für alle Zahlungsmodule wünsche. Im neuen banktransfer Modul ist das ja bereits erhalten.

    Wäre echt eine Errungenschaft :-)
    0 Antworten
    1114 Aufrufe
    10. September 2015, 10:29:04 von Cookie
    6 Antworten
    2274 Aufrufe
    09. Juli 2017, 11:40:47 von michaelEberl
    2 Antworten
    2439 Aufrufe
    19. Januar 2014, 13:08:54 von Bicorna
               
    anything