Hi,
Ik heb een WSDL, te vinden: https://services.signet.nl/webservice.wsdl
Nou moet ik daar, zoals je kan zien, 2 "arrays" returnen (fiberRows en dslRows).
Simpele vraag: Hoe doe ik dit?
Als ik een multi dimensionale array maak (in het grof):
En die dan simpelweg ga returnen in mijn functie (die ik met addFunction() toe heb gevoegd), dan is het resultaat dit:
SOAP-ERROR: Encoding: object hasn't 'network' property
$fiber is dan de boven genoemde array.
Dus ik pas de code een stukje aan:
Dan krijg ik het resultaat dat het wel binnenkomt op de client, met deze code:
Het resultaat is dan een lege fiberRows array:
Terwijl het als volgt binnenkomt (met dank aan de laatste regel):
Dus: het komt wel binnen dan; maar PHP snapt het niet helemaal?
Enig idee hoe dit opgelost moet worden?
PS: De dslRows heb ik er nog even uit gelaten in de server, omdat ik eerst de fiberRows wil laten werken.
Oh, en bepaalde data (postcodes) zijn verranderd vanwege privacy.
Groetjes
Ik heb een WSDL, te vinden: https://services.signet.nl/webservice.wsdl
Nou moet ik daar, zoals je kan zien, 2 "arrays" returnen (fiberRows en dslRows).
Simpele vraag: Hoe doe ik dit?
Als ik een multi dimensionale array maak (in het grof):
code:
1
2
3
4
5
6
7
8
9
| Array ( [0] => Array ( [network] => "bla", [bla] => "blabla", etc ) [1] => Array ( etc... ) ) |
En die dan simpelweg ga returnen in mijn functie (die ik met addFunction() toe heb gevoegd), dan is het resultaat dit:
SOAP-ERROR: Encoding: object hasn't 'network' property
PHP:
1
| return array("fiberRows" => $fiber, "dslData" => $dslData); |
$fiber is dan de boven genoemde array.
Dus ik pas de code een stukje aan:
PHP:
1
2
| $fiber = new SoapVar($fiber, SOAP_ENC_ARRAY); return array("fiberRows" => $fiber, "dslData" => $dslData); |
Dan krijg ik het resultaat dat het wel binnenkomt op de client, met deze code:
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
| <?php ini_set('display_errors', 1); ini_set('soap.wsdl_cache_ttl', 1); // Alleen in de test fase aan laten staan!! error_reporting(E_ALL); $auth = new StdClass(); $auth->username = "******"; $auth->password = "*******"; $check = new StdClass(); $check->postcode = "1234AB"; $check->number = "9"; try { // Maak een Client aan $client = new SoapClient("https://services.signet.nl/webservice.wsdl", array("trace" => 1)); $auth = new SoapHeader("urn:signet", "authentication", $auth, false); $client->__setSoapHeaders(array($auth)); // Doe een postcode check $res = $client->postcodeCheck($check); // En zet de data op het scherm echo '<pre>'.print_r($res, true).'</pre>'; } catch (Exception $e) { // Oops! Er is iets fout gegaan. echo '<h1>Caught Exception</h1>'; echo '<pre>'.htmlentities($e).'</pre>'; } echo $client->__getLastResponse(); ?> |
Het resultaat is dan een lege fiberRows array:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Array ( [fiberRows] => stdClass Object ( ) [dslRows] => stdClass Object ( ) [dslData] => stdClass Object ( [location] => *knip* [bname] => *knip* [distance] => 90 ) ) |
Terwijl het als volgt binnenkomt (met dank aan de laatste regel):
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <SOAP-ENV:Envelope> <SOAP-ENV:Body> <fiberRows> <ns1:Map> <item> <key>available</key> <value>true</value> </item> <item> <key>distance</key> <value>107</value> </item> (.. ETC ..) |
Dus: het komt wel binnen dan; maar PHP snapt het niet helemaal?
Enig idee hoe dit opgelost moet worden?
PS: De dslRows heb ik er nog even uit gelaten in de server, omdat ik eerst de fiberRows wil laten werken.
Oh, en bepaalde data (postcodes) zijn verranderd vanwege privacy.
Groetjes