Hallo iedereen,
Ik heb een stuk code wat een SOAP API call opzet.
In deze code zit een 'checkforerror' functie.
En met deze functie heb ik een uitdaging.
Namelijk het volgende:
Wanneer ik de code uitvoer met de correcte instellingen dan komt er een melding van:
Notice: Undefined property: stdClass::$LastErrorCode in E:\xampp\htdocs\test\test.php on line 100
Notice: Undefined property: stdClass::$LastErrorDescription in E:\xampp\htdocs\test\test.php on line 101
Bovenstaande meldingen wil ik ondervangen / voorkomen.
Wanneer ik opzettelijk een fout introduceer dan krijgen we keurig netjes een melding:
There is another error!!:
E001.3: Invalid credentials [bbbbbbbbb-zzzz-yyyy-xxxx-ccccccccccc}
Om te onderzoeken wat het probleem is, heb ik m.b.v. print_r eerst gekeken welke data er in $rawresponse zitten.
Bij de "OpenSession" call krijgen we het volgende te zien:
Bij de "GetRelaties" call krijgen we het volgende te zien:
Bij de "GetRelaties" call worden er blijkbaar geen "waardes" mee gegeven aan "[ErrorMsg]".
Hierdoor is de code vanaf regel 100 incorrect wanneer deze uitgevoerd worden en veroorzaken de notificaties.
De gedachte is om een check te doen of er wel waardes in "ErrorMsg" zitten.
Zo ja, dan de regels vanaf 100 uitvoeren
Ik ben al op zoek geweest bij een aantal standaard PHP functies maar het lukt mij (nog) niet om uberhaupt een wisselende true of false waarde te generen.
Zie regel 73 tm 93
Zoals je in de code kunt zien heb ik 3 verschillende functies geprobeerd.
Ik vraag me af, of deze gedachte gang wel correct is om de checkforerror functie te verbeteren, of moet ik totaal iets anders gaan denken.
Voor zover mijn beginnende PHP kennis reikt, hebben we hier te maken met een object, wat een associative, multidimensional array is.
Kan iemand mij die juiste richting op sturen als beginnende PHP gebruiker ?
Het hoeft niet een pasklaar antwoord te zijn.
Maar tips wat de juiste functie is of aangeven waar mijn gedachtes fout gaan?
Hier onder nog de opgeschoonde code.
Ik heb een stuk code wat een SOAP API call opzet.
In deze code zit een 'checkforerror' functie.
En met deze functie heb ik een uitdaging.
Namelijk het volgende:
Wanneer ik de code uitvoer met de correcte instellingen dan komt er een melding van:
Notice: Undefined property: stdClass::$LastErrorCode in E:\xampp\htdocs\test\test.php on line 100
Notice: Undefined property: stdClass::$LastErrorDescription in E:\xampp\htdocs\test\test.php on line 101
Bovenstaande meldingen wil ik ondervangen / voorkomen.
Wanneer ik opzettelijk een fout introduceer dan krijgen we keurig netjes een melding:
There is another error!!:
E001.3: Invalid credentials [bbbbbbbbb-zzzz-yyyy-xxxx-ccccccccccc}
Om te onderzoeken wat het probleem is, heb ik m.b.v. print_r eerst gekeken welke data er in $rawresponse zitten.
Bij de "OpenSession" call krijgen we het volgende te zien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| Begin checkforerror function: Print_r value rawresponse: stdClass Object ( [OpenSessionResult] => stdClass Object ( [ErrorMsg] => stdClass Object ( [LastErrorCode] => [LastErrorDescription] => ) [SessionID] => {CBDB7DE0-D601-4BA2-9274-C22556D5D6BF} ) ) |
Bij de "GetRelaties" call krijgen we het volgende te zien:
code:
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
| Begin checkforerror function: Print_r value rawresponse: stdClass Object ( [GetRelatiesResult] => stdClass Object ( [ErrorMsg] => stdClass Object ( ) [Relaties] => stdClass Object ( [cRelatie] => stdClass Object ( [ID] => 19654949 ........ ........ ) ) ) ) |
Bij de "GetRelaties" call worden er blijkbaar geen "waardes" mee gegeven aan "[ErrorMsg]".
Hierdoor is de code vanaf regel 100 incorrect wanneer deze uitgevoerd worden en veroorzaken de notificaties.
De gedachte is om een check te doen of er wel waardes in "ErrorMsg" zitten.
Zo ja, dan de regels vanaf 100 uitvoeren
Ik ben al op zoek geweest bij een aantal standaard PHP functies maar het lukt mij (nog) niet om uberhaupt een wisselende true of false waarde te generen.
Zie regel 73 tm 93
Zoals je in de code kunt zien heb ik 3 verschillende functies geprobeerd.
Ik vraag me af, of deze gedachte gang wel correct is om de checkforerror functie te verbeteren, of moet ik totaal iets anders gaan denken.
Voor zover mijn beginnende PHP kennis reikt, hebben we hier te maken met een object, wat een associative, multidimensional array is.
Kan iemand mij die juiste richting op sturen als beginnende PHP gebruiker ?
Het hoeft niet een pasklaar antwoord te zijn.
Maar tips wat de juiste functie is of aangeven waar mijn gedachtes fout gaan?
Hier onder nog de opgeschoonde 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
| <?php // declare variabels try { $client = new SoapClient("https://link?WSDL"); $Username = "a@a.com"; $SecurityCode1 = "xxxxxx"; $SecurityCode2 = "bbbbbbbbb-zzzz-yyyy-xxxx-ccccccccccc"; // open session and get sessionid $params = array( "Username" => $Username, "SecurityCode1" => $SecurityCode1, "SecurityCode2" => $SecurityCode2 ); $response = $client->__soapCall("OpenSession", array($params)); checkforerror($response, "OpenSessionResult"); $SessionID = $response->OpenSessionResult->SessionID; // call for 1 specific relation $params = array( "SecurityCode2" => $SecurityCode2, "SessionID" => $SessionID, 'cFilter' => array( "Trefwoord" => "", "Code" => "DEB3", "ID" => 0 ) ); $response = $client->__soapCall("GetRelaties", array($params)); checkforerror($response, "GetRelatiesResult"); // close session $params = array( "SessionID" => $SessionID ); $response = $client->__soapCall("CloseSession", array($params)); } catch(SoapFault $soapFault) { echo '<strong>There is a SOAP error!!:</strong><br>'; echo $soapFault; echo "<hr>"; } // default error handling function checkforerror($rawresponse, $sub) { //here starts the trouble shooting code echo "Begin checkforerror function: <br> <br>"; echo "var_dump value sub: <br><br>"; var_dump ($sub); echo "<hr>"; echo "Print_r value rawresponse: <br>"; echo "<pre>"; print_r ($rawresponse); echo "</pre>"; echo "<hr>"; echo "Value: " . $sub; echo "<hr>"; //var_dump (isset($rawresponse)); //result => always bool(true) //var_dump (isset($rawresponse->$sub)); //result => always bool(true) //var_dump (isset($rawresponse->$sub->ErrorMsg)); //result => always bool(true) //var_dump (isset($rawresponse->$sub->ErrorMsg->LastErrorCode)); //result => always bool(true) //var_dump (isset($rawresponse->ErrorMsg)); //result => always bool(false) //var_dump (isset($rawresponse->ErrorMsg->LastErrorCode)); //result => always bool(false) //var_dump (isset($sub->ErrorMsg)); //result => always bool(false) //var_dump (isset($sub->LastErrorCode)); //result => always bool(false) //var_dump (property_exists($rawresponse, 'ErrorMsg')); //result => always bool(false) //var_dump (property_exists($rawresponse, 'LastErrorCode')); //result => always bool(false) //var_dump (property_exists($sub, 'ErrorMsg')); //result => always bool(false) //var_dump (property_exists($sub, 'LastErrorCode')); //result => always bool(false) //var_dump (array_key_exists($sub, $rawresponse)); //result => always bool(true) //var_dump (array_key_exists('sub->ErrorMsg', $rawresponse)); //result => always bool(true) //var_dump (array_key_exists('ErrorMsg', $sub)); //result => Warning: array_key_exists() expects parameter 2 to be array, string given //var_dump (array_key_exists('ErrorMsg', $rawresponse)); //result => always bool(false) //var_dump (array_key_exists('LastErrorCode', $rawresponse)); //result => always bool(false) //var_dump (array_key_exists('$sub->ErrorMsg->LastErrorCode', $rawresponse)); //result => always bool(false) //var_dump (array_key_exists('sub->ErrorMsg->LastErrorCode', $rawresponse)); //result => always bool(false) echo "<hr>"; //here ends the trouble shooting code $LastErrorCode = $rawresponse->$sub->ErrorMsg->LastErrorCode; $LastErrorDescription = $rawresponse->$sub->ErrorMsg->LastErrorDescription; if($LastErrorCode <> '') { echo '<strong>There is another error!!:</strong><br>'; echo $LastErrorCode . ': ' . $LastErrorDescription; echo "<hr>"; exit(); } } |