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: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung

    longchuan

    • Viel Schreiber
    • Beiträge: 640
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #15 am: 27. Juli 2016, 19:02:35
    Leider beides nicht wahrscheinlich mach ich was falsch

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #16 am: 28. Juli 2016, 17:59:12
    Bei einer kleinen Änderung in der Datei wird nun der Girocode von der Volksbank App erkannt.
    Zeile 59
    Code: PHP  [Auswählen]
    $codeContents .= '002' . "\n";
    ändern in
    Code: PHP  [Auswählen]
    $codeContents .= '001' . "\n";
    Achtung, dann ist die BIC nicht mehr optional, sondern muss eingetragen werden, was ja auch kein Problem ist.
    Ob das an der Volksbank App gelegen hat oder generell so ist, kann ich leider nicht sagen.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #17 am: 30. Juli 2016, 12:56:48
    Hallo viol,

    ja das ist richtig, wenn man die GiroCode Version 001 angibt muss zwingend ein BIC mit übergeben werden, deshalb habe ich auch 002 vor ausgewählt.

    Ich habe mittlerweile festgestellt, dass im GiroCode Format noch Fehler sind, konkret die letzte Zeile darf nicht leer sein und auch keinen Separator (LF "\n") enthalten, das könnte möglicherweise auch der Grund sein, weshalb deine Volksbank App den GiroCode in der Version 002 nicht lesen kann.

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #18 am: 30. Juli 2016, 13:06:46
    Hallo viol,

    habe nun ein neues Skript, siehe ZIP-Anhang, sowie eine Einbauanleitung zusammengestellt, bei diesem Skript wird zusammen mit der Einbauanleitung der GiroCode nun ausser in die E-Mail der Bestellbestätigung auch noch in die Druckansicht und im Admin in den Rechnungsdruck der Bestellung eingefügt.

    Einbauanleitung:

    1)
    Das Skript 'includes/extra/send_order/data/moneyorder.php' entfernen (wichtig, entfernen nicht einfach nur umbenennen).

    2)
    Das SmartyFunktionsPlugin 'function.girocode_generator.php' aus dem angeängten ZIP extrahieren und in den Ordner 'templates/tpl_modified/smarty/' kopieren.

    3)
    Im 'templates/tpl_modified/admin/print_order.html' folgenden Code
    Code: XML  [Auswählen]
    <div class="print_small" style="font-size:11px; line-height:15px;">{$ADDRESS_LARGE}</div>
    mit diesem ersetzen
    Code: XML  [Auswählen]
    <div class="print_small" style="font-size:11px; line-height:15px;">{$ADDRESS_LARGE}<br />{girocode_generator}<br /></div>

    Im 'templates/tpl_modified/module/print_order.html' folgenden Code
    Code: XML  [Auswählen]
    <strong>{#date#}</strong> {$DATE}
    mit diesem ersetzen
    Code: XML  [Auswählen]
    <strong>{#date#}</strong> {$DATE}<br />{girocode_generator}<br />

    Im 'templates/tpl_modified/mail/german/order_mail.html' folgenden Code
    Code: XML  [Auswählen]
    <font size="2" face="Tahoma, Verdana, sans-serif">{girocode_generator}{$PAYMENT_INFO_HTML}</font>
    mit diesem ersetzen
    Code: XML  [Auswählen]
    <font size="2" face="Tahoma, Verdana, sans-serif"><br />{girocode_generator}<br /><br />{$PAYMENT_INFO_HTML}</font>
    obige Anweisung bei weiteren Sprachen wiederholen

    4)
    In 'templates/tpl_modified/smarty/function.girocode_generator.php' zwischen
    Code: PHP  [Auswählen]
    // ANFANG KONFIGURATION ///////
    und
    Code: PHP  [Auswählen]
    // ENDE KONFIGURATION ///////
    die korrekten Daten für 'IBAN_NUMBER', 'NAME_OF_THE_BENEFICIARY' und wenn nötig für 'BIC_NUMBER'  eintragen.

    5)
    Testen!

    Gruss
    Hanspeter

    [EDIT Tomcraft 12.10.2021: Anleitung in Beitrag 1 verlinkt.]

    longchuan

    • Viel Schreiber
    • Beiträge: 640
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #19 am: 30. Juli 2016, 13:10:38
    das klappt bei mir 1.06 leider nicht.
    ($order->info['payment_method'] == 'moneyorder' or 'eustandardtransfer') {
    woran könnte es liegen
    danke

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #20 am: 30. Juli 2016, 13:39:50
    [...]
    es funktioniert ja super, nur wird in z.B. Outlook der Girocode in einer Textmail als Text dargestellt, in HTML erscheint er nur als kleines rotes Kreuz in einem Rahmen und es erscheint oben in Outlook der Hinweis, das bei Anzeigeproblemen die Darstellung im Browser empfohlen wird, wo der Girocode auch tadellos angezeigt wird. Lässt sich das überhaupt beeinflussen oder liegt das am jeweiligen Emailprogramm?
    [...]

    Es ist so, der GiroCode wird als Bild in den HTML-Code der E-Mail eingebettet, dies setzt volle HTML-Unterstützung des Emailprogramms voraus.

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #21 am: 30. Juli 2016, 13:43:03
    [...]
    Wäre es auch möglich oder sinnvoll, den Girocode nach dem Checkout in der Druckversion der Bestellung (print_order)schon anzuzeigen?
    [...]

    Ja finde ich sinnvoll und habe es in Antwort #18 umgesetzt.

    Gruss
    Hanspeter

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #22 am: 31. Juli 2016, 10:01:35
    Hallo Hanspeter,

    es funktioniert!
    Ich muss allerdings nach wie vor, die 001 auswählen, damit der QR Code von meiner VOBA App gelesen werden kann, das ist ja aber kein Problem.
    Ich habe ein bisschen im Netz "geforscht". Offenbar ist es gerade die eingebettete png-Datei in Mailprogrammen problematisch. Könnte man die Girocode nicht versuchsweise in .gif oder .jpeg ausgeben?
    Aber ansonsten ein sehr sinnvolle Erweiterung!
    Besten Dank nochmal!
    @Torsten: wäre das nicht was, um es als Standard in Modified zu integrieren?

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #23 am: 31. Juli 2016, 11:37:44
    [...]
    Ich habe ein bisschen im Netz "geforscht". Offenbar ist es gerade die eingebettete png-Datei in Mailprogrammen problematisch. Könnte man die Girocode nicht versuchsweise in .gif oder .jpeg ausgeben?
    [...]

    Kannst Du folgendermassen testen ob der GiroCode in z.B. Outlook als JPG angezeigt wird, persönlich erwarte ich zwar keine Änderung, aber man weiss ja nie.

    In 'templates/tpl_modified/smarty/function.girocode_generator.php' ganz am Ende des Skripts folgenden Code

    Code: PHP  [Auswählen]
    // ANFANG GIROCODE ERZEUGUNG  UND ZUWEISUNG ////////////////////////////////////////////////////////////////////////////
        // GiroCode erzeugen und als PNG temporaer nach Vorgabe mit "QR_ECLEVEL_M" in Datei schreiben
        QRcode::png($codeContents, DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png', QR_ECLEVEL_M, $params['OUTER_FRAME_SIZE']);

        // Bild base64 codieren und der Variablen "$src_img_data_base64 "zuweisen    
        $src_img_data_base64 = 'data:image/png;base64,' . base64_encode(@file_get_contents(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png'));
         
        // Temporaere Bilddatei loeschen  
        @unlink(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png');
       
        // erzeugten GiroCode zurueckgeben
        return'<b>' . $params['GIROCODE_TEXT'] . '</b><br /><img src="' . $src_img_data_base64 . '" alt="" style="margin-top: 5px; border: 2px solid black; border-radius: 10px;" />';
    // ENDE GIROCODE ERZEUGUNG UND ZUWEISUNG ///////////////////////////////////////////////////////////////////////////////
     

    mit diesem ersetzen

    Code: PHP  [Auswählen]
    // ANFANG GIROCODE ERZEUGUNG  UND ZUWEISUNG ////////////////////////////////////////////////////////////////////////////
        // custom code rendering with GD2
        $tempDir = DIR_FS_LOG;
        $fileName = $order->info['orders_id'] . 'girocode.jpg';
        $outerFrame = 3;
        $pixelPerPoint = 2;
        $jpegQuality = 95;
       
        // generating frame
        $frame = QRcode::text($codeContents, false, QR_ECLEVEL_M);
       
        // rendering frame with GD2 (that should be function by real impl.!!!)
        $h = count($frame);
        $w = strlen($frame[0]);
       
        $imgW = $w + 2*$outerFrame;
        $imgH = $h + 2*$outerFrame;
       
        $base_image = imagecreate($imgW, $imgH);
       
        $col[0] = imagecolorallocate($base_image,255,255,255); // BG, white
        $col[1] = imagecolorallocate($base_image,0,0,0);     // FG, black

        imagefill($base_image, 0, 0, $col[0]);

        for($y=0; $y<$h; $y++) {
            for($x=0; $x<$w; $x++) {
                if ($frame[$y][$x] == '1') {
                    imagesetpixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]);
                }
            }
        }
       
        // saving to file
        $target_image = imagecreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint);
        imagecopyresized(
            $target_image,
            $base_image,
            0, 0, 0, 0,
            $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH
        );
        imagedestroy($base_image);
        imagejpeg($target_image, $tempDir.$fileName, $jpegQuality);
        imagedestroy($target_image);

        // Bild base64 codieren und der Variablen "$src_img_data_base64 "zuweisen    
        $src_img_data_base64 = 'data:image/jpg;base64,' . base64_encode(@file_get_contents(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.jpg'));
         
        // Temporaere Bilddatei loeschen  
        @unlink(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.jpg');
       
        // erzeugten GiroCode zurueckgeben
        return'<b>' . $params['GIROCODE_TEXT'] . '</b><br /><img src="' . $src_img_data_base64 . '" alt="" style="margin-top: 5px; border: 2px solid black; border-radius: 10px;" />';
    // ENDE GIROCODE ERZEUGUNG UND ZUWEISUNG ///////////////////////////////////////////////////////////////////////////////
     

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #24 am: 31. Juli 2016, 23:49:57
    Hallo Viol,

    denke nun habe ich doch noch eine Lösung für das E-Mail Problem gefunden.

    Folgendes kannst Du testen, ich hoffe das dann der GiroCode auch in Outlook angezeigt wird.

    In 'inc/xtc_php_mail.inc.php' ca, Zeile 190 nach folgendem Code

    Code: PHP  [Auswählen]
      // add attachments
      for( $i = 0, $n = count($attachments); $i < $n; $i++) {
        $mail->AddAttachment($attachments[$i]);
      }
     

    diesen Code einfügen

    Code: PHP  [Auswählen]
      // QR-Code (Girocode) einbinden
      if (!empty($GLOBALS['embedded_girocode'])) {
        $mail->addEmbeddedImage($GLOBALS['embedded_girocode'], 'girocode', '', 'base64', 'image/' . substr(strrchr($GLOBALS['embedded_girocode'], '.'), 1));
      }
     

    In 'templates/tpl_modified/smarty/function.girocode_generator.php' ganz am Ende des Skripts folgenden Code

    Code: PHP  [Auswählen]
    // ANFANG GIROCODE ERZEUGUNG  UND ZUWEISUNG ////////////////////////////////////////////////////////////////////////////
        // GiroCode erzeugen und als PNG temporaer nach Vorgabe mit "QR_ECLEVEL_M" in Datei schreiben
        QRcode::png($codeContents, DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png', QR_ECLEVEL_M, $params['OUTER_FRAME_SIZE']);

        // Bild base64 codieren und der Variablen "$src_img_data_base64 "zuweisen    
        $src_img_data_base64 = 'data:image/png;base64,' . base64_encode(@file_get_contents(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png'));
         
        // Temporaere Bilddatei loeschen  
        @unlink(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png');
       
        // erzeugten GiroCode zurueckgeben
        return'<b>' . $params['GIROCODE_TEXT'] . '</b><br /><img src="' . $src_img_data_base64 . '" alt="" style="margin-top: 5px; border: 2px solid black; border-radius: 10px;" />';
    // ENDE GIROCODE ERZEUGUNG UND ZUWEISUNG ///////////////////////////////////////////////////////////////////////////////
     

    mit diesem ersetzen

    Code: PHP  [Auswählen]
    // ANFANG GIROCODE ERZEUGUNG  UND ZUWEISUNG ////////////////////////////////////////////////////////////////////////////
        // GiroCode erzeugen und als PNG temporaer nach Vorgabe mit "QR_ECLEVEL_M" in Datei schreiben
        QRcode::png($codeContents, DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png', QR_ECLEVEL_M, $params['OUTER_FRAME_SIZE']);

        if (basename($_SERVER['PHP_SELF']) == FILENAME_CHECKOUT_PROCESS) {
          // Folgende Anweisungen werden ausgefuehrt wenn der GiroCode in einer E-Mail versandt wird
         
          // Bildpfad des erzeugten GiroCodes zuweisen, die Variable wird in inc/xtc_php_mail.inc.php verwendet
          $GLOBALS['embedded_girocode'] = DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png';
         
          // Temporaere Bilddatei zur Loeschung registrieren
          @register_shutdown_function('unlink', $GLOBALS['embedded_girocode']);
         
          // erzeugten html img Tag zurueckgeben
          return'<b>' . $params['GIROCODE_TEXT'] . '</b><br /><img class="girocode" src="cid:girocode" alt="" style="margin-top: 5px; border: 2px solid black; border-radius: 10px;" />';

        } else {
          // Folgende Anweisungen werden ausgefuehrt wenn der GiroCode in ein Dokument fuer den Druck eingefuegt wird

          // Bild base64 codieren und der Variablen "$src_img_data_base64 "zuweisen    
          $src_img_data_base64 = 'data:image/png;base64,' . base64_encode(@file_get_contents(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png'));
         
          // Temporaere Bilddatei loeschen  
          @unlink(DIR_FS_LOG . $order->info['orders_id'] . 'girocode.png');
       
          // erzeugten GiroCode zurueckgeben
          return'<b>' . $params['GIROCODE_TEXT'] . '</b><br /><img class="girocode" src="' . $src_img_data_base64 . '" alt="" style="margin-top: 5px; border: 2px solid black; border-radius: 10px;" />';

        }
    // ENDE GIROCODE ERZEUGUNG UND ZUWEISUNG ///////////////////////////////////////////////////////////////////////////////
     

    Erläuterung:
    Mit obiger Anpassung wird das GiroCode-Bild als Inline-Attachement der E-Mail mitgegeben und im HTML-Teil der E-Mail wird auf das Bild referenziert.

    Gruss
    Hanspeter

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #25 am: 01. August 2016, 12:57:27
    Lieber Hanspeter, du bist genial!

    Nun funktioniert es alles, wird auch in der Mail in Outlook angezeigt. Selbst in der Android Gmail-App wird die Datei zumindest als Anhang mitgeschickt.
    Herzlichen Dank für Deine Mühe und Hilfe (wieder einmal)

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #26 am: 29. Oktober 2020, 16:51:46
    Ich muss das nochmal hervorholen.

    Das Anzeigen des Girocodes funktioniert sehr gut. Ich habe ein Update auf die v2.0.5.1 rev 12725 gemacht und nun wird allerdings der Girocode auch bei PayPal Plus, wenn die Kunden Zahlung auf Rechnung(pay_upon_invoice) auswählen, in der Bestellbestätigung angezeigt, was natürlich kontraproduktiv ist, weil dort meine Kontoverbindung angezeigt ist.
    Es ist mir auch schleierhaft, warum das so ist.
    In der function.girocode_generator.php sind
    Code: PHP  [Auswählen]
    if ($order->info['payment_method'] == 'moneyorder' or 'eustandardtransfer' && $order->info['currency'] == 'EUR')
    angegeben. Hast Du, Hanspeter, evt. eine Idee, woran das liegen könnte?

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #27 am: 29. Oktober 2020, 22:06:18
    Hallo Viol,

    ich wundere mich über den geposteten Code, denn in der ZIP-Datei meiner Antwort #18 steht folgender Code drin,

    Code: PHP  [Auswählen]
    if ($order->info['payment_method'] == 'moneyorder' && $order->info['currency'] == 'EUR')

    und das die eingefügte Erweiterung funktioniert ist auch seltsam, denn eigentlich müsste diese z.B. so,

    Code: PHP  [Auswählen]
    if (($order->info['payment_method'] == 'moneyorder' || $order->info['payment_method'] == 'eustandardtransfer') && $order->info['currency'] == 'EUR')

    oder so,

    Code: PHP  [Auswählen]
    if (in_array($order->info['payment_method'], ['moneyorder', 'eustandardtransfer']) && $order->info['currency'] == 'EUR')

    aussehen.

    Gruss
    Hanspeter

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #28 am: 30. Oktober 2020, 13:01:57
    Hallo Hanspeter,

    herzlichen Dank für Deinen Hinweis.
    Ich hatte den Code (unwidersprochen) einige Seiten vorher gepostet und da er sowohl bei Vorkasse als auch bei EU Überweisung funktionierte, dachte ich, er sei ok so. (Laie eben)
    Ich habe das jetzt nach Deinem Vorschlag geändert und werde das beobachten.

    Viol

    • Fördermitglied
    • Beiträge: 2.209
    Re: ANLEITUNG: Ausgabe des Girocodes in der Bestellbestätigung
    Antwort #29 am: 14. Dezember 2020, 14:34:46
    Ich habe das nun beobachtet und den Code wie vergeschlagen, geändert.
    Es wird allerdings sowohl bei moneyorder als auch bei EU Standardtransfer der Betrag immer mit 0,-- in der Banking App angezeigt.
    Ich bin mir jetzt nicht sicher, ob das etwas mit der PHP Version 7.3.23 oder mit dem Update auf die v2.0.5.1 rev 12725 zu tun hat.
    Letzteres glaube ich allerdings nicht, da der Code bis zum 11.11. funkioniert hat und da hatte ich das Update schon gemacht.
    Kann es an der PHP Version liegen?
    Lese ich den Code mit einem "normalen" QR Code Scanner am Smartphone aus, wird auch der Betrag angezeigt, allerdings mit 4 Stellen hinter dem Komma. Könnte es sein, dass eine Banking-App damit überfordert ist, weil sie auf 2 Nachkommstellen eingestellt ist oder kann das doch am Update auf PHP 7.3.23 liegen?
    12 Antworten
    6481 Aufrufe
    04. Juli 2011, 18:41:34 von Sick
    5 Antworten
    4110 Aufrufe
    30. Juli 2013, 10:45:52 von Bernd Klimasch
    1 Antworten
    2629 Aufrufe
    06. Mai 2010, 20:54:18 von Tomcraft
    20 Antworten
    8374 Aufrufe
    31. Dezember 2009, 14:25:56 von Lkwjoe