Anfängerfrage SOAP

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

  • Anfängerfrage SOAP

    Hallo Experten,

    ersteinmal ich bin Anfänger und versuche mich mit PHP zu beschäftigen.

    Ich habe die Aufgabe Daten die mir mit Soap und POST übertragen werden sollen, zu verarbeiten und als Soap wieder zurückzusenden (XML?) ohne WSDL.

    Wie muss ich mir das vorstellen?

    Benötige ich dafür nur ein Server oder auch einen Client?

    Wie kann ich den Inhalt der SOAP ENV abfangen?

    Wäre sehr dankbar wenn Ihr mir bei meinem Einstieg helfen könntet.

    Gruß
    Maxjenne

  • #2
    Hallo,

    ich würde vorschlagen, dass du dich erstmal grundlegend informierst. Das alles noch mal niederzuschreiben, nur weil ein neuer User in diesem Forum ist, macht generell keinen Sinn, weil es schon viele Quellen im Netz gibt.

    So wie sich deine Aufgabe anhört, würde ein Server eigentlich reichen.
    Aber zum Testen solltest du natürlich auch einen Klient haben, mit dem du die SOAP-Request simulieren kannst und Antworten kontrollieren kannst.
    ICH BIN ICH!!!

    Kommentar


    • #3
      Hallo Ichbinich,

      ich habe mir schon einiges durchgelesen, aber mir fehlt der zündende Gedanke. Auch habe ich mir ein kleines Testprogramm geschrieben und das dazugehörige Server Programm. Wusste aber nicht ob dies so richtig war, aber Du bestätigst mich in meinem Konzept des Servers. Mein client versendet meine Soap-Datei (2 Felder) mit fputs und ruft auch den Server auf. Nur die Inhalte meiner beiden felder stehen in der HTTP_RAW_POST_DATA als ein Eintrag. Ich dachte ich würde die Feldnamen empfangen und damit auch die Ihnalte herauslesen können.

      Kannst Du mir sagen wo ich die Felder auslesen kann, bzw. die Inhalte sehe.

      Danke für Deine Hilfe
      ist nicht so einfach das Thema.

      Maxjenne

      Kommentar


      • #4
        Zeig doch mal Code her. Bedienst du dich der Soap-Klassen von PHP?
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Das mit den Soap-Class habe ich noch nicht verstanden.

          hier ist mein Programm das die soap-Datei via Post verschickt.

          PHP-Code:
          <?php 
          $file 
          "";
          $fp1 fopen("C:/temp/test.xml","r");

          while(!
          feof($fp1))
          {
              
          $file1 fgets($fp1);
              
          $file $file.$file1;
          }

          $data "";
          $fp fsockopen("xxx.xxx.xxx.xxx",80,$errstr,$errno);

          if(!
          $fp)
          {
              die();
          }
          else
          {
              
          fputs($fp"POST /CheckPZN_soap.php HTTP/1.1\r\n");
              
          fputs($fp"Host: xxx.xxx.xxx.xxx\r\n");
              
          fputs($fp"Content-length: "strlen($file) ."\r\n");;
              
          fputs($fp"Content-Type: application/soap+xml; charset=utf-8\r\n");
              
          fputs($fp"Connection: close\r\n\r\n");
              
          fputs($fp$file);
          }
          while(!
          feof($fp))
          {
              
          $fget fgets($fp128);
              
          $data .= $fget;
              echo(
          $fget);
          }
          fclose($fp);
          ?>

          und hier ist mein server Programm

          PHP-Code:
          <?php 
          header
          ("Content-Type: application/soap+xml; charset=utf-8");
          import_request_variables("gp""P");
          $fil 1;
          $PZN$HTTP_RAW_POST_DATA;

          function  
          CheckPZN($PZN) {

          // ----------------------------------------------
          // Diverse Sql-Abfrage(habe ich entfernt)
          // ----------------------------------------------

            
          return $CheckPZN;
          }

          $server = new SoapServer(null,array('uri' => "http://xxx.xxx.xxx.xxx"));
          $server->addFunction("CheckPZN");            //Funktion zum Server hinzufügen
          if ($_SERVER["REQUEST_METHOD"] == "POST")
          {
            
          $server->handle();
          }
          ?>
          und hier ist meine Soap-Datei :

          <?xml version="1.0" encoding="utf-8"?>
          <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
          <soap12:Body xmlns="http://xxx.xxx.xxx.xxx/">
          <CheckPZN>
          <PZN>0617172</PZN>
          <in_kundennummer>123456</in_kundennummer>
          </CheckPZN>
          </soap12:Body>
          </soap12:Envelope>

          Kommentar


          • #6
            Als Rückmeldung bekomme ich immer folgendes :
            • HTTP/1.1 200 OK
              Date: Wed, 16 Jan 2008 08:55:40 GMT
              Server: Apache/2.2.6 (Win32) mod_ssl/2.2.6 OpenSSL/0.9.8e PHP/5.2.5
              X-Powered-By: PHP/5.2.5
              Content-Length: 600
              Content-Type: application/soap+xml; charset=utf-8

              <?xml version="1.0" encoding="UTF-8"?>

              Und folgendes als ein String :

              <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://xxx.xxx.xxx.xxx" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:enc="http://www.w3.org/2003/05/soap-encoding"><env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:CheckPZNResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:string">0617172</return></ns1:CheckPZNResponse></env:Body></env:Envelope>


            Wie kriege ich die Rückmeldung als xml hin?

            Kommentar


            • #7
              Und folgendes als ein String (...) Wie kriege ich die Rückmeldung als xml hin?
              Das ist doch XML. Oder willst du ein Objekt? Dann guck dir vielleicht mal simplexml an.
              Btw: Warum nicht die SOAP-Klassen?

              Kommentar


              • #8
                Hallo PHP-Desaster,

                1. wie meinst Du das mit den Soap Klassen?

                2. bei zurückgesendeten XMl? Datei steht aber immer ns1< aber es sollte folgendermaßen aussehen :

                HTTP/1.1 200 OK
                Content-Type: application/soap+xml; charset=utf-8
                Content-Length: 600

                <?xml version="1.0" encoding="utf-8"?>
                <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
                <soap12:Body>
                <CheckPZNResponse xmlns="http://xxx.xxx.xxx.xxx">
                <CheckPZNResult>string</CheckPZNResult>
                </CheckPZNResponse>
                </soap12:Body>
                </soap12:Envelope>

                das verstehe ich nicht

                Gruß
                Maxjenne

                Kommentar


                • #9
                  1. wie meinst Du das mit den Soap Klassen?
                  Guck dir mal den Link an, den ich an "SOAP-Klassen" geklebt habe!

                  2. bei zurückgesendeten XMl? Datei steht aber immer ns1< aber es sollte folgendermaßen aussehen(...)das verstehe ich nicht
                  Ich verstehe dein Problem ehrlich gesagt nicht!

                  Kommentar


                  • #10
                    ich dachte es wird folgendes zurückgeschickt :

                    Beispiel :

                    <soap12:Body xmlns="http://xxx.xxx.xxx.xxx/">
                    <CheckPZN>
                    <PZN>0617172</PZN>

                    und nicht :

                    env:Body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"><ns1:CheckPZNResponse env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"><rpc:result>return</rpc:result><return xsi:type="xsd:string">0617172</return></ns1:CheckPZNResponse></env:Body></env:Envelope>

                    ist das denn so richtig?

                    Ich weiß nicht wie man diese Klassen einsetzt und wann?

                    Und wie kann ich den Inhalt der <PZN> einlesen, leider finde ich keinen Hinweis darüber im net. Wo steht dieser Inhalt (SOAP_BODY????) damit ich ihn weiterverarbeiten kann?

                    <soap12:Body xmlns="http://xxx.xxx.xxx.xxx/">
                    <CheckPZN>
                    <PZN>0617172</PZN>
                    <in_kundennummer>123456</in_kundennummer>
                    </CheckPZN>
                    </soap12:Body>

                    Kommentar


                    • #11
                      Bist du die sicher, dass du den Unterschied zwischen gesendeten Daten und empfangenden Daten verstehst?

                      Welche Daten schickst du vom Klient an den Server?
                      Welche Daten schickt der Server zurück an den Klient?
                      ICH BIN ICH!!!

                      Kommentar


                      • #12
                        Sorry aber leider bin ich NEULING!

                        Ich habe in den letzten tagen soviel gesucht und gelesen, das ich glaube das ich garnichts mehr verstehe.

                        im oberen Teil ist die Beschreibung meiner Tätigkeit bzw. meiner Ahnungslosigkeit.
                        In der Variable $HTTP_POST_RAW steht " 0617172 123456 " also der Inhalt meiner Felder PZN und in_kundennumer. Aber wo stehen die Felder getrennt? als $PZN un $in_kundennummer.
                        Kann ich die Inhalte nicht irgendwo aus "Feldnamen" lesen?

                        Kommentar


                        • #13
                          Hallo PHP Desaster,

                          das mit den Soap Klassen, war ein guter Tip. Jetzt bekomme ich den Inhalt und die Rückgabe klappt auch.

                          Wie kann ich den jetzt die Felder $PZN und $in_kundennummer zurückgeben.

                          Beim Return kann ich ja nur ein Feld zurückgeben?

                          Bis jetzt habt Ihr mir aber RICHTIG GUT GEHOLFEN !!!

                          DANKE!!!!!!!

                          Maxjenne

                          Nicht jeder hat die Möglichkeit sofort alles zu wissen, deshalb ist man ja auch NEULING.

                          Kommentar

                          Lädt...
                          X