1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

PHP und JSON Restful

Dieses Thema im Forum "PHP" wurde erstellt von bambid, 15. Februar 2017.

  1. bambid

    bambid Mitglied

    Hallo und guten Tag

    Ich habe folgende Ausgangslage:
    Code (Text):
    1. {"request": {"filter":"methodenname%04parameterkey1%05parameterwert1%06parameterkey2%05parameterwert2%06..."} }
    Dies habe ich so von meinem Support erhalten, so sollte ich mich dann Anmelden können. Doch leider bekomme ich das nicht hin. Ich erhalte immer die Rückmeldung:
    Code (Text):
    1. Array ( [REST] => Array ( [0] => Array ( [messageRequest] => fisExtAnmeld [messageResponse] => Fehlercode\u000502\u0008Anmeldung ist ungültig ) ) )
    folgendes sollte ich aber in etwa zurück bekommen:
    Code (Text):
    1. { "REST": [ { "messageRequest": "fisExtAnmeld", "messageResponse": "Fehlercode\\u000500" }, { "messageRequest": "fisExtAnmeld", "messageResponse": "termid\\u0005WEB0010018002824\\u0006email\\u0005mail@mail.fe\\u0006berecht\\u0005WEAS\\u0008WEAO\\u0008WEIN\\u0008WEKK\\u0008WERE\\u0008WEST\\u0008WEWO\\u0008WEAU\\u0008PRWF\\u0008PRAU\\u0008WECR\\u0008WIKU\\u0008WIVM\\u0008WIAU\\u0008WIVE\\u0008WIAP\\u0008WMEM\\u0008WIOB\\u0008WIOS\\u0006startseite\\u0005\\u0006KundenNr\\u000517171\\u0006Name\\u0005Felix und Eugen Bärtsch,\\u0006Ort\\u0005Mels\\u0006Beznr\\u000519876\\u0006Userident\\u0005mail@mail.fe" } ] }
    Also habe ich irgendwie in meiner Abfrage einen Fehler? Davon gehe ich aus, so sieht meine generierte Abfrage aus:

    PHP:
    1. $jsonab = array('request'=>array(
    2.    'filter'=>'fisExtAnmeld'),
    3.    'Userid'=>'userli',
    4.    'Passwort'=>'passwortli');
    Dies rufe ich so auf:
    PHP:
    1. curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($jsonab));
    der Filter wird richtig Angesprochen doch der Benutzer und das Passwort wird nicht richtig weiter gegeben. Ich stehe auf dem Schlauch, wie kann ich das beheben.

    Danke
    bambid
     
    Zuletzt bearbeitet: 15. Februar 2017
  2. Yaslaw

    Yaslaw n/a Moderator

    Als erstes solltest du dir sicher mal den generierten Json-String ausgeben lassen. Ist immer gubt zum debuggen.

    Zu deinem Problem. Vor passwortli fehlt ein '
    Wenn ich das Mit dem zusätzlichen ' teste bekomme ich den folgenden String
    Code (Text):
    1. {"request":{"filter":"fisExtAnmeld"},"Userid":"userli","Passwort":"passwortli"}
    Der passt mit keinem deiner geposteten Strings überein.
    Sollten userid und password als Parameterwert übergeben werden? Und bist du Sicher, dass die Paramternamen GrossKleinschreibung sein soll?
    etwa so? Das würde etwa der Vorlage entsprechen (keine Ahnung was die04, 05 etc. in der Vorlage sollen)
    Code (Text):
    1. {"request":{"filter":"fisExtAnmeld%Userid%userli%Passwort%passwortli"} }
    Das währe dann
    Code (PHP):
    1. $jsonab = array(
    2.     'request' => array(
    3.         'filter'=> implode('%',
    4.             array('fisExtAnmeld', 'Userid', 'userli', 'Passwort', 'passwortli')
    5.         )
    6.     )
    7. );
    8. echo json_encode($jsonab);
     
    Zuletzt bearbeitet: 15. Februar 2017
  3. bambid

    bambid Mitglied

    Hallo Danke dir

    das mit dem passwortli ist mir aufgefallen, als ich es gepostet hatte und habe es gleich korrigiert aber du warst anscheinend schneller.
    Anscheinend müssten Usernamen und Passwort als Parameter weitergegeben werden, doch kann ich mit dem Unterteiler %05 und %06 wie auch %04 nichts anfangen. Sie tauchen dann aber in dem Code welchen ich zurückbekommen sollte als u0005/u0006/u0004 wieder auf.

    Aber das übersteigt meine Vorstellungskraft.
    Gruss Bambid
     
  4. Yaslaw

    Yaslaw n/a Moderator

    Dann musst du nachfrage. Das ist eine Definition der anderen Seite.
    Frag einfach nach, wie der String genau aussehen muss. Und dann können wir den auch zusammensetzen.
     
  5. bambid

    bambid Mitglied

    Besten Dank für deine Hilfe

    Ich war schon lange nicht mehr Hier, und es ist noch immer der gleiche super support wie früher.
    Ich werde nachfragen, doch denke ich, dass wir mit dem schon ein stückweit kommen werden.

    sonst melde ich mich nochmalst.

    Gruss bambiD
     
  6. bambid

    bambid Mitglied

    Absolut der Hammer! Danke es funktioniert. Die Anfrage läuft. Danke für die Tipps
     
  7. Yaslaw

    Yaslaw n/a Moderator

    Und wie sieht die Lösung aus?
     
  8. bambid

    bambid Mitglied

    Eigentlich nicht anders als du es mir angegeben hast habe das System dann übertölpelt und habe dies so eingegebeb:
    PHP:
    1. $jsonab = array(
    2.     'request' => array(
    3.         'filter'=> implode('%',
    4.             array('fisExtAnmeld', '40Userid', '50userli', '60Passwort', '50passwortli')
    5.         )
    6.     )
    7. );
    8. echo json_encode($jsonab);
    Danke nochmals

    Gruss bambiD
     
  9. bambid

    bambid Mitglied

    Die Anmeldung hat geklappt, doch nun sollte ich die "termid" auslesen.
    Code (Text):
    1. {"REST":[{"messageRequest":"fisExtAnmeld","messageResponse":"Fehlercode\\u000500"},{"messageRequest":"fisExtAnmeld","messageResponse":"termid\\u0005WEB0123456789012\\u0006email\\u0005mail@mail.com\\u0006berecht\\u0005WEAU\\u0006startseite\\u0005\\u0006KundenNr\\u0005200001\\u0006Name\\u0005Firma\\u0006Ort\\u0005Ortschaft\\u0006Beznr\\u0005200001\\u0006Userident\\u0005User\\u0006firma\\u00051"}]}
    Doch mit dem Code:
    PHP:
    1. echo "<br>Termid: ".$response->1->messageResponse;
    Erhalte ich nur einen Parseerror:
    Parse error: syntax error, unexpected '1' (T_LNUMBER), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in

    Doch möchte ich doch einmal die Linie "messageResponse" aus dem Array 1 auslesen:

    REST:

    0:
    messageRequest => fisExtAnmeld
    messageResponse => Fehlercode\u000500

    1:
    messageRequest => fisExtAnmeld
    messageResponse => termid\u0005WEB0123456789012\u0006email\u0005mail@mail.com\u0006berecht\u0005WEAU\u0006startseite\u0005\u0006KundenNr\u0005200001\u0006Name\u0005Firma\u0006Ort\u0005Ortschaft\u0006Beznr\u0005200001\u0006Userident\u0005User\u0006firma\u00051

    Wie kann ich das FettKursiveUnterstrichene aus dem Fetten herauslesen?

    Leider konnte ich keine möglichkeiten finden wie ich den Container 1 Anspreche. wenn dort Main stehen würde wie bei der Openweathermaps-API dann würde es klappen.

    Sorry about that.

    Danke für die Hilfe
    bambiD
     
  10. Yaslaw

    Yaslaw n/a Moderator

    Als erstes mal ein Testcode.
    Achtung, da ich in ... teste, muss ich alle \ verdoppeln. Ich glaube, die muss dann alle (im ganzen Code) \\ wieder in \ wandeln.
    Code (PHP):
    1. <pre>
    2. <?php
    3. $json = '{"REST":[{"messageRequest":"fisExtAnmeld","messageResponse":"Fehlercode\\\\u000500"},{"messageRequest":"fisExtAnmeld","messageResponse":"termid\\\\u0005WEB0123456789012\\\\u0006email\\\\u0005mail@mail.com\\\\u0006berecht\\\\u0005WEAU\\\\u0006startseite\\\\u0005\\\\u0006KundenNr\\\\u0005200001\\\\u0006Name\\\\u0005Firma\\\\u0006Ort\\\\u0005Ortschaft\\\\u0006Beznr\\\\u0005200001\\\\u0006Userident\\\\u0005User\\\\u0006firma\\\\u00051"}]}';
    4.  
    5. $obj = json_decode($json);
    6. print_r($obj);
    7. ?>
    8. </pre>
    Gibt die folgende Ausgabe:
    Code (Text):
    1. stdClass Object (
    2.    [REST] => Array (
    3.            [0] => stdClass Object (
    4.                    [messageRequest] => fisExtAnmeld
    5.                    [messageResponse] => Fehlercode\u000500
    6.                )
    7.            [1] => stdClass Object (
    8.                    [messageRequest] => fisExtAnmeld
    9.                    [messageResponse] => termid\u0005WEB0123456789012\u0006email\u0005mail@mail.com\u0006berecht\u0005WEAU\u0006startseite\u0005\u0006KundenNr\u0005200001\u0006Name\u0005Firma\u0006Ort\u0005Ortschaft\u0006Beznr\u0005200001\u0006Userident\u0005User\u0006firma\u00051
    10.                )
    11.        )
    12. )
    Jetzt sehen wir mal den Aufbau. Dann angeln wir uns mal zur Antwort durch
    Code (PHP):
    1. //Pfad zum String
    2. $response = $obj->REST[1]->messageResponse;
    Ich erkenne, dass \u0005 die Titel von den Werten trennt und \u0006 die Gruppen voneinander
    Ich splitte also mal auf undmache einen schönnen Array draus
    Code (PHP):
    1. $parts = preg_split('/\\\\u000[56]/', $response);
    2. $nodes = array();
    3. for($i = 0; $i< count($parts)/2; $i++){
    4.     $nodes[$parts[$i*2]] = $parts[$i*2+1];  
    5. }
    6. print_r($nodes);
    Code (Text):
    1. Array
    2. (
    3.    [termid] => WEB0123456789012
    4.    [email] => mail@mail.com
    5.    [berecht] => WEAU
    6.    [startseite] =>
    7.    [KundenNr] => 200001
    8.    [Name] => Firma
    9.    [Ort] => Ortschaft
    10.    [Beznr] => 200001
    11.    [Userident] => User
    12.    [firma] => 1
    13. )
    Und jetzt kannst du bequem darauf zugreifen
    Hier der vollständige Testcode
    Code (PHP):
    1. <pre>
    2. <?php
    3. $json = '{"REST":[{"messageRequest":"fisExtAnmeld","messageResponse":"Fehlercode\\\\u000500"},{"messageRequest":"fisExtAnmeld","messageResponse":"termid\\\\u0005WEB0123456789012\\\\u0006email\\\\u0005mail@mail.com\\\\u0006berecht\\\\u0005WEAU\\\\u0006startseite\\\\u0005\\\\u0006KundenNr\\\\u0005200001\\\\u0006Name\\\\u0005Firma\\\\u0006Ort\\\\u0005Ortschaft\\\\u0006Beznr\\\\u0005200001\\\\u0006Userident\\\\u0005User\\\\u0006firma\\\\u00051"}]}';
    4.  
    5. $obj = json_decode($json);
    6. $response  = $obj->REST[1]->messageResponse;
    7.  
    8. $pattern = '/\\\\u000[56]/';
    9. $parts = preg_split($pattern, $response);
    10. $nodes = array();
    11. for($i = 0; $i< count($parts)/2; $i++){
    12.     $nodes[$parts[$i*2]] = $parts[$i*2+1];  
    13. }
    14. print_r($nodes['termid']);
    15. ?>
    16. </pre>
    Code (Text):
    1. WEB0123456789012
    Viel Spass damit
     
  11. bambid

    bambid Mitglied

    Du bist einfach der hammer!

    Danke dir, dann kann ich sofern ich es benötige auch auf die anderen Parameter zugreifen.
    Hatte da eine between funkion gefunden, doch diese von dir ist viel einfacher! (wenn man weiss wie)

    Danke dir. Jetzt kann ich den Treat schliessen.

    Gruss bambiD
     
  12. bambid

    bambid Mitglied

    Sorry aber da habe ich mich zu früh gefreut. Brauche nochmals deinen kurzen Input.
    Code (Text):
    1. {"tt_IntAuftraege":[{"aufnrID":"233841A","endedatum":""},{"aufnrID":"233274A","endedatum":""},{"aufnrID":"232701F","endedatum":""},{"aufnrID":"233530B","endedatum":""},{"aufnrID":"232732F","endedatum":""},{"aufnrID":"233076A","endedatum":""},{"aufnrID":"233441A","endedatum":""},{"aufnrID":"233452F","endedatum":""},{"aufnrID":"233804D","endedatum":""},{"aufnrID":"233438A","endedatum":""},{"aufnrID":"233809M","endedatum":""},{"aufnrID":"232912B","endedatum":""},{"aufnrID":"232712A","endedatum":""},{"aufnrID":"233362A","endedatum":""},{"aufnrID":"233489C","endedatum":""}]}
    Dies ist die aktuelle Ausgabe. Aus diesem benötige ich nur noch die einzelnen Nummern in einem Array bzw. als weiteren String, denn mit diesen muss ich dann weiterarbeiten. Abe wie kann ich diese einzelnen entkapseln? Habe gedacht, dass ich das ich es mir einfach machen kann wie du es davor gemacht hast, doch das war nicht der fall. Der String sollte danach wie folgt aussehen:
    233841A,233274A,232701F,233530B....233489C

    doch habe ich keinen blassen dunst, wie ich das machen kann. Ich habe deine Pattern in alle möglichen versionen abgeleitet, doch dies hat so nicht geklappt.

    es würde mir auch schon helfen, wenn du mir einen Tip geben würdest. klar danke ich dir auch für die Lösung, doch das ist definitiv nicht deine Aufgabe.

    Gruss bambid
     
  13. Yaslaw

    Yaslaw n/a Moderator

    Es ist für mich einfacher gelich umzusetzen als gross zu erklären. Grad mit einem Json, den man wandelt.
    Gleiches vorgehen wie oben. Json in ein Objekt wandeln, dieses analysieren, alle aufnrid in einen Array abspitzen und diesen zu einem String zusammenzufassen
    Code (PHP):
    1. $json = '{"tt_IntAuftraege":[{"aufnrID":"233841A","endedatum":""},{"aufnrID":"233274A","endedatum":""},{"aufnrID":"232701F","endedatum":""},{"aufnrID":"233530B","endedatum":""},{"aufnrID":"232732F","endedatum":""},{"aufnrID":"233076A","endedatum":""},{"aufnrID":"233441A","endedatum":""},{"aufnrID":"233452F","endedatum":""},{"aufnrID":"233804D","endedatum":""},{"aufnrID":"233438A","endedatum":""},{"aufnrID":"233809M","endedatum":""},{"aufnrID":"232912B","endedatum":""},{"aufnrID":"232712A","endedatum":""},{"aufnrID":"233362A","endedatum":""},{"aufnrID":"233489C","endedatum":""}]}';
    2.  
    3. $obj = json_decode($json);
    4. print_r($obj);
    5.  
    6. $list = array();
    7. foreach($obj->tt_IntAuftraege as $auftrag){
    8.     $list[] = $auftrag->aufnrID;
    9. }
    10. print_r($list);
    11.  
    12. $string = implode(',', $list);
    13. print_r($string);
    Code (Text):
    1. stdClass Object(
    2.    [tt_IntAuftraege] => Array(
    3.            [0] => stdClass Object(
    4.                    [aufnrID] => 233841A
    5.                    [endedatum] =>
    6.                )
    7.            [1] => stdClass Object(
    8.                    [aufnrID] => 233274A
    9.                    [endedatum] =>
    10.                )
    11.            [2] => stdClass Object(
    12.                    [aufnrID] => 232701F
    13.                    [endedatum] =>
    14.                )
    15.            [3] => stdClass Object(
    16.                    [aufnrID] => 233530B
    17.                    [endedatum] =>
    18.                )
    19.           [4] => .......      
    20.        )
    21. )
    22. Array(
    23.    [0] => 233841A
    24.    [1] => 233274A
    25.    [2] => 232701F
    26.    [3] => 233530B
    27.    [4] => 232732F
    28.    [5] => 233076A
    29.    [6] => 233441A
    30.    [7] => 233452F
    31.    [8] => 233804D
    32.    [9] => 233438A
    33.    [10] => 233809M
    34.    [11] => 232912B
    35.    [12] => 232712A
    36.    [13] => 233362A
    37.    [14] => 233489C
    38. )
    39. 233841A,233274A,232701F,233530B,232732F,233076A,233441A,233452F,233804D,233438A,233809M,232912B,232712A,233362A,233489C
     
  14. Yaslaw

    Yaslaw n/a Moderator

    Nachtrag:
    Noch kürzer. wenn du beim json_decode den Flag setzt, dass das Resultat als Array zurückkommt, dann kannst du mit array_column gleich alle aufnrid auslesen
    Code (PHP):
    1. $arr = json_decode($json, true);
    2. print_r($arr);
    3.  
    4. $list=array_column($arr['tt_IntAuftraege'], 'aufnrID');
    5. print_r($list);
    6.  
    7. $string = implode(',', $list);
    8. print_r($string);
     
  15. bambid

    bambid Mitglied

    hmmm danke nochmals für deine Ausführungen. Jetzt ist mir auch klar wieso ich keine Resultate erhalten habe. ich habe den decode dieser zeile vergessen, da ich gedacht habe, dass ich diesen nicht nocheinmal machen muss. aber so habe ich wieder etwas gelernt. Alles funktioniert und alles klappt wie es sollte. ich lasse das Thema noch offen, da ich mit dem Projekt noch nicht ganz fertig bin, die Programierer der Software müssen von Ihrer seite her noch einen Code ausbessern, welchen ich noch nicht abfragen kann. dann werde ich wieder weiterschauen können.

    Danke nochmals für alles.

    Gruss bambiD
     
Die Seite wird geladen...
Ähnliche Themen - JSON Restful
  1. Kenox
    Antworten:
    4
    Aufrufe:
    367
  2. jackie05
    Antworten:
    1
    Aufrufe:
    454
  3. hups1803
    Antworten:
    4
    Aufrufe:
    1.155
  4. Webby0815
    Antworten:
    4
    Aufrufe:
    232
  5. cola1
    Antworten:
    3
    Aufrufe:
    544