Hoi allemaal. Ik ben voor iemand aan het proberen om via een buitenstaande website in te loggen op een externe server. Het bedrijf van wie de server is, heeft een soort handleiding waarin staat hoe men dat kan doen (in C#
).
Het komt er op neer dat je wat parameters opstuurt met een POST naar de server, dat je vervolgens de session ID terugkrijgt (die je gestuurd had) samen met een token. Deze moet vervolgens weer teruggestuurd worden waarna men een response zou moeten krijgen met failed of success. Klinkt eenvoudig, maar dat viel even tegen.
Het eerste deel leek mij niet zo ingewikkeld: gebruikersnaam en wachtwoord opvangen, een GUID genereren en dat alles in een URL stoppen met cURL. De server zou alles terugsturen naar een callback url. Daar begint het probleem, ik heb een tweede php script, waarnaar in die callbackurl gelinkt wordt. Het probleem is, is dat ik nu helemaal niet weet of dat script nu uitgevoerd wordt, en of ik de juiste gegevens nu terugkrijg. Laat staan dat ik weet hoe ik de gegevens terug krijg (de documentatie is nu zeker niet je van het).
Ik krijg daarentegen wel een response van de server. Maar veel stelt het niet voor: een statuscode 0 en een string met een 5 of 4 cijferig nummer (wat zeker geen token kan zijn, het voorbeeld was namelijk veel langer met letters gecombineerd). Daarnaast wordt ook een opmaakloze inlogpagina terug gestuurd.
Deel twee van de afhandeling:
Maar, de vraag is dus onder andere: hoe vang ik die response terug op. Kan ik dat het beste in één script houden, of moet ik dat verdelen. Het uitlezen van een GET request is het probleem niet, maar hoe weet ik nu of de server die request doorstuurd?
Heeft iemand hier meer ervaring mee? Of kan iemand mij uitleggen hoe dit nu werkelijk in z'n werk gaat. Heel ervaren met PHP ben ik zeker niet, maar met wat puzzelen kan ik meestal toch een heel eind komen.
Alvast bedankt!
Het komt er op neer dat je wat parameters opstuurt met een POST naar de server, dat je vervolgens de session ID terugkrijgt (die je gestuurd had) samen met een token. Deze moet vervolgens weer teruggestuurd worden waarna men een response zou moeten krijgen met failed of success. Klinkt eenvoudig, maar dat viel even tegen.
Het eerste deel leek mij niet zo ingewikkeld: gebruikersnaam en wachtwoord opvangen, een GUID genereren en dat alles in een URL stoppen met cURL. De server zou alles terugsturen naar een callback url. Daar begint het probleem, ik heb een tweede php script, waarnaar in die callbackurl gelinkt wordt. Het probleem is, is dat ik nu helemaal niet weet of dat script nu uitgevoerd wordt, en of ik de juiste gegevens nu terugkrijg. Laat staan dat ik weet hoe ik de gegevens terug krijg (de documentatie is nu zeker niet je van het).
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| $gebruikersnaam = $_POST["gebruikersnaam"]; $wachtwoord = $_POST["wachtwoord"]; $callback = 'http://*****/login_afhandeling.php'; $ssid = NieuwGUID(); echo "verzoek verzenden met ssid: ".$ssid." <br/>"; $url = ("https://******.nl/openlogin?sid=".$ssid."&callback=".$callback); echo $url.'<br/>'; $login = ('username='.$gebruikersnaam.'&password='.$wachtwoord); //echo $login.'<br/>'; //connectie open gooien $ch = curl_init(); //var_dump($login); //alle data instellen voor POST curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $login); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, true); $verbose = fopen('php://temp', 'rw+'); curl_setopt($ch, CURLOPT_STDERR, $verbose); //response code opvragen $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); //curl z'n werk laten doen $result = curl_exec($ch); //connectie afsluiten curl_close($ch); //response code printen op het scherm echo "Eerste response: ".$http_status."<br/>"; //var_dump($result); var_dump($http_status); !rewind($verbose); $verboseLog = stream_get_contents($verbose); echo "<br/>Verbose informatie:\n<pre>", htmlspecialchars($verboseLog), ",</pre>\n"; |
Ik krijg daarentegen wel een response van de server. Maar veel stelt het niet voor: een statuscode 0 en een string met een 5 of 4 cijferig nummer (wat zeker geen token kan zijn, het voorbeeld was namelijk veel langer met letters gecombineerd). Daarnaast wordt ook een opmaakloze inlogpagina terug gestuurd.
Deel twee van de afhandeling:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| echo $_REQUEST['token'].'<br/>'; // POST weer opvangen en terugsturen $token = $_REQUEST['token']; $sid = $_REQUEST['sid']; echo "<br/>".$token; echo "<br/>".$sid; $url = ("https://*****.nl/openlogin/confirm?sid=".$ssid."&callback=http://******/login_afhandeling.php&token=".$token); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo "Tweede response: ".$http_status.'<br/>'; var_dump($response); $session = array( 'token' => $token, 'ssid' => $sid); setcookie('session', serialize($session), time()+86400); |
Maar, de vraag is dus onder andere: hoe vang ik die response terug op. Kan ik dat het beste in één script houden, of moet ik dat verdelen. Het uitlezen van een GET request is het probleem niet, maar hoe weet ik nu of de server die request doorstuurd?
Heeft iemand hier meer ervaring mee? Of kan iemand mij uitleggen hoe dit nu werkelijk in z'n werk gaat. Heel ervaren met PHP ben ik zeker niet, maar met wat puzzelen kan ik meestal toch een heel eind komen.
Alvast bedankt!
[ Voor 42% gewijzigd door mr32 op 22-06-2013 14:04 . Reden: toevoeging script ]
