Enigszins opgelost, zie 2e post
Beste medetweakerts,
Ondertussen ben ik dik een week aan het pielen om een PHP Soap server/client aan de gang te krijgen en ben ik er spuug zat van :-)
Gisteren dacht ik de boel eindelijk aan de draai te hebben (ik kreeg in elk geval geen exceptions meer), maar na controle vanmorgen bleek dat mijn parameters in de aangeroepen (serverside) functie niet ingevuld worden. Het is vast iets kleins en doms wat ik over het hoofd zie, dus voel je vrij om mij uit te lachen :-)
Om het even kort samen te vatten, ik roep een functie getCard van mijn client op mijn server met een kaartnummer en een kaartcode op de volgende, korte manier:
Hierbij controleer ik in mijn server op $cardCode == "ABCD" en return dan een $valid = true en een waarde van 1.0, anders return ik een false met een 0. Je zou dus zeggen dat bovenstaande request een respons zou moeten genereren van true en 1.0 .. Helaas vinden de phpgoden van niet.
Het resultaat wat ik krijg (var_dump van de $result variabele, waarbij de "debug" een string is die tussen de blokhaken het meegekregen nummer en code moet teruggeven).
De functie wordt dus duidelijk wel aangeroepen, maar de parameters zijn leeg
Waar en/of waarom ga ik de mist in?
Hieronder de volledige code voor de liefhebber.
server.php
functions.php
client.php
Wsdl bestand
Eventueel kun je ook via http://peter.ropeit.nl:8080/soap_test/ de code testen.
Alvast bedankt, en nogmaals, voel vrij om me uit te lachen als het echt heel dom is, maar uit ervaring weet ik dat als je een week of meer met een (dom) programmeer probleem bezig bent je regelmatig ; en andere simpele zooi over het hoofd ziet :-)
*edit* sluithaakje vergeten
Beste medetweakerts,
Ondertussen ben ik dik een week aan het pielen om een PHP Soap server/client aan de gang te krijgen en ben ik er spuug zat van :-)
Gisteren dacht ik de boel eindelijk aan de draai te hebben (ik kreeg in elk geval geen exceptions meer), maar na controle vanmorgen bleek dat mijn parameters in de aangeroepen (serverside) functie niet ingevuld worden. Het is vast iets kleins en doms wat ik over het hoofd zie, dus voel je vrij om mij uit te lachen :-)
Om het even kort samen te vatten, ik roep een functie getCard van mijn client op mijn server met een kaartnummer en een kaartcode op de volgende, korte manier:
PHP:
1
2
3
4
5
6
7
8
9
| <?php ... $params = array( "cardNumber" => 12345, "cardCode" => "ABCD" ); ... $result = $soapClient->getCard($params); ?> |
Hierbij controleer ik in mijn server op $cardCode == "ABCD" en return dan een $valid = true en een waarde van 1.0, anders return ik een false met een 0. Je zou dus zeggen dat bovenstaande request een respons zou moeten genereren van true en 1.0 .. Helaas vinden de phpgoden van niet.
Het resultaat wat ik krijg (var_dump van de $result variabele, waarbij de "debug" een string is die tussen de blokhaken het meegekregen nummer en code moet teruggeven).
code:
1
2
3
4
5
6
7
8
9
| Result: object(stdClass)#2 (3) { ["isValid"]=> bool(false) ["cardValue"]=> float(0) ["debug"]=> string(27) "cardNumber: [] cardCode: []" } |
De functie wordt dus duidelijk wel aangeroepen, maar de parameters zijn leeg
Waar en/of waarom ga ik de mist in?
Hieronder de volledige code voor de liefhebber.
server.php
PHP:
1
2
3
4
5
6
7
| <?php require 'functions.php'; ini_set("soap.wsdl_cache_enabled", 0); // disabling WSDL cache $server = new SoapServer("backend.wsdl"); $server->addFunction("getCard"); $server->handle(); ?> |
functions.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php function getCard($cardNumber, $cardCode) { $cardValue = 0; $valid = false; if ($cardCode == "ABCD") { $valid = true; $cardValue = 1.00; } return array( 'isValid' => $valid, 'cardValue' => $cardValue, 'debug' => "cardNumber: [" . $cardNumber . "] cardCode: [" . $cardCode . "]" ); } ?> |
client.php
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
| <?php //client-test.php ini_set("soap.wsdl_cache_enabled", 0); // disabling WSDL cache $soapClient = new SoapClient("http://localhost/soap_test/backend.wsdl"); /* [DEBUG] */ echo "<pre>"; echo "Functions: \n"; $functions = $soapClient->__getFunctions(); print_r($functions); echo "\nTypes: \n"; $types = $soapClient->__getTypes(); print_r($types); /* [/DEBUG] */ /* Create some test parameters */ $params = array( "cardNumber" => 12345, "cardCode" => "ABCD" ); /* Try to call them at the soap server */ try { $result = $soapClient->getCard($params); } catch (SoapFault $exception) { echo "EXCEPTION " . $exception; } /* Print out the result */ echo "\nResult: \n"; var_dump($result); ?> |
Wsdl bestand
Eventueel kun je ook via http://peter.ropeit.nl:8080/soap_test/ de code testen.
Alvast bedankt, en nogmaals, voel vrij om me uit te lachen als het echt heel dom is, maar uit ervaring weet ik dat als je een week of meer met een (dom) programmeer probleem bezig bent je regelmatig ; en andere simpele zooi over het hoofd ziet :-)
*edit* sluithaakje vergeten