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: Freitext Modul funktioniert nicht mit Sofortüberweisung aber mit VK & PayPal

    akosmowicz

    • Neu im Forum
    • Beiträge: 3
    Hallo,

    ich habe bei meinem Shop v1.06 ein Problem mit dem Freitext-Modul.
    Leider ist es schon einige Zeit her, dass ich die Erweiterung installiert habe, daher kann ich die Quelle nicht genau nennen, wohl jedoch die Dateien, die dafür verändert wurden.

    Nun ist es so, dass Bestellungen mit Freitextfeldern bei PayPal und Vorkasse korrekt abgewickelt werden,
    bei Zahlung mit Sofortüberweisung jedoch nicht. Da erscheint dann einfach TEXTFELD in der Bestellung.

    Ich selber bin PHP-Entwickler und sollte eigentlich die Lösung selber finden können, jedoch habe ich mit dem Modified-Shop nur sehr wenig Erfahrung.

    Daher meine Frage an Euch, liebe Community, wo kann ich anfangen das ganze zu debuggen, bzw. was ist Eure Einschätzung in solch einem Fall?

    Anbei einmal ein Listing aus der checkout-process.php (mit ein wenig Code vor- und nach der Textfeld-Stelle):
    Bei mir ab Zeile 365.

    Code: PHP  [Auswählen]
        if (isset ($order->products[$i]['attributes'])) {
          $attributes_exist = '1';
          for ($j = 0, $n2 = sizeof($order->products[$i]['attributes']); $j < $n2; $j ++) {
            $left_join_downloads = $add_products_attributes = '';
            if (DOWNLOAD_ENABLED == 'true') {
              $left_join_downloads = "LEFT JOIN ".TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD." pad ON pa.products_attributes_id=pad.products_attributes_id";
              $add_products_attributes = 'pad.products_attributes_maxdays,
                                          pad.products_attributes_maxcount,
                                          pad.products_attributes_filename,'
    ;
            }

            // update attribute stock
            xtc_db_query("UPDATE ".TABLE_PRODUCTS_ATTRIBUTES."
                             SET attributes_stock=attributes_stock - '"
    .$order->products[$i]['qty']."'
                           WHERE products_id='"
    .$order->products[$i]['id']."'
                             AND options_values_id='"
    .$order->products[$i]['attributes'][$j]['value_id']."'
                             AND options_id='"
    .$order->products[$i]['attributes'][$j]['option_id']."'
                           "
    );

            $attributes_values = $main->getAttributes( $order->products[$i]['id'],
                                                       $order->products[$i]['attributes'][$j]['option_id'],
                                                       $order->products[$i]['attributes'][$j]['value_id'],
                                                       $add_products_attributes,
                                                       $left_join_downloads
                                                      );

            // BOF TEXTFELD
            $options_values = trim($attributes_values['products_options_values_name']);
            if($attributes_values['products_options_values_name'] == 'TEXTFELD'){
                $value = $order->products[$i]['attributes'][$j]['value_id'];
                $options_values = trim($_SESSION['cart_textfeld'. $order->products[$i]['id']][$value]);
                unset ($_SESSION['cart_textfeld'. $order->products[$i]['id']][$value]); //Fix v.1.00c
            }

            if ($options_values != '') {
                $sql_data_array = array (
                    'orders_id' => $insert_id,
                    'orders_products_id' => $order_products_id,
                    'products_options' => $attributes_values['products_options_name'],
                    'products_options_values' => $options_values,
                    'options_values_price' => $attributes_values['options_values_price'],
                    'price_prefix' => $attributes_values['price_prefix']);
                xtc_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);
            }          
            // EOF TEXTFELD

            $sql_data_array = array ('orders_id' => $insert_id,
                                     'orders_products_id' => $order_products_id,
                                     'products_options' => $attributes_values['products_options_name'],
                                     'products_options_values' => $attributes_values['products_options_values_name'],
                                     'options_values_price' => $attributes_values['options_values_price'],
                                     'price_prefix' => $attributes_values['price_prefix'],
                                     'orders_products_options_id' => $order->products[$i]['attributes'][$j]['option_id'],
                                     'orders_products_options_values_id' => $order->products[$i]['attributes'][$j]['value_id']
                                    );
        //    xtc_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

            if ((DOWNLOAD_ENABLED == 'true') && isset ($attributes_values['products_attributes_filename']) && xtc_not_null($attributes_values['products_attributes_filename'])) {
              $sql_data_array = array ('orders_id' => $insert_id,
                                       'orders_products_id' => $order_products_id,
                                       'orders_products_filename' => $attributes_values['products_attributes_filename'],
                                       'download_maxdays' => $attributes_values['products_attributes_maxdays'],
                                       'download_count' => $attributes_values['products_attributes_maxcount']
                                      );
        //      xtc_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
            }
          }

        }
        //------insert customer choosen option eof ----
        $total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']);
        $total_tax += xtc_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty'];
        $total_cost += $total_products_price;

      }

    Meine Frage ist auch, warum PayPal und Vorkasse funktionieren, und was am programmatischen Ablauf bei Sofortüberweisung anders ist, sodass das überhaupt so vorkommen kann.

    Was für Informationen braucht Ihr noch?

    Danke für Eure Unterstützung,
    Andreas

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

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    welches paypal Modul? In der Programmierung und im Ablauf ist ein erheblicher Unterschied zwischen den Modulen.

    akosmowicz

    • Neu im Forum
    • Beiträge: 3
    Hallo Bonsai,

    ich kann mir vorstellen, dass das ganze nicht standardisiert abläuft.
    Daher ja auch der Fehler...

    Ich nutze also die Module

    1) EU Standardüberweisung (eustandardtransfer)
    2) PayPal Kaufabwicklung (paypal)
    3) sofort_sofortüberweisung

    bei 1) und 2) funktioniert mein Freitextfeld wie gewohnt, bei Einsatz von Modul 3) nicht.

    Was meinst Du, an welcher Stelle könnte ich nachsehen, bzw. wie genau läuft der Zahlungsabwicklungsprozess? Kennst Du die Unterschiede von Modul 1, 2 und 3?

    akosmowicz

    • Neu im Forum
    • Beiträge: 3
    So,

    ich habe das Problem selber gelöst und ich wundere mich, warum ich der erste bin, dem dieser Bug auffällt (oder bin ich es gar nicht)?

    Das Problem ist, dass in callback/sofort/resources/scripts/modified_1.06_sofortOrderhandling.php eine redundante Methode existiert, die eine Bestellung in die Datenbank schreibt:

    Code: PHP  [Auswählen]
    /**
             * Use $_SESSION to insert the order into the shop-db --- $_SESSION must contain all order-data! $GLOBALS must be set with all needed vars!
             * incl. attributes and stockupdate
             * @return array with orderId and orderProductsIds
             */

            public function insertOrderIntoShop() {
    ...
    }

    Demzurfolge muss diese Funktion beim Nutzen der Zahlungsmethode sofort_sofortueberweisung in Kombination mit der Textfelderweiterung genau diese Funktion angepasst werden:

    Suche nach:

    Code: PHP  [Auswählen]
    $sql_data_array = array ('orders_id' => $insert_id, 'orders_products_id' => $order_products_id, 'products_options' => $attributes_values['products_options_name'], 'products_options_values' => $attributes_values['products_options_values_name'], 'options_values_price' => $attributes_values['options_values_price'], 'price_prefix' => $attributes_values['price_prefix']);
    xtc_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

    Etwa Zeile 219

    Ersetzen mit:

    Code: PHP  [Auswählen]
                        // BOF TEXTFELD
                        $options_values = trim($attributes_values['products_options_values_name']);
                        if($attributes_values['products_options_values_name'] == 'TEXTFELD'){
                            $value = $order->products[$i]['attributes'][$j]['value_id'];
                            $options_values = trim($_SESSION['cart_textfeld'. $order->products[$i]['id']][$value]);
                            unset ($_SESSION['cart_textfeld'. $order->products[$i]['id']][$value]); //Fix v.1.00c
                        }
               
                        if ($options_values != '') {
                            $sql_data_array = array (
                                'orders_id' => $insert_id,
                                'orders_products_id' => $order_products_id,
                                'products_options' => $attributes_values['products_options_name'],
                                'products_options_values' => $options_values,
                                'options_values_price' => $attributes_values['options_values_price'],
                                'price_prefix' => $attributes_values['price_prefix']);
                            xtc_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);
                        }          
                        // EOF TEXTFELD

    Dann klappt alles reibungslos.

    web28

    • modified Team
    • Beiträge: 9.404
    Hallo akosmowicz,

    danke für den Hinweis.

    Der Einbaucode kann aber vereinfacht werden:

    Suche nach
    Code: PHP  [Auswählen]
    xtc_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

    Ersetzen mit

    Code: PHP  [Auswählen]
    // BOF TEXTFELD
              if ($attributes_values['products_options_values_name'] == 'TEXTFELD') {
                $value = $order->products[$i]['attributes'][$j]['value_id'];
                $sql_data_array['products_options_values'] = trim($_SESSION['cart_textfeld'. $order->products[$i]['id']][$value]);
                unset ($_SESSION['cart_textfeld'. $order->products[$i]['id']][$value]);
              }
                                            // EOF TEXTFELD
                                           
                                            xtc_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);

    Gruss Web28
    9 Antworten
    6612 Aufrufe
    23. September 2013, 10:12:26 von hansen626
    4 Antworten
    5899 Aufrufe
    24. August 2013, 18:17:31 von kaisa
               
    anything