Hallo,
Ik ben bezig met een ontwikkeling dat een ASP.NET omgeving met de PHP kant kan communiceren over SOAP berichten. Ik doe de PHP omgeving maar wil het kunnen testen door SOAP berichten door te sturen naar de server omgeving om te bekijken wat de response is.
Helaas loop ik dus tegen een probleem aan dat bij het maken van een request op 1 of andere manier niet de juiste request word opgesteld mbv de wsdl file.
En word de juiste request gemaakt naar mijn idee dan krijg ik de volgende melding;
"Procedure 'retrieve_product_information' not present"
Nu heb ik bekeken wat er aan de hand kan zijn en er word eigenlijk constant geroepen dat er caching problemen zijn en je die moet uitzetten. Tot mijn verbazing werkt dit niet, ik heb de caching al die tijd al uit staan tijdens de ontwikkeling.
Dit is mijn testclient code is simpel opgezet.
Daarnaast heb ik de volgende code als server opgezet.
Wanneer ik de versie van mijn wsdl gebruikt werkt alles perfect alleen zodra ik nu de nieuwe gebruik van de tegenpartij die met ASP kan werken doet het niks meer en krijg ik de "Procedure 'retrieve_product_information' not present" melding.
De nieuwe wsdl die ik van de tegenpartij heb gekregen is hier te bekijken (http://pastebin.com/9WyJpTJb)
Ik ben ten einde raad wat er nu aan de hand is heb er nog een aantal mensen naar laten kijken maar tot op heden zonder resultaat.
Ik ben bezig met een ontwikkeling dat een ASP.NET omgeving met de PHP kant kan communiceren over SOAP berichten. Ik doe de PHP omgeving maar wil het kunnen testen door SOAP berichten door te sturen naar de server omgeving om te bekijken wat de response is.
Helaas loop ik dus tegen een probleem aan dat bij het maken van een request op 1 of andere manier niet de juiste request word opgesteld mbv de wsdl file.
En word de juiste request gemaakt naar mijn idee dan krijg ik de volgende melding;
"Procedure 'retrieve_product_information' not present"
Nu heb ik bekeken wat er aan de hand kan zijn en er word eigenlijk constant geroepen dat er caching problemen zijn en je die moet uitzetten. Tot mijn verbazing werkt dit niet, ik heb de caching al die tijd al uit staan tijdens de ontwikkeling.
Dit is mijn testclient code is simpel opgezet.
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
| function dump($mData,$sHeader='') { if (strlen($sHeader)>0){ echo "<br/><b>".$sHeader."</b>"; } echo ' <pre style="font-size: 10pt;">'; var_dump($mData); echo '</pre>'; }//END dump $sFunction_name = 'retrieve_product_information'; $oSoap_client = null; $sWSDL_Url = 'http://..../soap_api.php?wsdl'; $sInformation = '<retrieve_product_information xmlns="http://..../soap_api.php?wsdl"> <sku>3115030009</sku> </retrieve_product_information>'; try { $oSoap_client = new SoapClient($sWSDL_Url, array('trace' => 1, 'cache_wsdl' => WSDL_CACHE_NONE)); //trace => enables the use of __getLastRequest //$oSoap_client->__setLocation(str_replace('?wsdl', '', $sWSDL_Url)); dump($oSoap_client->__getFunctions(), '$oSoap_client->__getFunctions()'); $oSoap_var = new SoapVar($sInformation, 147); $oResult = $oSoap_client->__soapCall($sFunction_name, array($oSoap_var)); $sLast_request_string = $oSoap_client->__getLastRequest(); $sLast_request_response = $oSoap_client->__getLastResponse(); dump($oSoap_client->__getFunctions(), '$oSoap_client->__getFunctions()'); dump($oSoap_client->__getLastRequest(), '$oSoap_client->__getLastRequest()'); dump($oSoap_client->__getLastResponse(), '$oSoap_client->__getLastResponse()'); } catch(SoapFault $e) { dump($e); $sLast_request_string = null; if(!is_null($oSoap_client)) { $sLast_request_string = $oSoap_client->__getLastRequest(); } dump($sLast_request_string, __FUNCTION__, __LINE__); } |
Daarnaast heb ik de volgende code als server opgezet.
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
| <?php error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING ); ini_set("soap.wsdl_cache_enabled", 0); include_once(dirname (__FILE__).'/datamodules/settings.php'); include_once(dirname(__FILE__).'/engine/DDC_framework.php'); /** * clDDC_shop_information -- Shop function class * * this class contains the soap api functions * * @author Danny bevers * @since Thu Jan 10 11:55:00 CEST 2012 **/ class clDDC_shop_information { /** * retrieve_product_information -- Get product data * * Get product data with a product code * * @author Danny bevers * @since Thu Jan 10 11:55:00 CEST 2012 * @param string $sProduct_code * * @return string */ public function retrieve_product_information($sku) { global $oFramework; return $oFramework->xml_soap_get_product($sku); } /** * retrieve_cart_information -- Get cart data * * Get cart data with a product code with amount * * @author Danny bevers * @since Thu Jan 12 9:04:00 CEST 2012 * @param array $aProduct_collection[] * * @return string */ public function retrieve_cart_information($aProduct_collection) { global $oFramework; return $oFramework->xml_soap_get_cart_products($aProduct_collection); } } $server = new SoapServer('wsdl/soap_api.wsdl'); $server->setClass('clDDC_shop_information'); $server->handle(); ?> |
Wanneer ik de versie van mijn wsdl gebruikt werkt alles perfect alleen zodra ik nu de nieuwe gebruik van de tegenpartij die met ASP kan werken doet het niks meer en krijg ik de "Procedure 'retrieve_product_information' not present" melding.
De nieuwe wsdl die ik van de tegenpartij heb gekregen is hier te bekijken (http://pastebin.com/9WyJpTJb)
Ik ben ten einde raad wat er nu aan de hand is heb er nog een aantal mensen naar laten kijken maar tot op heden zonder resultaat.