Avatar billede 4u2x Nybegynder
03. juni 2007 - 12:35 Der er 13 kommentarer

Method SOAP_Client::__call() must take exactly 2 arguments

Håber der er en som kan hjælpe mig af med det ovenstående problem.

Har antegnet hvor linje 313 er som i kan se i nedenstående kode in .. line 313:


function __call($method, $args, &$return_value)
{
    if (!$this->wsdl) return FALSE;
    #$return_value = call_user_func_array(array(&$this, 'my_' . $method), $args);
    $this->wsdl->matchMethod($method);
    $return_value = $this->call($method, $args);
    return TRUE;
}    <-- linje 313
Avatar billede windcape Praktikant
03. juni 2007 - 15:55 #1
Hvilken del af fejl meddelsen kan du ikke forstå ?

__call er en magisk metode, og må som fejlen siger, kun have 2 argumenter.
Avatar billede 4u2x Nybegynder
03. juni 2007 - 18:56 #2
har fundet ud at det er fordi at koden er bygget til php 4, og at PHP 5 kræver en nyere kode.

Skal sende data via WSDL, nogen som kender til at script hvor jeg kan gøre det med?
Avatar billede windcape Praktikant
03. juni 2007 - 19:04 #3
Det er PHP5 kode du har der.

Ved du overhovedet hvad SOAP/WSDL er ?
Avatar billede 4u2x Nybegynder
03. juni 2007 - 19:58 #4
Nej desværre ikke. Skal integrere en kode PBS som sender data via WSDL og de sendte mig et script fra en tredjepart. Fejlen som jeg har fremvist er den kode jeg får efter det indtastede.

Her er link til tredjepartens script: http://aspn.activestate.com/ASPN/WebServices/SWSAPI/phptut

Her er den kode som bruger scriptet (PBS's egen kode):

$PerlPackageDatabase = WebService::ServiceProxy("https://pay.pbs-international.dk/pipay/services/PBSService?WSDL");
    $res = $PerlPackageDatabase->sendCapture("<<data1>>", "<<data2>>", "<<data3>>", "<<data4>>");
    print_r($res);

Værdsætter enhver hjælp :)
Avatar billede windcape Praktikant
03. juni 2007 - 20:11 #5
Lær hvordan webservices , og SOAP protokollen virker først.
Fordi det er piece-of-cake at arbejde med webservices i PHP5.

Prøv dette her (husk at din server skal have OpenSSL installeret).
<?php

$client = new SoapClient(
    'https://pay.pbs-international.dk/pipay/services/PBSService?WSDL'
);

echo '<pre>';
print_r($client->__getFunctions());
echo '</pre>';

?>
Avatar billede windcape Praktikant
03. juni 2007 - 20:13 #6
Og det skulle gerne give dette resultat:

Array
(
    [0] => ping ping()
    [1] => send_authorization sendAuthorization(string $merchantID, string $serverFlag, string $accountNumber, string $cardVerificationCode, string $amount, string $currencyCode, string $expirationDate, string $acquirerReferenceData, string $functionCode, string $reasonCode, string $pointOfServiceDataCode, string $processingCode, boolean $recurring)
    [2] => send_authorization sendAuthorizationPrepared(string $merchantID, string $serverFlag, string $accountNumber, string $cardVerificationCode, string $amount, string $currencyCode, string $expirationDate, string $acquirerReferenceData, string $functionCode, string $reasonCode, string $pointOfServiceDataCode, string $processingCode, boolean $prepared, boolean $recurring)
    [3] => send_authorization sendReauthorization(string $merchantID, string $amount, string $acquirerReferenceData)
    [4] => send_authorization sendReauthorizationPrepared(string $merchantID, string $acquirerReferenceData)
    [5] => send_authorization sendTrack2Authorization(string $merchantid, string $serverFlag, string $accountNumber, string $amount, string $currencyCode, string $expirationDate, string $acquirerReferenceData, string $track2data, string $functionCode, string $reasonCode, string $processingCode, boolean $recurring)
    [6] => send_capture sendCapture(string $merchantID, string $orderid, string $amount, string $functionCode)
    [7] => send_authorization sendRecurringAuthorization(string $merchantID, string $subscriptionid, string $orderid, string $amount, string $functionCode, string $reasonCode, string $processingCode)
    [8] => send_capture sendRecurringCapture(string $merchantID, string $orderid, string $amount, string $functionCode)
    [9] => send_capturecredit sendRecurringCaptureCredit(string $merchantID, string $password, string $orderid, string $amount)
    [10] => send_capturecredit sendCaptureCredit(string $merchantID, string $password, string $orderid, string $amount)
    [11] => send_reversaladvice sendReversalAdvice(string $merchantID, string $password, string $orderid, string $messageReasonCode)
    [12] => find_order findOrder(string $merchantID, string $password, string $orderid)
    [13] => ArrayOf_tns1_find_order findOrders(string $merchantID, string $password, string $serverFlag, dateTime $createdAfter, dateTime $createdBefore, string $states)
    [14] => contact_support contactSupport(string $merchantID, string $subject, string $message)
)
Avatar billede windcape Praktikant
03. juni 2007 - 20:16 #7
Eksempel på brug:

<?php

// create client
$client = new SoapClient(
    'https://pay.pbs-international.dk/pipay/services/PBSService?WSDL'
);

// call sendAuthorization
$client->sendAuthorization(
    'merchantID',
    'serverFlag',
    'accountNumber',
    'cardVerificationCode',
    'amount',
    'currencyCode',
    'expirationDate',
    'acquirerReferenceData',
    'functionCode',
    'reasonCode',
    'pointOfServiceDataCode',
    'processingCode',
    'recurring',
);

?>
Avatar billede windcape Praktikant
03. juni 2007 - 20:19 #8
Og det jeg foreslår er at jeres server enabler OpenSSL og SOAP extensions , istedet for at bruge noget gammel PHP4 kode.
Avatar billede 4u2x Nybegynder
03. juni 2007 - 20:23 #9
ligger hos Wannafind som udbyder, og der SOAP extension ikke enabled. Så kan ikke engang ændre noget på serveren.
Avatar billede windcape Praktikant
03. juni 2007 - 20:26 #10
lol ja.. så kan jeg godt se ideen i at bruge et lib, da det er komplekst at skrive HTTP QUERIES selv.

Jeg ville dog nok spørge Wannafind om de gider enable det, før jeg ville fortsætte.
Ellers ønsker jeg dig held og lykke med at omskrive det script til php5 :p
Avatar billede 4u2x Nybegynder
04. juni 2007 - 12:22 #11
en der kan få  data1 data2 data3 og data4 ind i den nederste kode? Har fundet et soap-lib, men ikk rigtig hvordan jeg får lavet en kode til det :/

$PerlPackageDatabase = WebService::ServiceProxy("https://pay.pbs-international.dk/pipay/services/PBSService?WSDL");
    $res = $PerlPackageDatabase->sendCapture("<<data1>>", "<<data2>>", "<<data3>>", "<<data4>>");
    print_r($res);



$myService = new myService("http://example.org","example webservice description",array('uri' => 'http://example.org','encoding'=>SOAP_ENCODED ));
$myService->handle();
Avatar billede windcape Praktikant
04. juni 2007 - 16:09 #12
$myService = new myService("http://example.org","example webservice description",array('uri' => 'http://example.org','encoding'=>SOAP_ENCODED ));
$myService->handle();

... er ihvertfald forkert, da det emulere en server.

Hvad med at bruge http://pear.php.net/package/SOAP istedet?
Avatar billede 4u2x Nybegynder
06. juli 2007 - 15:17 #13
windscape, lig et svar, så jeg kan acceptere :)
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