Avatar billede dennism Nybegynder
18. september 2007 - 15:32 Der er 8 kommentarer og
1 løsning

PHP: SOAP til e-conomic API

Jeg sidder i PHP og forsøger at lave et script til at kommunikere med e-conomics API:
http://www.e-conomic.dk/regnskabsprogram/moduler/api.asp

Jeg har lavet denne lille PHP kode:
$client = new SoapClient("https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?wsdl");
$client->__soapCall("connect", array("aftalenr", "brugernavn", "password"));

Når jeg kører denne kode, får jeg denne fejl:
Fatal error: Uncaught SoapFault exception: [soap:Client] Economic.Api.Exceptions.SchemaException(E00500): The element 'Connect' in namespace 'http://e-conomic.com' has incomplete content. List of possible elements expected: 'agreementNumber' in namespace 'http://e-conomic.com'. {id=8663001} in /media/data/www/soap/test.php:3 Stack trace: #0 /media/data/www/soap/test.php(3): SoapClient->__soapCall('connect', Array) #1 {main} thrown in /media/data/www/soap/test.php on line 3

Nogen der ved, hvad denne fejl skyldes?

I deres dokumentation anbefaler de at man kan bruget dette SOAP:
http://pear.php.net/package/SOAP
Hvad er forskellen på dette og det der er integreret i PHP?
Avatar billede olebole Juniormester
19. september 2007 - 00:43 #1
<ole>

Mon fejlen er, at du har oversat element-navnene? Der forventes 'agreementNumber' ... prøv det i stedet for 'aftalenr'(?)

/mvh
</bole>
Avatar billede arne_v Ekspert
19. september 2007 - 04:55 #2
Jeg ville kalde det som:

$sc = new SoapClient("https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?wsdl");
$res = $sc->Connect(123456, "brugernavn", "password");

men det giver præcis samme fejl.

Jeg gætter på at det har et elller andet med namespace at gøre.
Avatar billede arne_v Ekspert
19. september 2007 - 05:16 #3
Med PEAR SOAP:

require_once 'SOAP/Client.php';
$wsdl = new SOAP_WSDL("https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?wsdl");
$client = $wsdl->getProxy();
$res = $client->Connect(123456, "brugernavn", "password");

får jeg dog også en fejl, som ikke rigtigt kan bestemmes nærmere.
Avatar billede dennism Nybegynder
20. september 2007 - 09:14 #4
Jeg har fået lavet noget, men det virker ikke helt:

<?
//connection to SOAP-server
$client = new SoapClient("https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?wsdl");
$data = array("agreementNumber" => 123456, "userName" => "myUsername", "password" => "myPassword");
$client->Connect($data);

//finding debitor group handle for #1
$data = array("number" => 1);
$debtorGroupHandle = $client->DebtorGroup_FindByNumber($data);

//creating debitor
$data = array("number" => "web0001", "debtorGroupHandle" => $debtorGroupHandle, "name" => "Dennis Madsen", "vatZone" => "HomeCountry");
$client->Debtor_Create($data);

//disconnecting
$client->Disconnect();
?>

Når jeg kører dette, får jeg denne fejl:
Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'Number' property in /media/data/www/soap/test.php:13 Stack trace: #0 [internal function]: SoapClient->__call('Debtor_Create', Array) #1 /media/data/www/soap/test.php(13): SoapClient->Debtor_Create(Array) #2 {main} thrown in /media/data/www/soap/test.php on line 13
Avatar billede arne_v Ekspert
20. september 2007 - 15:06 #5
Hvad med Number fremfor number i dit array ?
Avatar billede dennism Nybegynder
20. september 2007 - 16:26 #6
i WSDL står den angivet som number :(
Avatar billede dennism Nybegynder
20. september 2007 - 16:52 #7
Problemet er også, at:

$data = array("number" => 1);
$debtorGroupHandle = $client->DebtorGroup_FindByNumber($data);

echo $client->__getLastResponse();

ikke returerer noget. Der burde være det XML-dokument som den får tilbage fra SOAP ved FindByNumber :(
Avatar billede dennism Nybegynder
08. november 2007 - 21:01 #8
Jeg fik det ikke til at virke. Lukker her.
Avatar billede jawico Nybegynder
15. september 2009 - 23:24 #9
dennis - e-conomic API'et virker ikke på den måde du tror.

filen med wsdl efter spørgsmålsregnet er definitionerne af classes og funktioner og skal kun importeres én gang med et importprogram som taher hensyn til de reserverede ord der i det programmeringssprog man bruger - i dit tilfælde PHP og der er det importprogrammet Apache Axis 1.4 man bruger

https://www.e-conomic.com/secure/api1/EconomicWebService.asmx?wsdl

Jeg har prøvet at importere filen med Delphi's WSDL Impoer Wizard, som genererer en pascal unit med file extension .pas. Det så meningen at denne unit skal angives i en uses deklaration. Men jeg kan dog ikke kompilere kode med denne unit uden fejl. Og helst ville jeg bruge php og ikke Delphi pascal, som jeg ellers bedst kan lide men aldrig kunnet få SOAP til at virke på (Delphi7).

Det virker imidlertid meget fint med C# på Visual Studio 2008 Professional. Så jeg må prøve noget reverse engineering og få det til at virke i PHP. Men vejen går over Axix eller PEAR SOAP som jeg ikke er så stiv i.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester