Ankündigung

Einklappen
Keine Ankündigung bisher.

SAP Soap Problem

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

  • SAP Soap Problem

    Hallo,
    ich darf kurzfristig in eine bestehenden eine SAP Abfrage integrieren. Man sollte glauben kein großes Ding, aber es funzt ums verrecken nicht.

    PHP-Code:
    $wsdl="url zum service"

    $soap_param = Array(
       
    'login' => "yyy",
       
    'password' => "xxxxx",
       
    'trace' => 1

    );

    $client = new SOAPClient($wsdl$soap_param);

    $functions $client->__getFunctions();
       foreach(
    $functions as $d){  
       echo 
    $d "</br>";


    soweit funktioniert das wunderbar, bekomme die verfügbaren Funktionen ausgegeben.
    die für mich relevante sieht folgender massen aus.

    xyzRfcGetOrderUrlResponse xyzRfcGetOrderUrl(xyzRfcGetOrderUrl $parameters)

    jetzt dacht ich mit

    PHP-Code:
    $param = Array(dievariable=> '0002474364');
    $response $client->xyzRfcGetOrderUrl$param ); 
    würde ich dann aus der response die nötigen Dinge ermitteln können.
    aber dem ist leider nicht so, das wirft Fehler


    PHP-Code:
    } catch (SoapFault $e){
    echo 
    "ANFRAGE: " $client->__getLastRequest() . "<br>";
    echo 
    'Caught an Error: (' $e->faultcode ' ) - ' $e->faultstring
    der request sieht genauso aus wie er sein sollte... schönens XML:

    PHP-Code:
    <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:sap-com:document:sap:soap:functions:mc-style"><SOAP-ENV:Body><ns1:xyzRfcGetOrderUrl><dievariable>0002474364</XErpid></ns1:xyzRfcGetOrderUrl></SOAP-ENV:Body></SOAP-ENV:Envelope>

    aber die response ist ansonsten NULL, und $e->faultstring ergibt
    Caught an Error: (HTTP ) - Could not connect to host

    was mich irritiert sind die Funktionen die beim Service verfügbar sind, das kenne ich anderst:
    xyzRfcGetOrderUrlResponse xyzRfcGetOrderUrl(xyzRfcGetOrderUrl $parameters)

    wieso gibts hier Response und zweimal die Funktion ohne Response, muß ich den Funktionsname irgendwie als Parameter mit übergeben?

    Also wenn hier jemand Ahnung hat, mein Dank und Anerkennung im voraus!

    Grüße




  • #2
    Es kann keine HTTP-Verbindung zum SOAP-Server aufgebaut werden. Mit SOAP selber hat das an sich nichts zu tun.

    Kommentar


    • #3
      ok, zum verständnis: ich krieg ja vorher den client erstellt, der auch die funktionen des soap services ausgibt, wieso geht das und die funktion abfragen nicht mehr?

      Kommentar


      • #4
        Zitat von mindthegap Beitrag anzeigen
        ok, zum verständnis: ich krieg ja vorher den client erstellt, der auch die funktionen des soap services ausgibt, wieso geht das und die funktion abfragen nicht mehr?
        Für die Auflistung der Funktionen werden nur die Informationen aus dem WSDL-Dokument verwendet. Erst beim Aufruf einer Funktion wird tatsächlich eine Verbindung zum SOAP-Server aufgebaut.

        Kommentar


        • #5
          muss ich. den parametern fur den soapclient eine url mitgeben unter der der soapserver erreichbar ist? ich habe ja nur das client object um die funktionen auszuführen.

          Kommentar


          • #6
            Zitat von mindthegap Beitrag anzeigen
            muss ich. den parametern fur den soapclient eine url mitgeben unter der der soapserver erreichbar ist? ich habe ja nur das client object um die funktionen auszuführen.
            Das sollte im WSDL-Dokument drin stehen, das mir leider unbekannt ist.

            Kommentar


            • #7
              also der cliemt zieht die aus dem wsdl?

              mich irritiert noch die doppelte funktion, muss ich die vielleeicht mit übergeben?



              Kommentar


              • #8
                Zitat von mindthegap Beitrag anzeigen
                also der cliemt zieht die aus dem wsdl?
                Ja, siehe Beispiel:

                https://www.w3.org/2001/04/wsws-proc...uche/wsdl.html

                Zitat von mindthegap Beitrag anzeigen
                mich irritiert noch die doppelte funktion, muss ich die vielleeicht mit übergeben?
                Was meinst du mit "doppelte Funktion"?

                Kommentar


                • #9
                  xyzRfcGetOrderUrlResponse xyzRfcGetOrderUrl(xyzRfcGetOrderUrl $parameters)
                  das, normalerweise kenne ich nur funktionresponse funktion (parameter)

                  Kommentar


                  • #10
                    Zitat von mindthegap Beitrag anzeigen
                    xyzRfcGetOrderUrlResponse xyzRfcGetOrderUrl(xyzRfcGetOrderUrl $parameters)
                    das, normalerweise kenne ich nur funktionresponse funktion (parameter)
                    Das ist ja auch der Fall.

                    xyzRfcGetOrderUrlResponse ist der Rückgabewert.
                    xyzRfcGetOrderUrl ist die Funktion.
                    xyzRfcGetOrderUrl ist der Parameter.

                    Warum Parametertyp und Funktion hier gleich heißen ist ungewöhnlich und nicht gerade verständlich, aber AFAIK sollte das kein Hindernis sein. Schön ist das natürlich nicht.

                    Kommentar


                    • #11
                      aaah verstehe. dann muss ich dievariable durch die funktionsnamen ersetzten
                      $param = Array(xyzRfcGetOrderUrl=> '0002474364');

                      ich ckeck morgen die url für denservice. kann das von zuhause nicht antesten.
                      grüsse

                      Kommentar


                      • #12
                        ok, neuer stand, ich gebe die service url jetzt mit location => serviceurl mit und erhalte einen neuen fehler

                        (VersionMismatch ) - Wrong Version

                        der Request sieht gut aus, und der Header auch:
                        /sap/bc/srt/wsdl/flv_10002P111AD1/sdef_url/XYZ_SERVICE_GET_ORDER_URL?sap-client=100 HTTP/1.1 Host: xxx.de Connection: Keep-Alive User-Agent: PHP-SOAP/5.5.38 Content-Type: text/xml; charset=utf-8 SOAPAction: "urn:sap-com:document:sap:soap:functions:mc-style:ZBOO_SERVICE_GET_ORDER_URLyzRfcGetOrderUrlRequest" Content-Length: 308 Authorization: Basic VEVTVC1XRUJTRVJWOjEtelhnUCMxOA==

                        an was kann das jetzt liegen?
                        genauerer Fehler ist : "VersionMismatch" ["faultcodens"]=> string(41) "http://schemas.xmlsoap.org/soap/envelope/" } Caught an Error: (VersionMismatch ) - Wrong VersionNULL

                        Kommentar


                        • #13
                          Du hättest nach der Meldung auch mal googeln können.

                          https://stackoverflow.com/a/18861188

                          Kommentar


                          • #14
                            das habe ich schon gemacht, aber das ist es nicht...

                            Kommentar


                            • #15
                              Es ist halt schwer dazu etwas zu sagen, wenn API und WSDL unbekannt sind. Es kann auch ein Fehler im WSDL schuld sein.

                              Kommentar

                              Lädt...
                              X