Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^3: Trouble getting started with SOAP (SOAP::Lite, SOAP::WSDL), translating from PHP to Perl

by tangent (Deacon)
on Feb 20, 2012 at 20:14 UTC ( #955137=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Trouble getting started with SOAP (SOAP::Lite, SOAP::WSDL), translating from PHP to Perl
in thread Trouble getting started with SOAP (SOAP::Lite, SOAP::WSDL), translating from PHP to Perl

Can you show more of the PHP code (ugh) - does it reference those classes anywhere else? I'm assuming you can't acquire the specification for the 'https://the.soap.url/api/'?


Comment on Re^3: Trouble getting started with SOAP (SOAP::Lite, SOAP::WSDL), translating from PHP to Perl
Re^4: Trouble getting started with SOAP (SOAP::Lite, SOAP::WSDL), translating from PHP to Perl
by Anonymous Monk on Feb 20, 2012 at 20:40 UTC

    Well, the class definitions and initializations are trivially simple (brain dead relative to C++):

    class CreditCardType { var $cc_id = null; var $cc_type = null; var $cc_currency = null; var $cc_holder_name = null; var $cc_number = null; var $cc_month = null; var $cc_year = null; var $cc_cvv = null; var $cc_default = null; var $cc_status = null; var $cc_status_infos = null; var $cc_creation = null; var $cc_lastupdate = null; } echo "Processing Credit Card Transaction\n"; $CreditCard = new CreditCardType(); $CreditCard->cc_type = "VISA"; // mandatory $CreditCard->cc_holder_name = "DEMO USER"; // mandatory $CreditCard->cc_number = "4444333322221111"; // mandatory $CreditCard->cc_cvv = "123"; // mandatory $CreditCard->cc_month = "12"; // mandatory $CreditCard->cc_year = "2014"; // mandatory

    The call to SOAPClient is, again:

    $soap = new SoapClient("https://merchant.paytoo.info/api/merchant?wsdl +", array("classmap"=>array("AccountType"=>"AccountType", "CreditCardT +ype"=>"PaytooCreditCardType")));

    And then it is used (with instances of other classes) like:

    $response = $soap->CreditCardSingleTransaction($CreditCard, $Customer, + $amount, $currency, $ref_id, $description, $addinfo);

    I do have the full wsdl file, but I don't know that I can post any of it since I did not write any of it. For that matter, it would be handy to locate a decent WSDL editor (my favourite eitors don't provide any supports for it beyond what any braindead Notepad clone would do).

    I am so frustrated with this, I am sorely tempted to make a PHP file template that my Perl CGI programs can edit to have the right data, and then ran that using php and parse the output that results in order to get the result. :-(

      AFAIK, the parameters passed in a WSDL tranaction are in XML format, so I think the PHP classes at some point serialize to XML, though that is not obvious from the PHP code you posted. From what I could make out of SOAP::WSDL::Manual - Accessing WSDL based web services, you will need to create a class (or classes) which is a subclass of SOAP::WSDL::XSD::Typelib::ComplexType and then use that in much the same way as the PHP call does. The information you need to define your classes will be in the wsdl file somewhere, though you might be able to just adapt what's there in the PHP.

      Update - Looking at the docs again, it gives this example:
      my $soap = SOAP::WSDL->new( wsdl => 'file://bla.wsdl', ); my $result = $soap->call('MyMethod', %data);
      It says "Your data is serialized according to the rules in the WSDL" so it looks like you could feed in your wsdl file and then see what it expects %data to be. And do hang around for a bit, I'm sure someone else here can s/:-(/:-)/

        Thanks Tangent

        Running "perl wsdl2perl.pl -b base_dir URL" on the wsdl file I'd saved worked fine, but trying it on the server, using the real URL, failed (with a server error - though it didn't specify what the error is).

        I suspect that the second argument in the PHP call is the equivalent of a typemap (given the way it is constructed), and the page you pointed to says a few things about a possible need to provide a typemap, but not how to make it. Moreover, either it doesn't say, of I missed, how you provide the typemap in a call to function new when creating a new SOAP object. Can 'wsdl2perl.pl' be used to create the typemap from the wsdl file? If so, how? And then, when you have it, how do you use the typemap produced when you make a new SOAP instance?

        Thanks

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://955137]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (3)
As of 2014-08-31 04:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls