PHP und JSON Restful

bambid

Mitglied
Hallo und guten Tag

Ich habe folgende Ausgangslage:
Code:
{"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:
Array ( [REST] => Array ( [0] => Array ( [messageRequest] => fisExtAnmeld [messageResponse] => Fehlercode\u000502\u0008Anmeldung ist ungültig ) ) )

folgendes sollte ich aber in etwa zurück bekommen:
Code:
{ "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:
$jsonab = array('request'=>array(
   'filter'=>'fisExtAnmeld'),
   'Userid'=>'userli',
   'Passwort'=>'passwortli');

Dies rufe ich so auf:
PHP:
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:
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:
{"request":{"filter":"fisExtAnmeld"},"Userid":"userli","Passwort":"passwortli"}

Der passt mit keinem deiner geposteten Strings überein.
Code:
{"request": {"filter":"methodenname%04parameterkey1%05parameterwert1%06parameterkey2%05parameterwert2%06..."} }

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:
{"request":{"filter":"fisExtAnmeld%Userid%userli%Passwort%passwortli"} }
Das währe dann
PHP:
$jsonab = array(
    'request' => array(
        'filter'=> implode('%',
            array('fisExtAnmeld', 'Userid', 'userli', 'Passwort', 'passwortli')
        )
    )
);
echo json_encode($jsonab);
 
Zuletzt bearbeitet:
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
 
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.
 
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
 
Eigentlich nicht anders als du es mir angegeben hast habe das System dann übertölpelt und habe dies so eingegebeb:
PHP:
$jsonab = array(
    'request' => array(
        'filter'=> implode('%',
            array('fisExtAnmeld', '40Userid', '50userli', '60Passwort', '50passwortli')
        )
    )
);
echo json_encode($jsonab);

Danke nochmals

Gruss bambiD
 
Die Anmeldung hat geklappt, doch nun sollte ich die "termid" auslesen.
Code:
{"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:
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
 
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.
PHP:
<pre>
<?php
$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"}]}';

$obj = json_decode($json);
print_r($obj);
?>
</pre>
Gibt die folgende Ausgabe:
Code:
stdClass Object (
   [REST] => Array (
           [0] => stdClass Object (
                   [messageRequest] => fisExtAnmeld
                   [messageResponse] => Fehlercode\u000500
               )
           [1] => stdClass Object (
                   [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
               )
       )
)
Jetzt sehen wir mal den Aufbau. Dann angeln wir uns mal zur Antwort durch
PHP:
//Pfad zum String
$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
PHP:
$parts = preg_split('/\\\\u000[56]/', $response);
$nodes = array();
for($i = 0; $i< count($parts)/2; $i++){
    $nodes[$parts[$i*2]] = $parts[$i*2+1];  
}
print_r($nodes);
Code:
Array
(
   [termid] => WEB0123456789012
   [email] => mail@mail.com
   [berecht] => WEAU
   [startseite] =>
   [KundenNr] => 200001
   [Name] => Firma
   [Ort] => Ortschaft
   [Beznr] => 200001
   [Userident] => User
   [firma] => 1
)

Und jetzt kannst du bequem darauf zugreifen
Hier der vollständige Testcode
PHP:
<pre>
<?php
$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"}]}';

$obj = json_decode($json);
$response  = $obj->REST[1]->messageResponse;

$pattern = '/\\\\u000[56]/';
$parts = preg_split($pattern, $response);
$nodes = array();
for($i = 0; $i< count($parts)/2; $i++){
    $nodes[$parts[$i*2]] = $parts[$i*2+1];   
}
print_r($nodes['termid']);
?>
</pre>
Code:
WEB0123456789012

Viel Spass damit
 

Neue Beiträge

Zurück