Author Topic: Keine Bestellung trotz PayPal-Zahlung  (Read 1069 times)

Offline paulchen

  • Posts: 142
  • Gender: Male
    • PV-Steuer-Shop
Keine Bestellung trotz PayPal-Zahlung
« on: September 03, 2017, 07:51:36 PM »
Immer wieder einmal passiert vor allem bei Bestellungen, die per PayPal bezahlt werden (bei Zahlung per Sofort-Überweisungen kann ich mich nur an zwei solcher Vorfälle erinnern) Folgendes:

- Die Zahlung wird und per Paypal avisiert und auf unserem Konto gebucht.
- Der Versand der Nachricht über die Bestellung wird nicht abgeschickt und kommt weder bei Kunden noch bei uns an.
- In der Auftragsverwaltung von Bakery wird uns die Bestellung nicht angezeigt.

In der Datenbank mod_bakery_customer kann ich aber - wenn ich schnell genug auf die Zahlungs-Nachricht reagiere, feststellen
- dass der Datensatz zwar verhanden ist, aber nicht "aktiviert" ist - heißt: die Felder submitted, ststus und noch ein paar weitere stehen auf NULL.

Wenn ich diese Eintragungen anpasse, wird der Datensatz auch angezeigt.

Gibt es aber vor meinem Eingreifen  eine neue Bestellung, wird der unvollständige Datensatz mit der neuen Bestellung überschrieben und kann nicht mehr hergestellt werden.
Dann muss bei PayPal der Kunde über die Zahlungsnachricht von PayPal angeschrieben und um erneute Bestellung gebeten werden.
Bei Sofortüberweisung ist die Sache noch komplizierter, weil hier die Zahlungsnachricht die Mailadresse des Kunden nicht enthält.

Was kann der Grund für dieses doch immer wieder einmal auftretende Problem sein?
Ein Fehler des Kunden in der Bedienung? - Ich habe bei Testbestellungen nach Stellen geforscht, wo man Fehler machen kann, dort aber nichts gefunden. Ich konnte noch nie eine Testbestellung macxhen, die nicht angezeigt wurde  :|

Vielleicht lässt sich ja anhand der Ablaufunterbrechung feststellen, was da gelegentlich schief läuft?!

mfg
Paulchen

Offline jacobi22

  • Posts: 5891
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Keine Bestellung trotz PayPal-Zahlung
« Reply #1 on: September 04, 2017, 07:04:32 PM »
Paypal sendet normalerweise nach jeder Bezahlaktion eine positive Rückmeldung an den Shop inkl einer Seitenrückleitung, so das man vom Paypalbezahlfenster wieder zurück auf deine Seite kommt. Erst, wenn beides erfolgt ist, arbeitet deine Seite weiter und schreibt den Datensatz auf "bezahlt" um und verschickt im Anschluß dann die Meldung an dich.
Ich nutze zwar nirgendwo Bakery produktiv mit Paypal, habe aber im Prinzip das gleiche Problem mit nicht abgeschlossenen Transaktionen, wenn ich nach erfolgter Bezahlung nicht die Rückleitung zum Shop abwarte, sondern gleich nach Bezahlung das Fenster schließe oder die Seite wechsle. Ich muß also die Bezahlbestätigung des benutzten Shops abwarten, sonst gehts schief.
Bei einer schnellen Internetverbindung ist das in zwei Sekunden erledigt, wer aber langsam surft, brauch aber schon mal 5-6 Sekunden.
Vielleicht ist das der Schlüssel zum Problem.
Wer nicht will, findet Gründe, wer will, findet Wege.

Offline paulchen

  • Posts: 142
  • Gender: Male
    • PV-Steuer-Shop
Re: Keine Bestellung trotz PayPal-Zahlung
« Reply #2 on: September 05, 2017, 07:05:18 PM »
Hallo Uwe,

besten Dank für deine Antwort. Falls sie stimmt, würde das erklären, warum es bei eigentlich einwandfreier Funktion gelegentlich zu "Ausreißern" kommt.
Ich habe schnelles Internet, darum sind mir Pausen zwischen Zahlung und Rückleitung auf die Shop-Webseite bisher nie aufgefallen.

Ich frage mich jetzt natürlich, wie man es schaffen kann, die Leute davon abzuhalten, den Vorgang auch bei längerer Wartezeit vorzeitig abzubrechen. Eine Ergänzung auf der Seite mit den Zahlungsmethoden habe ich bereits über die entsprechende Language-Dateien der jeweiligen Zahlungsmethode angefügt (Anhang). Aber das ist so klein, dass es sicher keinem auffällt  (N)...
Für einen richtig dicken Hinweis unter dem Button der jeweiligen Zahlungsmethose habe ich die entsprechende Seite nicht gefunden.

Vielleicht gibt es ja noch die andere Möglichkeit, den Datensatz nicht rigoros überschreiben zu lassen, wenn dieser Fehler auftritt. Mit einer Anzeige als bestellt, aber nicht bezahlt - aber da stehen wahrscheinlich wiederum Datenschutzgründe dagegen, weil nicht klar ist, ob der Abbruch in voller Absicht oder aus Unwissenheit erfolgt ist   :-(.

Freundliche Grüße
Paulchen

Offline jacobi22

  • Posts: 5891
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Keine Bestellung trotz PayPal-Zahlung
« Reply #3 on: September 06, 2017, 12:34:11 AM »
Quote
Für einen richtig dicken Hinweis unter dem Button der jeweiligen Zahlungsmethose habe ich die entsprechende Seite nicht gefunden.

eine recht einfache Methode, die ich verwende
entweder ich suche nach einem bestimmten Textbaustein oder nach einer CSS-Klasse, die recht eindeutig ist. Als Beispiel die Auflistung der Zahlungsmethoden. Nur einmal pro Methode wird die CSS-Klasse mod_bakery_pay_h_f verwendet, sie definiert den Style der Überschrift, z.b. Vorauszahlung oder Rechnung. Ich weiß, die Ausgabe kann nur über Templates (htm, html, htt, twig) oder über PHP erfolgen, alle anderen Suchergebnisse wie Treffer in einer CSS-Datei kann ich ausklammern.
Angezeigt werden bei mir 7 Treffer für 7 definierte Zahlmethoden, jeweils in den Dateien getaway.php im Ordner jeder Zahlmethode (siehe hier). An Hand der Ordnernamen kann ich mir nun die gewünschte Ausgabe heraussuchen und entsprechend anpassen

Ähnlich die Suche zur Einbindung einer bestimmten Text-Ausgabe. In der Sprachdatei nach der Variable suchen und den definierten Namen (grün markiert) dafür merken bzw kopieren, z.b.
Quote
$MOD_BAKERY['TXT_AGREE'] = 'Ich akzeptiere die AGB von';
In einer zweiten Suche dann nach Verwendung dieser Variable in einer PHP-Datei suchen. Diese wird dort für das Template aufbereitet und oft in einem Array definiert, z.b. so
Code: [Select]
$tpl_so->set_var(array(
....
'TXT_AGREE' => $MOD_BAKERY['TXT_AGREE']
....
));

eine letzte Suche geht dann nach diesem Platzhalter TXT_AGREE. Er wird verwendet in der Datei err_aggree.htm (wenn die AGB-Kontrollbox nicht aktiviert wurde) und in der Datei view_pay_methods.php als Definition für den Platzhalter TAC_LINK, welcher dann in der Templatedatei title.htm benutzt wird.

Zu kompliziert??  :wink:

Back to the Problem ...
ich meine, man konnte auch bei Paypal in der eigentlichen Kaufabwicklung bzw dem Bezahlvorgang einen solchen Hinweis einbauen. Ich hatte das vor 4 oder 5 Jahren mal für eine Kundin gemacht, das Projekt aber später wg offenen Rechnungen beendet. Ob das heute noch möglich ist, weiß ich nicht. Schau ich mir aber die Bezahlvorgänge anderer Verkäufer an, muß das möglich sein.

Von Code her ( ich bin da eigentlich zu lange raus bei Bakery, weil keinen Kunden mit Shop) sollte der gesamte Paypal-Resultatsverarbeitungsvorgang über die Datei ipn.php laufen. Sie bekommt die Rückmeldung von Paypal und dabei auch den Payment_Status ($payment_status). Nach aktuellem Code wird ein Eintrag im Log gesetzt, wenn der DEBUG-Modus eingeschaltet ist und wenn dort nicht die Rückmeldung "Completed" ankommt und $error wird auf TRUE gesetzt

Ist kein Fehler vorhanden, wird der Zahlstatus in der Datenbank geändert. Dann verschickt die Datei view_confirmation die Mails und ändert den Status für submitted, damit wäre der Datensatz dann fix in der DB verankert.

Das Löschen nicht abgeschlossener Transaktionen erfolgt in der Datei view.php, ganz unten mit diesem Code

Code: [Select]
// ...then delete not submitted orders
$database->query("DELETE FROM ".TABLE_PREFIX."mod_bakery_customer WHERE order_id = '$outdated_order_id' AND submitted = 'no'");
$database->query("DELETE FROM ".TABLE_PREFIX."mod_bakery_order WHERE order_id = '$outdated_order_id'");

man könnte beide Zeilen natürlich mal eine Weile deaktivieren bzw auskommentieren, dann siehst du, wie oft wirklich Bestellungen versucht wurden. Sowie ein Artikel im Warenkorb liegt, wird ein Datensatz geschrieben, auch, wenn der Besucher am Ende die Seite schließt und weg ist. Sortieren müßte man dann von Hand. Ich vermute aber, das dies ein komplettes Chaos gibt, nicht nur in der Auflistung, auch in Bezug auf Rechnungs- und Bestellnummer.

Ich würde mir analog dem Muster in der ipn.php $debug oben mal auf TRUE setzen und mir einen Log setzen, der die Rückmeldungen von Paypal schreibt, also nicht erst loggen, wenn ein Fehler auftritt, sondern jede Transaktion, z.b. so

ipn.php nach Definition der POST-Variablen hinter Zeile 158
Code: [Select]
if ($debug) {
error_log(date('[Y-m-d H:i e] ').'Transaktionsprotokoll - ORDER-ID ist "'.$order_id.'". Payer-Email ist: "'.$payer_email.'". Status ist "'.$payment_status.'".PHP_EOL, 3, $log_file);
}

Damit weißt du, was nach erfolgter Zahlung zurück kommt, mußt aber auch regelmäßig rein schauen
Lt. Code gibt es solche Erfolgreich-Meldung ja im Log, ich weiß aber nicht, was da alles drin steht

Quote
Vielleicht gibt es ja noch die andere Möglichkeit, den Datensatz nicht rigoros überschreiben zu lassen, wenn dieser Fehler auftritt. Mit einer Anzeige als bestellt, aber nicht bezahlt - aber da stehen wahrscheinlich wiederum Datenschutzgründe dagegen, weil nicht klar ist, ob der Abbruch in voller Absicht oder aus Unwissenheit erfolgt ist

Wenn man genau weiß, was von Paypal zurück kommt, ist das sicher möglich, einen Status "offen" zu vergeben, analog dem Vorkasse-Kauf. Mich persönlich stört, das der komplette Vorgang dann weg ist, ohne dem Wissen, ob der Kunde nun bei Paypal war, aber nicht bezahlt hat, ob er zahlte, es aber zu einem Übermittlungsfehler kam usw
Dafür müßte man aber vorher umfangreich die Logs und den Code studieren und jede Menge testen und im Idealfall die auslösende Ursache kennen. Ich hab deswegen einige Dutzend Ebay-Käufe verhunzt, bis mir meine Frau Nachhilfe gegeben hat - auf Deutsch: es gab welche auf die Finger :-D
Ich kann es aber auch heute noch jederzeit zumindest bei ebay nachvollziehen.

DSL-Löcher gibt es ja noch jede Menge in Deutschland, gut, bei euch da unten nicht ganz zu viel. Mein Landkreis baut grad mit Förderung alle 32 eingemeindeten Dörfer auf 100.000er DSL, das gab es bisher nur in der Kernstadt, die Umgebung war Internetfreie Zone fürs Festnetz. Das 33. Dorf, nämlich meins, fehlt in der Ausbauliste. Wer also mal ISDN braucht, gibs hier noch ;-)
Wer nicht will, findet Gründe, wer will, findet Wege.

Offline paulchen

  • Posts: 142
  • Gender: Male
    • PV-Steuer-Shop
Re: Keine Bestellung trotz PayPal-Zahlung
« Reply #4 on: September 06, 2017, 08:00:43 PM »
Hallo Uwe,

whow, das muss ich erst einmal verdauen....

Die Hinweise zum Finden der entsprechenden Seite habe ich verstanden, da weiß ich jetzt, wie ich vorgehen muss, um bestimmte Stellen zu finden. Zum Suchen kann ich das Tool Notepad++ verwenden, wo man einen entsprechenden Pfad vorgeben kann.

An der ipn.php werde ich mit Sicherheit nichts verändern - das ist mir zu heiß.
Und die Möglichkeit, nicht abgeschlossene Transaktionen nicht zu löschen, ist wohl auch nicht das Gelbe vom Ei: Das betrifft ja nicht nur die missglückten PayPal-Zahlungen, sondern alle abgebrochenen Bestellungen - du hast sicher recht mit dem angesprochenen Chaos.

Die Möglichkeit zum Loggen von PayPal-Bestellungen schaue ich mir nochmal genauer an.

Deine Ausführungen bestärken mich in der Ansicht, dass es am einfachsten sein wird, den Kunden schon bei der Auswahl der Zahlungsmethode den Hinweis zu geben, dass er auf die Rückführung zu meiner Homepage warten soll, um den Bestellvorgang nicht vorzeitig abzubrechen.

Besten Dank, dass ich durch deine Antwort ein wenig hinter die Kulissen blicken durfte ;-).

mfg
Paulchen


Offline jacobi22

  • Posts: 5891
  • Gender: Male
  • Support also via PM or EMail
    • Jacobi22
Re: Keine Bestellung trotz PayPal-Zahlung
« Reply #5 on: September 06, 2017, 11:59:29 PM »
Na, um den DEBUG-Mode einzuschalten, mußt du da schon etwas an der ipn.php ändern, Zeile 33 in meiner derzeitigen Version

$debug    = false;       // Enable debug mode

ändern auf true

und dann mal ein paar Aktionen betrachten, was da in der Datei ipn.log drin steht
Wer nicht will, findet Gründe, wer will, findet Wege.