mixmastertobsi: Post ohne Formular übergeben

Hallo,

ich suche eine Idee/Möglichkeit Post-Variabeln ohne Formular zu übergeben und dannach die neue URL zu öffnen.

Ich muss unsere Auftragsdaten an den Server der Bank via Post übergeben. Der Kunde soll anschließend auf die URL der Bank weitergeleitet werden, wo bereits einige Felder im Formular ausgefüllt sind.

Habe bereits curl getestet, jedoch will das nicht wirklich funktionieren...

  1. Hallo,

    Hallo,

    ich suche eine Idee/Möglichkeit Post-Variabeln ohne Formular zu übergeben und dannach die neue URL zu öffnen.

    Ich muss unsere Auftragsdaten an den Server der Bank via Post übergeben. Der Kunde soll anschließend auf die URL der Bank weitergeleitet werden, wo bereits einige Felder im Formular ausgefüllt sind.

    Verstehe ich das richtig bzw. gehe ich vom richtigen Hintergrund aus?
    Ihr habt auf euren Server die zu übersendenden Auftragsdaten (woher auch immer zum bsp durch ein übermitteltes Formular/aus Datenbank generiert etc). Dieses Daten willst du nun an den BAnkserver schicken (der vermutlich eine entsprechende API bereitstellt (SOAP/REST))

    Ich kann zwar kaum php aber ich gehe davon aus dass REST mittels PHP möglich sein sollte und ich gehe davon aus dass du php nutzen willst (anhand des gewählten Bereichs). Es sollte also möglich sein einen beliebigen HTTP-Request in php abzusetzen.

    Was schreibt denn die Bank Api vor in welchen format die Daten kommen sollen? In Json oder als application/x-www-form-urlencoded? html schließ ich einfach mal aus, dass wär für ne API mehr als untypisch.

    für form encoded sähe der Request (stark vereinfacht) wie folgt aus:
    POST /Pfad/auf/dem/bankserver HTTP/1.1
    Host: BankserverDomain
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    weitere Header

    <hier stehen eure Daten dann in der Form
    name=wert&nocheinName=nocheinWert>

    In diesem Request sehe ich kein HTML-Formular, nicht von dem form url encoded verwirren lassen.

    Die Weiterleitung auf die Bankseite und das Vor-Ausfüllen der Felder sollte dann Sache der Bank sein.

    Habe bereits curl getestet, jedoch will das nicht wirklich funktionieren...

    solche einen Request sollte auch curl absetzen können. Bzw Was heißt "nicht wirklich funktioneren"? Was kommt zurück? Gibts ne Fehlermeldung?

    martachen

    1. Hallo,

      curl funktioniert schon, jedoch wird der "Kunde" nicht auf die Seite der Bank weitergeleitet.

      1. Hallo,

        curl funktioniert schon, jedoch wird der "Kunde" nicht auf die Seite der Bank weitergeleitet.

        Und wie wäre es mit einer Beantwortung/Kommentierung der anderen Fragen von martachen? willst du nun Hilfe oder nicht?

        Viele Grüße
        Siri

      2. Hallo,

        curl funktioniert schon, jedoch wird der "Kunde" nicht auf die Seite der Bank weitergeleitet.

        was kommt denn zurück (insbesondere der Statuscode wär schon interessant)

        so wie ich das verstehe läuft das wie folgt ab

        Kunde                           dein Server                            Bank Server
        1)
            ---------------------------->    2)
                                                 ------------------------------->    3)
                                                 <-------------------------------
                                             4)
         <-------------------------------- (dieser Schritt scheint noch zu fehlen)

        1)kunde klickt auf einen Link/button was auch immer und löst den Auftrag aus
        also HTTP Request von Kunde an euren Server

        1. euer Server verarbeitet den Aufrtrag und schickt eine Anfrage an den Bank Server (zB mit curl)

        2. some magic (eigentlich ist es uninteressant was genau bei der BAnk geschieht)
          DIe Bank schickt nun eine Antwort zurück (meine Vermutung ein Redirect mit einem Statuscode 3xx)

        3. du siehst nun die Antwort die die Bank gesendet hat, diese muss noch irgendwie an den kunden gereicht werden

        martachen

        1. Hallo,

          eigentlich ist es so

          Kunde füllt Formular aus und wird auf die Seite der Bank weitergeleitet. Die Daten, welche der Kunde im Formular ausgefüllt hat, werden per Post an die Bank übergeben.

          Da aber die Daten bereits in unserer Datenbank sind, will ich den Schritt mit dem Formular übergehen.

          1. Hallo,

            Hallo,

            eigentlich ist es so

            Kunde füllt Formular aus und wird auf die Seite der Bank weitergeleitet. Die Daten, welche der Kunde im Formular ausgefüllt hat, werden per Post an die Bank übergeben.

            Da aber die Daten bereits in unserer Datenbank sind, will ich den Schritt mit dem Formular übergehen.

            naja HTTP ist nunmal synchron, der Kunde muss irgendeine Anfrage starten um eine Antwort zu erhalten (siehe mein Bild oben) dh heißt er fragt an "auftrag ausführen" dazu muss er nun bspw ein Formular ausfüllen und absenden (was du nicht willst) oder einen Link anklicken. Damit startet dein Skript auf deinen Server, welches eine weitere Anfrage startet (von deinem Server an den BankServer). Der BAnkserver beantwortet nun deine Anfrage (wo du immer noch nicht veraten hast wie)

            Du musst nun mit deinem Skript die Antwort des Bankservers "verarbeiten" und daraus eine Antwort an den Kunden erstellen.

            Du kannst nicht eine Anfrage vom Kunden barbeiten udn eine neue Anfrage an den Bankserver richten, der dann dem Kunden antworten soll.

            martachen

            1. Hallo,

              lassen wir den Bankenserver mal...

              ein einfaches Beispiel...

              test1.php
              <?php
              header("location: test2.php");
              ?>

              test2.php
              <?php
              $a = $_POST['name'];
              echo $a;
              ?>

              Wie kann ich nun an test2.php einen Post-Parameter mitsenden. In meinem einfachen Beispiel geht es NATÜRLICH nicht.

              1. Hallo,

                ein einfaches Beispiel...

                test1.php
                <?php
                header("location: test2.php");
                ?>

                test2.php
                <?php
                $a = $_POST['name'];
                echo $a;
                ?>

                meine php-kenntnisse sind wirklich sehr rudimentär, aber für mich sieht das nicht nach Absetzen eines http-requests aus (also mal kurz Tante google fragen....)

                und dieses finden:

                deine test1.php müsste jetzt also irgendwo sowas in der Art besitzen

                  
                <?php  
                $r = new HttpRequest('http://example.com/test2.php', HttpRequest::METH_POST);  
                $r->addPostFields(array('name' => 'mike', 'weiteresFeld' => 'weitererWert'));  
                try {  
                    echo $r->send()->getBody();  
                } catch (HttpException $ex) {  
                    echo $ex;  
                }  
                ?>  
                
                

                (so ich hoff mal ich hab aus dem Beispiel nicht zuviel weg gekürzt)
                martachen

                1. Hallo,

                  ich glaube, mit dem sollte es funktionierten, aber wie aktivere ich die pecl_http?
                  In der php.ini kann ich die Erweiterung nicht finden...

              2. Tach!

                test1.php
                <?php header("location: test2.php");
                Wie kann ich nun an test2.php einen Post-Parameter mitsenden. In meinem einfachen Beispiel geht es NATÜRLICH nicht.

                Gar nicht. Du sagst lediglich dem Browser, dass er eine neue URL aufrufen soll. Es gibt dabei nur den Statuscode 307, gemäß dem der Browser den Request mit derselben Methode wiederholen soll, also wenn test1.php per POST aufgerufen wurden, dann soll auch test2.php per POST aufgerufen werden. Die Spezifikationen, die ich fand schrieben leider nicht konkret, was mit den gePOSTeten Daten an test1.php passieren soll. Vermutlich sollen sie ebenfalls an die neue Adresse gesendet werden.

                Dieses Vorgehen nützt dir vermutlich nichts, denn wenn der Browser dieselben Daten an beide Adressen sendet, kann er auch gleich test2.php aufrufen.

                dedlfix.

                1. Hallo,

                  ok - mein Beipsiel war dann wohl doch nicht verständlich genug.

                  test1.php
                  <?php
                  .
                  . mysql abfrage
                  .
                  $var1 = mysql_result($res,0,'name');
                  header("location: test2.php");
                  ?>

                  $var1 soll nun eben an test2.php per Post übergeben werden.

                  1. Tach!

                    $var1 soll nun eben an test2.php per Post übergeben werden.

                    Geht so nicht. Du kannst beim Anwender keinen POST-Request über einen HTTP-Statuscode erzeugen. Browser gehen höchstens von POST auf GET, aber nicht hoch. Beim Redirect kann mannur eine URL angeben. Welcher Teil davon soll denn ins POST gehen und was soll in der URL bleiben? Der Querystring? Nö. Man kann ja problemlos Post-Request mit Querystring senden.

                    HTML erzeugen mit Javascript drin, das ein Formular absendet, ist die einzige (mir bekannte) Möglichkeit.

                    dedlfix.

      3. Hi!

        curl funktioniert schon, jedoch wird der "Kunde" nicht auf die Seite der Bank weitergeleitet.

        Was heißt das konkret? *Was* hast Du bislang, mit *welchem Code* probiert?

        off:PP

        --
        "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
        1. Hallo,

          folgendes habe ich probiert

          $ch = curl_init();

          curl_setopt($ch, CURLOPT_URL, $url);

          curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

          curl_setopt($ch, CURLOPT_POST, true);

          $data = array(
              'foo' => 'foo foo foo',
              'bar' => 'bar bar bar',
              'baz' => 'baz baz baz'
          );

          curl_setopt($ch, CURLOPT_POSTFIELDS, $data)

          $output = curl_exec($ch);

          curl_close($ch);

  2. Tach!

    ich suche eine Idee/Möglichkeit Post-Variabeln ohne Formular zu übergeben und dannach die neue URL zu öffnen.

    Also, um es mal technisch zu sagen, möchtest du mit einem POST-Request Daten versenden. Das Ergebnis ist nicht interessant, denn der Anwender soll dann zum Beispiel mit einem 302/303-Header an eine andere URL geleitet werden.

    Ich muss unsere Auftragsdaten an den Server der Bank via Post übergeben. Der Kunde soll anschließend auf die URL der Bank weitergeleitet werden, wo bereits einige Felder im Formular ausgefüllt sind.

    Wie kommen die Daten in die Felder?

    Habe bereits curl getestet, jedoch will das nicht wirklich funktionieren...

    Netzwerkverkehr im Normalfall (also im Browser) anschauen und dann nachbilden. Insbesondere wären vermutlich Cookies interessant, denn irgendeine Art von Session wird die Bankseite sicherlich fahren. Das Problem ist dann nur, wie der mit Curl herumgereichte Cookie so in den Browser kommt, dass er zur Bankseite gesendet werden kann. Und das wird nicht gehen, weil Cookies nicht von fremden Domänen gesetzt werden können. Wenn die Session-Information über URL übertragen wird, mag das jedoch gehen.

    dedlfix.

  3. [latex]Mae  govannen![/latex]

    Ich muss unsere Auftragsdaten an den Server der Bank via Post übergeben.

    Na dann: Briefmarke drauf und weg damit.

    ♫ FIIIIISCH!! ♪

    Kai

    (Ja, es geht um die Schreibweise) ;)

    --
    var jQuery = $(hit);
    Wir sind die Schlumpf. Widerschlumpf ist schlumpflos. Wir werden Sie einschlumpfen.
    SelfHTML-Forum-Stylesheet
    1. Hallo,

      Ich muss unsere Auftragsdaten an den Server der Bank via Post übergeben.

      Na dann: Briefmarke drauf und weg damit.

      und hoffen, dass es nicht durch den Streik zu lange liegen bleibt ;)
      martachen