Webshop Bezahl Prozess mit PayPal

  • Hallo zusammen,


    ich habe seit längeren das Problem mit einem Bezahl Prozess bei meinem WebShop mit PayPal.

    Auf meiner Webseite habe ich für jeden Nutzer ein Guthaben System welches man per PayPal aufladen soll. Ich probiere es momentan mit der PayPal Sandbox aus diese Funktioniert ja per JavaScript Ich habe es bereits hinbekommen das ich auf einer "Mein Account" Seite Den Betrag den ich aufladen möchte eingeben kann und dieser an eine paypal.php Seite zum JavaScript Bereich in eine Variable "var preis" gespeichert wird der Bazahl Prozess funktioniert auch nur wenn der Abgeschlossen ich weiß ich nicht wie ich den Aufgeladen Betrag dem User in MySQL gut schreiben kann wenn ich das in die als PHP Code in den JavaScript Teil schreibe wird der PHP Code ausgeführt bevor überhaupt die Zahlung erfolgt ist.



    Ich hoffe Ihr könnt mir helfen



    Gruß Malte

  • ***Off-Topic***

    Kauf dir vom ersten Guthaben mal eine Tüte voll Satzzeichen. Text wie oben sind grottig zu lesen, und ich z.B ignoriere solche Anfragen normalerweise nach den erstenn paar Worten.

    9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die letzte summt ständig die Melodie von Tetris.

  • Ok, es tut mir leid das ich den letzten Sätzen nicht an Satzzeichen gedacht habe.

    Aber mich würde trotzdem freuen wenn ihr zu dem oben beschriebenen Problem eine Lösung hättet.

  • Ich möchte Dich nicht entmutigen, aber:


    Wenn es insbesondere um finanzielle Sachen geht solltest Du erstmal die "Basics" gut haben. Dazu zählt insbesondere die Eliminierung von Angriffsflächen mit SQL-injections (siehe mein Beitrag oben).


    Außerdem würde ich die Implementierung vom Bezahlprozess überdenken. Warum speicherst Du "sensible" Sachen wie das aufzuladende Guthaben in eine Javascript-Variable? Validierst Du die Werte später überhaupt? Bedenke die Werte lassen sich Clientseitig modifizieren!


    Abschließend noch: Du hast keine Datenschutzerklärung auf Deiner Webseite ;)

  • Man kann keinen PHP-Code abhängig von JS-Variablen o.ä. direkt ausführen (man kann nur einen weiteren HTTP-Request auslösen; Stichwort: XHR).


    Der Grund ist einer der Basics der Webentwicklung und wird klar, wenn du dir folgendes Bewusst machst:


    • PHP-Code wird auf dem Server ausgeführt, generiert oft HTML-Code, der dann nach Beendigung des Scripts an den Browser des Besuchers der Webseite ("Client") geschickt wird
    • JavaScript wird ausschließlich im Browser des Besuchers ausgeführt, also clientseitig. In dem Moment ist die Serverseitige Verarbeitung also schon komplett abgeschlossen

    In deinem konkreten Fall: Paypal hat die Möglichkeit nach Beendigung des Zahlungsvorganges auf eine bestimmte Seite weiterzuleiten, die du im Formular mitgeben kannst. Diesen Link stellst du zum beispiel auf zahlungsbestaetigung.php?orderId=2345734795 (die OrderId ist eine eindeutige Zuweisungs-ID, die du für diesen Aufladeversuch vergibst) ein. Wenn der Zahlungsvorgang nun abgeschlossen ist, wird der Browser auf diese Seite weitergeleitet. Die zahlungsbestaetigung.php prüft per PHP, ob zur übergebenen OrderId die Paypal-Zahlung in korrekter Höhe durchgeführt wurde und updatest erst und nur dann das Guthaben der Person um den in deiner Datenbank zur OrderId hinterlegten Betrag. Nur so wird es gemacht und nur so ist es sicher. Auf KEINEN FALL (!) schreibst du den Betrag oder den User in die URL mit rein.


    Beachte bitte außerdem unbedingt die Hinweise von peng zum Thema SQL-Injection. Jeder Parameter, der vom Client kommt, kann von einem Angreifer manipuliert werden. Hab das immer im Kopf und validiere JEDEN Wert, der vom Client kommt.


    // Edit: Da ich nach dem Lesen des und deinen anderen Thread leider das Gefühl habe, zu wissen, wen ich hier vor mir habe (man kann es Vorurteil nennen, ich nenne es Erfahrung), werde ich dir aus Rücksicht auf die Allgemeinheit nicht mehr helfen.

  • Unter der Annahme, dass du ein Guthabenkonto führst, was aufgeladen und belastet werden kann, möchte ich anraten das Guthaben nicht fix in einem Feld der Datenbank zu speichern, sondern für jeden Nutzer die Transaktionen in einer separaten Tabelle. Das aktuelle Guthaben wird dann durch Verrechnung aller Transaktionen gebildet. So sind die Transaktionen nachvollziehbar und du hast kein Problem, wenn man etwas zurückgerechnet werden muss.

  • Hi,


    ich hole ungern das Buch der guten Sprüche aus dem Netcup Forum Keller, aber ja heute ist ein guter Tag: Lass es bleiben.


    Wenn ich sowas hier sehe

    PHP
    <?php echo $_SESSION['betragZurAufladung']; ?>

    oder

    PHP
    //$con = mysqli_connect($host, $benutzername, $passwort, $datenbank);
    //$x = mysqli_query($con,"SELECT guthaben FROM guthaben WHERE user_id='" . $_SESSION['user_id'] . "'");
    //$y = mysqli_fetch_assoc($x);
    //$guthabenNeu = $y['guthaben'] + $_SESSION['betragZurAufladung'];
    //$x = mysqli_query($con,"UPDATE guthaben SET guthaben='". $guthabenNeu ."' WHERE user_id='" . $_SESSION['user_id'] . "'");

    dann bekomme ich richtige Trust issues.


    Du machst keinerlei Überprüfung ob die Informationen, die du erwartest auch so übergeben wurden. Du verwendest kein Prepared Statement und schreibst Credential Plain in dein Skript rein - Gratulation. Schon mal etwas von Secruity in Development gelesen bzw. gehört?!

    - "Vertraue niemanden, denn auch der Schatten einer Weißen Rose ist schwarz.."


    Daher noch mal mein ernst gemeinter Rat: Lass es bleiben. Warum? Dein Code und Konzept ist für die Verabeitung von Finanzangelegenheiten auf Grund mangelder Sicherheit nicht zu gebrauchen.

  • Danke für eure Antworten, habe eure Anmerkungen zu Kenntnis genommen.

    Das Guthaben System habe ich jetzt schon mal um Prepared Statements erweitert.

    Genauso habe ich wie @Elradon meinte in einer MySQL Tabelle nur die einzelnen Transaktionen gespeichert.


    Wäre es möglich nach der erfolgreich PayPal Transaktion mit einem Ajax Request eine Info an eine zweite Seite sendet, welche die PHP Anweisung ausführt?



    Freue mich über eine Antwort.