Ankündigung

Einklappen
Keine Ankündigung bisher.

API ansprechen als Post Request vom Webserver aus

Einklappen

Neue Werbung 2019

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

  • API ansprechen als Post Request vom Webserver aus

    Hallo,

    ich kann bei unserem Lieferanten über eine API Schnittstelle zugreifen, aller Dings nur über eine feste IP Adresse.
    Also nutze ich meinen Webspace den der Server hat eine Feste IP, diese habe ich beim Lieferanten angegeben.

    Ich kann alles Abfragen wie z.B. Lager bestände usw. Ich rufe in meinem Browser meine Domain/xyz.php auf.


    Dort wird dieses kleine Script aufgerufen und ich bekomme alle Daten die ich benötige.

    <?php

    $_url = "https://www.innocigs.com/xmlapi/api.php?cid=[Kundennummer]=[API-PASSWORT]&command=quantity_all";

    $_buffer = implode('', file($_url));
    echo $_buffer;
    ?>



    Mein Problem ist allerdings eine Bestellung per Post Request an API Schnittstelle zu senden, da diese auch über die Feste IP kommen muss.
    Das bekomme ich nicht hin.
    habe schon viel probiert aber die Dropshiping Bestellung wird nicht angelegt beim Lieferanten.



    Ich habe eine Dokumentation dazu.

    Dropship_API_Dokumentation.pdf

    Wer kann mir da helfen? was würde es kosten?

  • #2
    Bei einem Kommentar im PHP-Handbuch gibts ein Beispiel zu einem POST-Request:

    https://www.php.net/manual/de/functi...nts.php#108309

    Kommentar


    • #3
      Zitat von hellbringer Beitrag anzeigen
      Bei einem Kommentar im PHP-Handbuch gibts ein Beispiel zu einem POST-Request:

      https://www.php.net/manual/de/functi...nts.php#108309
      Sorry verstehe das nicht.

      Bis hier kann ich folgen
      'header' => "Content-Type: text/xml\r\n".

      und weiß das ich bei $url = 'https://'.$https_server; die Adresse des Server angeben muss.

      Aber wie bekomme ich die Daten der Doku Beispiel: Inhalt von einem Post-Request:
      dort rein bzw. wohin damit. wahrscheinlich hier hin

      'content' => $body,



      brauche ich diese Zeile?
      "Authorization: Basic ".base64_encode("$https_user:$https_password")."\r \n",

      ich bin leider kein Programmierer

      Kommentar


      • #4
        Der Inhalt des Post-Requests muss in $body drin stehen.

        Wie du die API genau ansprechen musst, das sollte in der Doku der API stehen.

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen
          Der Inhalt des Post-Requests muss in $body drin stehen.

          Wie du die API genau ansprechen musst, das sollte in der Doku der API stehen.
          Ich probiere es mal das in den $body zu bekommen

          aber da liegt schon das Problem ich weiß nicht wie

          $body = file_get Content ?

          ich habe keine Ahnung


          Kommentar


          • #6
            Zitat von Vaper73 Beitrag anzeigen

            $body = file_get Content ?

            ich habe keine Ahnung

            nein da packst du einfach das xml rein, was in der doku steht, als string.
            wobei ich für POST requests schon eher CURL oder einen HTTP Client verwenden würde als mit file_get_contents herumzuhamplen
            sorry, shift-taste kaputt

            Kommentar


            • #7
              Zitat von Meister1900 Beitrag anzeigen

              nein da packst du einfach das xml rein, was in der doku steht, als string.
              wobei ich für POST requests schon eher CURL oder einen HTTP Client verwenden würde als mit file_get_contents herumzuhamplen
              das einfach darein packen. Das einfach ist schon das Problem

              $body = abcd

              und dann ist es drin? Ich habe von sowas leider keine Ahnung.

              habe schon folgendes probiert aber bekomme nur ne Fehlermeldung
              Diese Seite funktioniert nicht

              Domain.de kann diese Anfrage momentan nicht verarbeiten.

              HTTP ERROR 500

              hier was ich probiert habe

              PHP-Code:
              <?php

              $url 
              "https://www.innocigs.com/xmlapi/apiv2i.php";

              $curl curl_init($url);
              curl_setopt($curlCURLOPT_URL$url);
              curl_setopt($curlCURLOPT_POSTtrue);
              curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);

              $headers = array(
                 
              "Content-Type: application/xml",
              );
              curl_setopt($curlCURLOPT_HTTPHEADER$headers);

              $data = <<<DATA
              cid=[Kundennummer]&auth=[API-PASSWORT]&command=dropship&xml=<INNOCIGS_API_REQUEST>
              <DROPSHIPPING>
              <DROPSHIP>
              <DATA>
              <ORDERS_NUMBER>ORDER1</ORDERS_NUMBER>
              <SHIPPER>
              <COMPANY>test</COMPANY>
              <COMPANY2>Adresszeile2</COMPANY2>
              <FIRSTNAME>test</FIRSTNAME>
              <LASTNAME>test</LASTNAME>
              <STREET_ADDRESS>Teststr. 27</STREET_ADDRESS>
              <POSTCODE>58710</POSTCODE>
              <CITY>Menden</CITY>
              <COUNTRY_CODE>DE</COUNTRY_CODE>
              <EMAIL>xyz@xyz.de</EMAIL>
              <TELEPHONE>0123456789</TELEPHONE>
              </SHIPPER>
              <RECEIVER>
              <FIRSTNAME>Test</FIRSTNAME>
              <LASTNAME>Test</LASTNAME>
              <STREET_ADDRESS>Test 3</STREET_ADDRESS>
              <POSTCODE>58710</POSTCODE>
              <CITY>Menden</CITY>
              <COUNTRY_CODE>DE</COUNTRY_CODE>
              <BIRTHDAY>03.12.1973</BIRTHDAY>
              <EMAIL>xyz@xyz.de</EMAIL>
              </RECEIVER>
              </DATA>
              <PRODUCTS>
              <PRODUCT>
              <PRODUCTS_MODEL>KT100A10-BL-A</PRODUCTS_MODEL>
              <QUANTITY>1</QUANTITY>
              </PRODUCT>
              </PRODUCTS>
              </DROPSHIP>
              </DROPSHIPPING>
              </INNOCIGS_API_REQUEST>
              DATA;

              curl_setopt($curlCURLOPT_POSTFIELDS$data);

              //for debug only!
              curl_setopt($curlCURLOPT_SSL_VERIFYHOSTfalse);
              curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);

              Kommentar


              • #8
                Ich bekomme es einfach nicht hin.

                Es ist für mich ein Hexenwerk während es für andere wahrscheinlich einfach ist.

                Kommentar


                • #9
                  Zitat von Vaper73 Beitrag anzeigen
                  Diese Seite funktioniert nicht


                  Domain.de kann diese Anfrage momentan nicht verarbeiten.

                  HTTP ERROR 500
                  Ins php errorlog schauen....

                  und vom anbieter ein beispiel als curl request geben lassen und dann das hier nutzen:
                  https://incarnate.github.io/curl-to-php/
                  sorry, shift-taste kaputt

                  Kommentar


                  • #10
                    Zitat von Meister1900 Beitrag anzeigen

                    und vom anbieter ein beispiel als curl request geben lassen und dann das hier nutzen:
                    https://incarnate.github.io/curl-to-php/
                    Danke das war schonmal eine große Hilfe.

                    Könnte mich gerade nur über mich selbst ärgern.

                    Da ich die Antwort des Servers bzw. die Rückmeldung sowie es in der Doku steht, nicht angezeigt bekomme, weiß ich nicht wann es funktioniert hat oder wann nicht.
                    Denn irgendwann hat es 1x funktioniert, doch da nach, nach vielleicht einer Änderung hat es nicht mehr funktioniert.

                    jetzt muss ich probieren, was funktioniert oder was nicht.

                    Das ist mein letzter Versuch der nicht geht, erkennt jemand einen Fehler

                    PHP-Code:
                    <?php

                    $ch 
                    curl_init();

                    curl_setopt($chCURLOPT_URL'https://www.innocigs.com/xmlapi/apiv2.php');
                    curl_setopt($chCURLOPT_RETURNTRANSFER1);
                    curl_setopt($chCURLOPT_POST1);
                    curl_setopt($chCURLOPT_POSTFIELDS"cid=[Kundennummer]&auth=[API-PASSWORT]&command=dropship&xml=<INNOCIGS_API_REQUEST><DROPSHIPPING><DROPSHIP><DATA><ORDERS_NUMBER>ORDER321</ORDERS_NUMBER><SHIPPER><COMPANY>Absender-Firma</COMPANY><COMPANY2>Adresszeile2</COMPANY2><FIRSTNAME>Vorname Anpsrechpartner</FIRSTNAME><LASTNAME>Nachname Anpsrechpartner</LASTNAME><STREET_ADDRESS>Teststrasse 10</STREET_ADDRESS><POSTCODE>22761</POSTCODE><CITY>Hamburg</CITY><COUNTRY_CODE>DE</COUNTRY_CODE><EMAIL>absender@dropship.com</EMAIL><TELEPHONE>040 123456</TELEPHONE></SHIPPER><RECEIVER><COMPANY>Empfänger-Firma</COMPANY><COMPANY2>Adressezeile2</COMPANY2><FIRSTNAME>Vorname Empfänger</FIRSTNAME><LASTNAME>Nachname Empfänger</LASTNAME><STREET_ADDRESS>Teststrasse 23</STREET_ADDRESS><POSTCODE>22761</POSTCODE><CITY>Hamburg</CITY><COUNTRY_CODE>DE</COUNTRY_CODE><BIRTHDAY>23.6.1989</BIRTHDAY><EMAIL>kunde@dropship.com</EMAIL></RECEIVER></DATA><PRODUCTS><PRODUCT><PRODUCTS_MODEL>IC10000L10-TE-3</PRODUCTS_MODEL><QUANTITY>2</QUANTITY></PRODUCT><PRODUCT><PRODUCTS_MODEL>IC10000AIO-11</PRODUCTS_MODEL><QUANTITY>1</QUANTITY></PRODUCT></PRODUCTS></DROPSHIP></DROPSHIPPING></INNOCIGS_API_REQUEST>");

                    $headers = array();
                    $headers[] = 'Content-Type: application/x-www-form-urlencoded';
                    curl_setopt($chCURLOPT_HTTPHEADER$headers);

                    $result curl_exec($ch);
                    if (
                    curl_errno($ch)) {
                        echo 
                    'Error:' curl_error($ch);
                    }
                    curl_close($ch);


                    ?>

                    Kommentar


                    • #11
                      Ich habs, die Bestellung funktioniert. Nur kann ich die Antwort des Servers nicht sehen.
                      Gibt es eine Möglichkeit, diese auch sichtbar zu machen?

                      Des Weiteren, würde ich gern etwas ändern. Weiß aber nicht wie.

                      Mein aktueller Code lautet wie folgt:
                      PHP-Code:
                      <?php

                      $ch 
                      curl_init();

                      curl_setopt($chCURLOPT_URL'https://www.innocigs.com/xmlapi/apiv2.php');
                      curl_setopt($chCURLOPT_RETURNTRANSFER1);
                      curl_setopt($chCURLOPT_POST1);
                      curl_setopt($chCURLOPT_POSTFIELDS"cid=[Kundennummer]&auth=[API-PASSWORT]&command=dropship&xml=<INNOCIGS_API_REQUEST><DROPSHIPPING><DROPSHIP><DATA><ORDERS_NUMBER>ORDER321</ORDERS_NUMBER><SHIPPER><COMPANY>Absender-Firma</COMPANY><COMPANY2>Adresszeile2</COMPANY2><FIRSTNAME>Vorname Anpsrechpartner</FIRSTNAME><LASTNAME>Nachname Anpsrechpartner</LASTNAME><STREET_ADDRESS>Teststrasse 10</STREET_ADDRESS><POSTCODE>22761</POSTCODE><CITY>Hamburg</CITY><COUNTRY_CODE>DE</COUNTRY_CODE><EMAIL>absender@dropship.com</EMAIL><TELEPHONE>040 123456</TELEPHONE></SHIPPER><RECEIVER><COMPANY>Empfänger-Firma</COMPANY><COMPANY2>Adressezeile2</COMPANY2><FIRSTNAME>Vorname Empfänger</FIRSTNAME><LASTNAME>Nachname Empfänger</LASTNAME><STREET_ADDRESS>Teststrasse 23</STREET_ADDRESS><POSTCODE>22761</POSTCODE><CITY>Hamburg</CITY><COUNTRY_CODE>DE</COUNTRY_CODE><BIRTHDAY>23.6.1989</BIRTHDAY><EMAIL>kunde@dropship.com</EMAIL></RECEIVER></DATA><PRODUCTS><PRODUCT><PRODUCTS_MODEL>IC10000L10-TE-3</PRODUCTS_MODEL><QUANTITY>2</QUANTITY></PRODUCT><PRODUCT><PRODUCTS_MODEL>IC10000AIO-11</PRODUCTS_MODEL><QUANTITY>1</QUANTITY></PRODUCT></PRODUCTS></DROPSHIP></DROPSHIPPING></INNOCIGS_API_REQUEST>");

                      $headers = array();
                      $headers[] = 'Content-Type: application/x-www-form-urlencoded';
                      curl_setopt($chCURLOPT_HTTPHEADER$headers);

                      $result curl_exec($ch);
                      if (
                      curl_errno($ch)) {
                          echo 
                      'Error:' curl_error($ch);
                      }
                      curl_close($ch);


                      ?>

                      Da curl_setopt($ch, CURLOPT_POSTFIELDS sich immer ändert oder zumindest ein Teil davon,
                      ist meine Frage?

                      kann ich

                      curl_setopt($ch, CURLOPT_POSTFIELDS, "cid=[Kundennummer]&auth=[API-PASSWORT]&command=dropship&xml=<INNOCIGS_API_REQUEST>... </INNOCIGS_API_REQUEST>");

                      in

                      curl_setopt($ch, CURLOPT_POSTFIELDS, $Daten);

                      ersetzen und dann

                      $daten = "cid=[Kundennummer]&auth=[API-PASSWORT]&command=dropship&xml=<INNOCIGS_API_REQUEST>... </INNOCIGS_API_REQUEST>"


                      Wie kann man dann $Daten füllen mit neuen Daten bevor das ausgeführt wird?


                      und wie kann man eventuell die Rückmeldung des Servers sichtbar machen.
                      Denn die sollte so aussehen.

                      PHP-Code:
                      <?xml version="1.0" encoding="utf-8"?>
                      <INNOCIGS_API_RESPONSE>
                      <DROPSHIPPING>
                      <DROPSHIP>
                      <ORDERS_NUMBER>ORDER321</ORDERS_NUMBER>
                      <STATUS>OK</STATUS>
                      <MESSAGE>Dropship erfolgreich eingetragen</MESSAGE>
                      <DROPSHIP_ID>243</DROPSHIP_ID>
                      <ORDERS_ID>1126708</ORDERS_ID>
                      </DROPSHIP>
                      <DROPSHIP>
                      <ORDERS_NUMBER>ORDER324</ORDERS_NUMBER>
                      <STATUS>NOK</STATUS>
                      <MESSAGE>Dropship fehlgeschlagen</MESSAGE>
                      <ERRORS>
                      <ERROR>
                      <CODE>30001</CODE>
                      <MESSAGE>AS100AMZ nicht lieferbar</MESSAGE>
                      </ERROR>
                      </ERRORS>
                      <DROPSHIP_ID>-1</DROPSHIP_ID>
                      <ORDERS_ID>-1</ORDERS_ID>
                      </DROPSHIP>
                      ...
                      </DROPSHIPPING>
                      </INNOCIGS_API_RESPONSE>
                      Über weitere Tipps und Hilfe wäre ich sehr dankbar

                      Mit freundlichen Grüßen

                      Martin

                      Kommentar


                      • #12
                        die rückmeldung der servers steht in $result und die postdaten können natürlich auch in einer variablen stehen
                        sorry, shift-taste kaputt

                        Kommentar


                        • #13
                          Zitat von Meister1900 Beitrag anzeigen
                          die rückmeldung der servers steht in $result und die postdaten können natürlich auch in einer variablen stehen
                          Wie mache ich das sichtbar? denn es bleibt bei mir nur eine weiße Webseite.

                          Code:
                          $_result = implode('', file($_url));
                          echo $_result;
                          wie Lade ich dann die Daten in die variable?

                          Kommentar


                          • #14
                            Zitat von Vaper73 Beitrag anzeigen

                            denn es bleibt bei mir nur eine weiße Webseite.
                            Zitat von Meister1900 Beitrag anzeigen

                            Ins php errorlog schauen....
                            sorry, shift-taste kaputt

                            Kommentar


                            • #15
                              Hallo Vaper73,

                              zufällig bin ich offizieller Partner von InnoCigs und habe bereits eine vollständige PHP-Anbindung zu InnoCigs realisiert.

                              InnoCigs bietet Dir dabei zwei Möglichkeiten. Entweder nutzt Du die XML-Schnittstelle oder die JSON-Schnittstelle (einfach mal die aktuelle Schnittstellenbeschreibung von InnoCigs anfordern).
                              In beiden Fällen macht ein CURL-Aufruf in PHP Sinn.


                              Bei der JSON-Schnittstelle kannst Du die Authentifizierung wie folgt vornehmen:

                              PHP-Code:
                              $headers = [          
                              'Auth: '.INNOCIGS_CUSTOMER.':'.INNOCIGS_PASSWORD];         
                              curl_setopt($chCURLOPT_HTTPHEADER$headers); 
                              In der XML-Schnittstelle machst Du die Authentifizierung direkt in der URL:
                              PHP-Code:
                              $url 'https://www.innocigs.com/xmlapi/api.php?cid=KUNDENUMMER&auth=APIPASSWORD&command=products'
                              Alternativ könntest Du diese auch über die Felder mitsenden.

                              PHP-Code:

                              $myArray 
                              = [
                              'erstesFeld' => '',
                              'zweitesFeld' => '',
                              ]

                              curl_setopt($chCURLOPT_CUSTOMREQUEST"POST");
                              curl_setopt($chCURLOPT_POSTFIELDS$myArray); 
                              Zur Ausgabe der Antwort von InnoCigs:
                              PHP-Code:
                              $response curl_exec($ch);
                              ...
                              ...
                              ...

                              print_r($response); 
                              Wenn Du es ganz schön haben möchtest:

                              PHP-Code:
                              print_r("<pre>");
                              print_r($response);
                              print_r("</pre>"); 
                              Grundsätzlich würde ich Dir empfehlen, erstmal die Basics von PHP zu lernen.

                              Wenn Du noch Fragen hast oder Hilfe bei einer PHP-Anbindung mit InnoCigs benötigst, kannst Du mir auch gerne eine PN senden.

                              Kommentar

                              Lädt...
                              X