Ankündigung

Einklappen
Keine Ankündigung bisher.

PayPal Integration und der nächtliche Wahnsinn

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PayPal Integration und der nächtliche Wahnsinn

    Guten morgen liebe Community,

    Ich schlage mich nun seit gestern morgen (bis heute morgen um 6 ) mit der Integration von der Paypal IPN herum.

    Ich habe diverse Code snipets getestet aber alle liefern mir das selbe Problem ! INVALID !

    meine letzter versuch war mit der Download Source von evoluted.

    Ich habe das ganze versuch zu Debuggen in dem ich alles was das Script tut in eine DB schreibe.

    sql_log.png
    externer link bild : http://pic-hoster.net/view/63672/sql_log.png.htm

    allerdings bringt mach das nicht weiter.

    Ich habe auch gut und gerne 100 Vorschläge zur Lösung versucht, allerdings ohne erfolg.

    Meine Paypments sind zurzeit wie folgt aus

    PHP-Code:
    <?php
    // Database variables
    $host "localhost"//database location
    $user "******"//database username
    $pass "*****"//database password
    $db_name "****"//database name

    // PayPal settings
    $paypal_email 'mail@admin.de';
    $return_url 'http://www.secretdomain.de/pp/payment-successful.html';
    $cancel_url 'http://www.secretdomain.de/pp/payment-cancelled.html';
    $notify_url 'http://www.secretdomain.de/pp/payments.php';

    $item_name 'Test Item';
    $item_amount 5.00;

    // Include Functions
    include("functions.php");

    // Check if paypal request or response
    if (!isset($_POST["txn_id"]) && !isset($_POST["txn_type"])){
        
    $querystring '';
        
        
    // Firstly Append paypal account to querystring
        
    $querystring .= "?business=".urlencode($paypal_email)."&";
        
        
    // Append amount& currency (£) to quersytring so it cannot be edited in html
        
        //The item name and amount can be brought in dynamically by querying the $_POST['item_number'] variable.
        
    $querystring .= "item_name=".urlencode($item_name)."&";
        
    $querystring .= "amount=".urlencode($item_amount)."&";
        
        
    //loop for posted values and append to querystring
        
    foreach($_POST as $key => $value){
            
    $value urlencode(stripslashes($value));
            
    $querystring .= "$key=$value&";
        }
        
        
    // Append paypal return addresses
        
    $querystring .= "return=".urlencode(stripslashes($return_url))."&";
        
    $querystring .= "cancel_return=".urlencode(stripslashes($cancel_url))."&";
        
    $querystring .= "notify_url=".urlencode($notify_url);
        
        
    // Append querystring with custom field
        //$querystring .= "&custom=".USERID;
        //Database Connection
        
    $link mysql_connect($host$user$pass);
        
    mysql_select_db($db_name);
        
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('REDIRECT:location:https://www.sandbox.paypal.com/cgi-bin/webscr".$querystring."','".time()."')"$link);
        
    // Redirect to paypal IPN
        
    header('location:https://www.sandbox.paypal.com/cgi-bin/webscr'.$querystring);
        exit();
    } else {
        
    //Database Connection
        
    $link mysql_connect($host$user$pass);
        
    mysql_select_db($db_name);
        
        
    // Response from Paypal
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('RESPONSE','".time()."')"$link);
        
    // read the post from PayPal system and add 'cmd'
        
    $req 'cmd=_notify-validate';
        foreach (
    $_POST as $key => $value) {
            
    $value urlencode(stripslashes($value));
            
    $value preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}',$value);// IPN fix
            
    $req .= "&$key=$value";
        }
        
        
    // assign posted variables to local variables
        
    $data['item_name']            = $_POST['item_name'];
        
    $data['item_number']         = $_POST['item_number'];
        
    $data['payment_status']     = $_POST['payment_status'];
        
    $data['payment_amount']     = $_POST['mc_gross'];
        
    $data['payment_currency']    = $_POST['mc_currency'];
        
    $data['txn_id']                = $_POST['txn_id'];
        
    $data['receiver_email']     = $_POST['receiver_email'];
        
    $data['payer_email']         = $_POST['payer_email'];
        
    $data['custom']             = $_POST['custom'];
            
        
    // post back to PayPal system to validate
    $header "POST /cgi-bin/webscr HTTP/1.1\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Host: www.sandbox.paypal.com\r\n";  // www.paypal.com for a live site
    $header .= "Content-Length: " strlen($req) . "\r\n";
    $header .= "Connection: close\r\n\r\n";
        
        
    $fp fsockopen ('ssl://www.sandbox.paypal.com'443$errno$errstr30);
        
        if (!
    $fp) {
            
    // HTTP ERROR
            
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('HTTP ERROR','".time()."')"$link);
        } else {
            
    fputs($fp$header $req);
            while (!
    feof($fp)) {
                
    $res fgets ($fp1024);
                
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('".serialize($res)."','".time()."')"$link);
                if (
    strcmp($res"VERIFIED") == 0) {
                    
                    
    // Used for debugging
                    // mail('user@domain.com', 'PAYPAL POST - VERIFIED RESPONSE', print_r($post, true));
                            
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('VERFIED RESPONSE','".time()."')"$link);
                    
    // Validate payment (Check unique txnid & correct price)
                    
    $valid_txnid check_txnid($data['txn_id']);
                    
    $valid_price check_price($data['payment_amount'], $data['item_number']);
                    
    // PAYMENT VALIDATED & VERIFIED!
                    
    if ($valid_txnid && $valid_price) {
                        
                        
    $orderid updatePayments($data);
                        
                        if (
    $orderid) {
                            
    // Payment has been made & successfully inserted into the Database
                            
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('ALL FINE','".time()."')"$link);
                        } else {
                            
    // Error inserting into DB
                            // E-mail admin or alert user
                            // mail('user@domain.com', 'PAYPAL POST - INSERT INTO DB WENT WRONG', print_r($data, true));
                            
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('INSERT WRONG','".time()."')"$link);
                        }
                    } else {
                        
    // Payment made but data has been changed
                        // E-mail admin or alert user
                        
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('PAY BUT CHANGE,'".time()."')"$link);
                    }
                
                } else if (
    strcmp ($res"INVALID") == 0) {
                
                    
    // PAYMENT INVALID & INVESTIGATE MANUALY!
                    // E-mail admin or alert user
                    
                    // Used for debugging
                    //@mail("user@domain.com", "PAYPAL DEBUGGING", "Invalid Response<br />data = <pre>".print_r($post, true)."</pre>");
                    
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('INVALID RESPONSE','".time()."')"$link);
                }
            }
        
    fclose ($fp);
        
    $result mysql_query("INSERT INTO `pp_log`(bridgemsg,date) VALUES ('NO HTTP ERROR','".time()."')"$link);
        }
    }
    mysql_close($link);
    ?>

    Getestet habe ich sowohl über den Pay Button als auch über den Sandkasten von Paypal ( IPN Simulator / Express Checkout / Web Accept).

    über jede Hilfe bin ich sehr dankbar.


    Liebe grüße ausem Schwobe ländle
    Angehängte Dateien

  • #2
    Den Screenshot kann man ich lesen.. ich zumindest nicht.


    aber alle liefern mir das selbe Problem ! INVALID !
    Bekommst du keine genauere Meldung zurück? https://developer.paypal.com/docs/cl...pi/errorcodes/


    PHP-Code:
        $querystring '';
        
        
    // Firstly Append paypal account to querystring
        
    $querystring .= "?business=".urlencode($paypal_email)."&";
        
        
    // Append amount& currency (£) to quersytring so it cannot be edited in html
        
        //The item name and amount can be brought in dynamically by querying the $_POST['item_number'] variable.
        
    $querystring .= "item_name=".urlencode($item_name)."&";
        
    $querystring .= "amount=".urlencode($item_amount)."&";
        
        
    //loop for posted values and append to querystring
        
    foreach($_POST as $key => $value){
            
    $value urlencode(stripslashes($value));
            
    $querystring .= "$key=$value&";
        } 
    Dafür gibt es übrigens http_build_query()


    Und: mysql_ ist veraltet .. weißt du vermutlich schon?!
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Hallo hausl,

      ich habe nochmal das bild hochgeladen

      http://pic-hoster.net/view/63672/sql_log.png.htm

      das mysql_ veraltet ist weis ich , mein verwendet cms nutzt dies noch deswegen nutze ich es auch :/

      http_build_query() kenne ich jetzt nicht, denke aber das sollte nicht der Fehler sein oder ?

      Kommentar


      • #4
        Zitat von Alphafox Beitrag anzeigen
        das mysql_ veraltet ist weis ich , mein verwendet cms nutzt dies noch deswegen nutze ich es auch :/
        Was lernen wir aus deiner Aussage?

        -> entweder ist das CMS tot, da das Projekt nicht mehr gepflegt wird.
        -> oder du hast dein CMS lange nicht mehr auf eine aktuelle Version aktualisiert.

        In beiden Fällen ist es also höchst wahrscheinlich das einige kritische Sicherheitslücken bekannt und nicht geschlossen worden sind.

        Jetzt willst du mit der Paypal API Zahlungsverkehr abwickeln.

        -> Das ist wohl keine wirklich gute Idee oder?

        Du solltest also zunächst mal grundlegend darüber nachdenken das ganze Projekt auf einen halbwegs aktuellen/sicheren Stand zu bringen und ggf das CMS zu tauschen.

        Kommentar


        • #5
          übrigens bietet paypal eine SDK klasse an mit beispiel code

          http://paypal.github.io/PayPal-PHP-SDK/sample/

          copy und paste und dann hat man alles
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

          Kommentar


          • #6
            Zitat von TessaKavanagh Beitrag anzeigen

            Was lernen wir aus deiner Aussage?

            -> entweder ist das CMS tot, da das Projekt nicht mehr gepflegt wird.
            -> oder du hast dein CMS lange nicht mehr auf eine aktuelle Version aktualisiert.

            In beiden Fällen ist es also höchst wahrscheinlich das einige kritische Sicherheitslücken bekannt und nicht geschlossen worden sind.

            Jetzt willst du mit der Paypal API Zahlungsverkehr abwickeln.

            -> Das ist wohl keine wirklich gute Idee oder?

            Du solltest also zunächst mal grundlegend darüber nachdenken das ganze Projekt auf einen halbwegs aktuellen/sicheren Stand zu bringen und ggf das CMS zu tauschen.


            Blos weil es etwas Älter ist muss es nicht unbedingt schlecht sein und was hat die Sicherheit mit der Sicherheit von PayPal zu tun ?

            Nichts desto trotz bringt mich deine aussage keinen schritt weiter.

            BlackScorp danke werde ich mir mal anschauen

            Kommentar


            • #7
              Zitat von Alphafox
              und was hat die Sicherheit mit der Sicherheit von PayPal zu tun ?
              Glaube es mir, oder nicht.
              Einem Onlinehändler wurde vor einigen Jahren mal der Shop aufgebrochen. Hat keiner gemerkt. Zunächst. Paar Tage später ist es dann doch aufgefallen, weil kein Geld mehr von Kunden auf Vorkasse-Bestellungen reinkam. Irgendwann ist dann aufgefallen, dass die Hacker die Kontodaten des Shopbetreibers geändert haben. Sonst nichts. Das sind schnell mal fünfstellige Beträge, wenn man nicht unbedeutsam klein ist.
              Nur mal als Denkanstoß.

              Kommentar


              • #8
                Ergibt für mich jetzt zwar keinen sin da er bei mir keine Konto Daten außer der Mail Adresse finden wird, aber okay darum geht es hier ja auch nicht. Problem besteht nach wie vor also bitte BtT

                Kommentar


                • #9
                  Geht ja nicht ums finden, sondern darum, die Email-Adresse zu verändern. Paypal ist da aber weniger problematisch, muss ich zugeben.
                  Und wenn schon. Ist ja nur Geld...

                  Kommentar


                  • #10
                    ah ich glaube ich verstehe nun worauf du abzielst , das er die Mail Adresse im absende Formular ändert ich glaube das wird net ganz so einfach den dazu müsste er erstmal in meine Datenbank kommen und mal ehrlich, wer soviel Aufwand bei mir betreibt is ein ganz armer/arme, bei mir dreht es sich um Nichtmal 100 Euro im Monat . Ich teste nun mal die IPN von paypal direkt wenn das immer noch nicht geht weis ich nicht mehr weiter

                    Kommentar


                    • #11
                      Zitat von Alphafox Beitrag anzeigen
                      ch glaube das wird net ganz so einfach den dazu müsste er erstmal in meine Datenbank kommen
                      weil das so einfach war/ist mit mysql_ erweiterung, wurde diese entfernt
                      apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                      Kommentar


                      • #12
                        Zitat von BlackScorp
                        weil das so einfach war/ist mit mysql_ erweiterung, wurde diese entfernt
                        Meinst du nicht, dass du ihn damit nur verunsicherst?
                        (insider)

                        Kommentar


                        • #13
                          hahahaha der war gut rkr ,aber ehrlich gesagt ist es mir auch wurst wer rein will kann gerne kommen, einfach hat er es auf keinen Fall Aber nun bitte würdet ihr mir helfen mein Problem zu lösen den dazu habe ich meine Frage gestellt und nicht um mir blödes geschwätzt anzuhören

                          Hab nun die IPN von PP direkt getesetet und bekomme
                          HTTP request of validation request:POST /cgi-bin/webscr HTTP/1.1
                          Host: www.sandbox.paypal.com
                          Accept: */*
                          Connection: Close
                          Content-Length: 937
                          Content-Type: application/x-www-form-urlencoded

                          Invalid IPN: cmd=_notify-validate&payment_type=instant&payment_date=Fri+Feb +26+2016+23%3A54%3A29+GMT%2B0100+%28Mitteleurop%C3 %A4ische+Zeit%29&payment_status=Completed&address_ status=confirmed&payer_status=verified&first_name= John&last_name=Smith&payer_email=buyer%40paypalsan dbox.com&payer_id=TESTBUYERID01&address_name=John+ Smith&address_country=United+States&address_countr y_code=US&address_zip=95131&address_state=CA&addre ss_city=San+Jose&address_street=123+any+street&bus iness=seller%40paypalsandbox.com&receiver_email=se ller%40paypalsandbox.com&receiver_id=seller%40payp alsandbox.com&residence_country=US&item_name1=some thing&item_number1=AK-1234&tax=2.02&mc_currency=USD&mc_fee=0.44&mc_gross =12.34&mc_gross_1=12.34&mc_handling=2.06&mc_handli ng1=1.67&mc_shipping=3.02&mc_shipping1=1.02&txn_ty pe=cart&txn_id=236841960&notify_version=2.1&custom =xyz123&invoice=abc1234&test_ipn=1&verify_sign=AFc WxV21C7fd0v3bYYYRCpSSRl31AhioFJPX9gdza5vTIwPW2I1qs q6n

                          Kommentar


                          • #14
                            Ich habe schon einige Male verschiedene Zahlschnittstellen implementiert. Unter anderem auch paypal - einige Male.

                            Deinen Code kann ich nicht vollständig reparieren, ohne dass ich ihn tatsächlich ausführen und testen muss. Da sind einige offensichtliche Probleme und ich hätte vieles anders gelöst. Jedenfalls geht das (für mich) über das übliche 'mal drüberschauen' hinaus. Wenn du bereit bist, ein paar Euro für eine Korrektur auszugeben, dann helfe ich dir.

                            Bei Interesse PN

                            Kommentar


                            • #15
                              Mein code ist der Original von Paypal Geld möchte ich keines dafür in die Hand nehmen, denn da liegt der Fehler offensichtlich nicht vor diesem Monitor

                              Kommentar

                              Lädt...
                              X