Via PHP API aanspreken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Martin?81
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:58

Martin?81

Honda CBR600RR 2004

Topicstarter
Op de volgende fictieve url 'draait' een API:
http://bedrijf.fictief.nl/auto/input.asmx

De input API gebruikt de volgende functie:
public int CreateInput(ref String Xml, out String ErrorStr)

Mijn XML string is in test.php gedefineerd als $xml.

Mijn XML output ziet er met print (of echo) goed uit. Hoe krijg ik die nu in die API? Mijn kennis met PHP schiet echt te kort helaas. Misschien kan iemand helpen? Of is er meer informatie nodig?

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Waarschijnlijk wil je gewoon de PHP SOAP api gebruiken om die webservice aan te spreken.

Acties:
  • 0 Henk 'm!

  • Martin?81
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:58

Martin?81

Honda CBR600RR 2004

Topicstarter
Dat lijkt inderdaad de manier om die webservice aan te spreken, maar ik kom nog niet verder met de code hoe het in PHP er uit zo moeten zien.

$c = new soapclient('http://bedrijf.fictief.nl/auto/input.asmx');
$c->send(public int CreateInput(ref $xml, out String ErrorStr));

Bijvoorbeeld? Maar hoe krijg ik mij informatie er in?

[ Voor 48% gewijzigd door Martin?81 op 29-06-2009 21:44 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Met bijvoorbeeld
PHP:
1
2
3
4
5
6
$c = new soapclient('http://bedrijf.fictief.nl/auto/input.asmx');
$parameters = array(
   'variabele1' => 'waarde1',
   'variabele2' => 'waarde2'
);
$response = $c-> CreateInput($parameters);


De SoapClient genereert aan de hand van de WSDL en jouw parameter-array het XML bericht, daar heb je zelf geen omkijken naar.

Zie http://www.php.net/SoapClient

@hieronder
Dan vrees ik dat je in de toekomst nog een heel hoop te wachten staat. ;)


Begin anders eens met te kijken welke functies je kunt aanroepen;
PHP:
1
2
3
4
5
$c = new soapclient('http://bedrijf.fictief.nl/auto/input.asmx'); 
$functions = $c->__getFunctions();
echo '<pre>functions: ';
var_dump($functions);
echo '</pre><br>';

[ Voor 76% gewijzigd door frickY op 29-06-2009 21:52 ]


Acties:
  • 0 Henk 'm!

  • Martin?81
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:58

Martin?81

Honda CBR600RR 2004

Topicstarter
frickY schreef op maandag 29 juni 2009 @ 21:43:
Met bijvoorbeeld
PHP:
1
2
3
4
5
6
$c = new soapclient('http://bedrijf.fictief.nl/auto/input.asmx');
$parameters = array(
   'variabele1' => 'waarde1',
   'variabele2' => 'waarde2'
);
$response = $c->functieNaam($parameters);


Zie http://www.php.net/SoapClient
Ik ben druk bezig, m'n hersens te kraken... Dit is heel wat anders dan simpel PHP'tje schrijven!

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het voorbeeldje wat frickY geeft is erg simpele PHP. Er word gewoon een object aangemaakt en daar word een functie op aangeroepen.

Wat er achter de schermen gebeurd is misschien wat ingewikkelder, maar dat haalt hier niet uit.

Als je er echt zo weinig van weet is het misschien slim om eens een boek te kopen over PHP en Webservices ( Want dat is wat je probeert aan te roepen ).

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Woy schreef op maandag 29 juni 2009 @ 22:17:
Het voorbeeldje wat frickY geeft is erg simpele PHP. Er word gewoon een object aangemaakt en daar word een functie op aangeroepen.
In mijn ervaring is het niet altijd zo simpel - bepaalde Microsoft SOAP servers werken niet helemaal naadloos met wat de documentatie van PHP's SoapClient class voorschrijft, zie ook hier. Zelf ooit nog eens een paar uur flink mee lopen stoeien voor ik daar achter was :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Martin?81
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:58

Martin?81

Honda CBR600RR 2004

Topicstarter
frickY schreef op maandag 29 juni 2009 @ 21:43:
Met bijvoorbeeld
PHP:
1
2
3
4
5
6
$c = new soapclient('http://bedrijf.fictief.nl/auto/input.asmx');
$parameters = array(
   'variabele1' => 'waarde1',
   'variabele2' => 'waarde2'
);
$response = $c-> CreateInput($parameters);


De SoapClient genereert aan de hand van de WSDL en jouw parameter-array het XML bericht, daar heb je zelf geen omkijken naar.

Zie http://www.php.net/SoapClient

@hieronder
Dan vrees ik dat je in de toekomst nog een heel hoop te wachten staat. ;)


Begin anders eens met te kijken welke functies je kunt aanroepen;
PHP:
1
2
3
4
5
$c = new soapclient('http://bedrijf.fictief.nl/auto/input.asmx'); 
$functions = $c->__getFunctions();
echo '<pre>functions: ';
var_dump($functions);
echo '</pre><br>';
Bedankt voor je moed inspreken. :>

De functies opvragen lukt niet, met dit als resultaat:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://bedrijf.fictief.nl/auto/input.asmx' in /storage/mijndomein/users/999999/public/sites/www.fictiefeigendomein.nl/func.php:2 Stack trace: #0 /storage/mijndomein/users/999999/public/sites/www.fictiefeigendomein.nl/func.php(2): SoapClient->SoapClient('http://bedrijf...') #1 {main} thrown in /storage/mijndomein/users/999999/public/sites/www.fictiefeigendomein.nl/func.php on line 2

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 12:18
martinweb.nl schreef op maandag 29 juni 2009 @ 23:28:
[...]


Bedankt voor je moed inspreken. :>

De functies opvragen lukt niet, met dit als resultaat:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://bedrijf.fictief.nl/auto/input.asmx' in /storage/mijndomein/users/999999/public/sites/www.fictiefeigendomein.nl/func.php:2 Stack trace: #0 /storage/mijndomein/users/999999/public/sites/www.fictiefeigendomein.nl/func.php(2): SoapClient->SoapClient('http://bedrijf...') #1 {main} thrown in /storage/mijndomein/users/999999/public/sites/www.fictiefeigendomein.nl/func.php on line 2
Eh, het is een fictieve URL?! Of heb je de foutmelding zitten bewerken? Hoe dan ook, zonder verder iets van SOAP te weten, maar gewoon de foutmelding lezend, zou ik zeggen dat de URL niet klopt.

Acties:
  • 0 Henk 'm!

  • Martin?81
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:58

Martin?81

Honda CBR600RR 2004

Topicstarter
Ik heb de foutmelding inderdaad zitten bewerken, anders kun je met die gegevens wellicht wat leuks doen... :P De URL klopt, dat heb ik dubbel gecontroleerd. Ik dacht daar inderdaad ook aan.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Waarschijnlijk is de url naar je WSDL iets als; http://bedrijf.fictief.nl/auto/input.asmx?WSDL

Open de url anders eens in je browser. Bij een beetje netjes opgezette Webservice vind je dan een overzicht van de functies, en de URL naar de bijbehorende WSDL. Dat is een XML bestand welke de Webservice omschrijft, en hetgeen je SoapClient nodig heeft.

[ Voor 12% gewijzigd door frickY op 30-06-2009 00:27 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
FragFrog schreef op maandag 29 juni 2009 @ 22:57:
[...]

In mijn ervaring is het niet altijd zo simpel - bepaalde Microsoft SOAP servers werken niet helemaal naadloos met wat de documentatie van PHP's SoapClient class voorschrijft, zie ook hier. Zelf ooit nog eens een paar uur flink mee lopen stoeien voor ik daar achter was :)
Ik zeg ook zeker niet dat web-services makkelijk zijn! Ik geef alleen aan dat als dat stukje code problemen oplevert het slim is om eerst wat meer PHP ervaring op te doen.

Zowiezo is het belangrijk om eerst de juiste url te hebben. Test anders bijvoorbeeld hier: http://www.soapclient.com/soaptest.html eens of de webservice wel goed werkt ( Ik ken het tooltje niet, maar hij kwam boven in google uit ).

[ Voor 16% gewijzigd door Woy op 30-06-2009 09:13 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Martin?81
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:58

Martin?81

Honda CBR600RR 2004

Topicstarter
Ik heb wat hulp gehad, maar ook die wisten het niet op te lossen. Momenteel krijg ik 'Method Not Allowed' terug. Ik wil alleen weten welke methode niet...

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20-09 20:56

Creepy

Tactical Espionage Splatterer

Dan ga je debuggen? Gewoon loggen wat je aan het doen bent en wanneer het mis gaat. Lijkt me vrij eenvoudig eigenlijk?

No offence maaruh, het lijkt er u op dat we je bij elke stap aan het handje moeten houden. Dat is (uiteraard) hier niet de bedoeling. Dus als je iets post wat niet lukt geef dan veel meer info dan wat je nu geeft. Dus welke code voer je uit (aub een specifek stuke testcode!) , welke call gaat mis, wat heb je zelf al geprobeerd om het op te lossen.

Het lijkt erop dat het ontbreken van kennis over webservices/soap je nu opbreekt. Met wat tutorials en uitzoek werk is deze kennis prima zelf te vergaren. Het lijkt me dan ook het beste dat je daar eerst mee begint, zodat je waarschijnlijk je probleem zelf kan oplossen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Martin?81
  • Registratie: Februari 2002
  • Laatst online: 20-09 23:58

Martin?81

Honda CBR600RR 2004

Topicstarter
Kennis mis ik zeker. Daar heb ik niets over gezegd. En bij elke stap aan het handje houden lijkt zo, maar jij hebt geen idee welke stappen ik zonder 'jullie' al gezet heb. Maar dit is zeker een soort crash course PHP zoals je eigenlijk niet moet beginnen, maar het is even niet anders hier.

Maaruh, no offence taken.

Laatste melding terug:
Server did not recognize the value of HTTP Header SOAPAction: http://tempuri.org#CreateInput.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
martinweb.nl schreef op dinsdag 30 juni 2009 @ 12:47:
En bij elke stap aan het handje houden lijkt zo, maar jij hebt geen idee welke stappen ik zonder 'jullie' al gezet heb.
En dat is precies een van de problemen, als jij vermeld wat je allemaal wel geprobeerd hebt, dan hoeven wij dat niet meer als suggestie te geven.
martinweb.nl schreef op dinsdag 30 juni 2009 @ 12:47:
Laatste melding terug:
Server did not recognize the value of HTTP Header SOAPAction: http://tempuri.org#CreateInput.
Hier is ook genoeg informatie over te vinden in google: [google=Server did not recognize the value of HTTP Header SOAPAction]. Wat wil er niet lukken met de suggesties die je daar vind?

Heb je bijvoorbeeld wel een test-client die wel werkt? Dan zou je de XML die over de lijn gaat kunnen vergelijken met hetgeen er bij jou gebeurd.

[ Voor 42% gewijzigd door Woy op 30-06-2009 12:54 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
martinweb.nl schreef op dinsdag 30 juni 2009 @ 12:00:
Ik heb wat hulp gehad, maar ook die wisten het niet op te lossen. Momenteel krijg ik 'Method Not Allowed' terug. Ik wil alleen weten welke methode niet...
Dat zal slaan op de HTTP method.
Waarschijnlijk doe je een GET request, en zijn alleen POST requests toegestaan. Of misschien dien je eerst in te loggen voordat je bent toegestaan een andere functie aan te roepen.
martinweb.nl schreef op dinsdag 30 juni 2009 @ 12:47:
Laatste melding terug:
Server did not recognize the value of HTTP Header SOAPAction: http://tempuri.org#CreateInput.
Je called een method CreateInput, maar die bestaat niet


Zie ook vooral mijn vorige post.

[ Voor 6% gewijzigd door frickY op 30-06-2009 18:51 ]


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Je hebt ook losse tools om soap servers te testen, volgens mij heeft Eclipse er een plugin voor, welliswaar helpt dat niet met je php code, maar ik vond het altijd wel prettig om te testen.
Pagina: 1