[ic] SOAP in a payment module - help requested

Josh Lavin josh at perusion.com
Fri Dec 20 15:55:14 UTC 2013

Quoting Stefan Hornburg (Racke) (racke at linuxia.de):
> On 12/20/2013 02:45 PM, Glenn McCalley wrote:
> > Greetings,
> > 
> > The client for one of our stores requires us to use a "non-standard" payment service
> > that provides them with some reporting on sales.  We have processed these payments
> > using an IC payment module hacked from the authorizenet module for several years.
> > 
> > Now, the payment processor has rewritten their system under Windows and is
> > requiring a SOAP / XML type transaction.  (-I- think somebody must have gone
> > to a Micro$oft road show...).
> > 
> > My usual approach is to write a program run from the command line with dummy
> > data just to get a transaction to process.  When that succeeds, integrate the core
> > code from that program into an IC Payment module and there we are.  This time
> > I just can't get the durn thing to work AT ALL - can't even get a response from
> > the server like "invalid card".  All I can get is "Object reference not set to an
> > instance of an object".  Having not worked with SOAP, and finding Google entries
> > for that message equally obtuse I am floundering and out of time.
> > 
> > SO!  If there is someone out there who knows of a working SOAP payment module
> > I can hack up or wwho has relevant experience who would like to take a crack at this
> > compensation is available.
> > 
> We developed this year a payment module for Ipayment, which is based on XML::Compile::SOAP
> (better suited for SOAP than old crufty SOAP::Lite).

There are currently two Interchange payment modules that use SOAP (via
SOAP::Lite), CyberSource and PaypalExpress.

I am also developing a payment module using SOAP/XML, but found both of
those examples to be pretty complicated.

Here is a snippet from my module in-progress, which is the SOAP call and
response, simplified for me... 

    my $host = charge_param('test') ? 'staging.merchantware.net' : 'ps1.merchantware.net';

	## the query hash is the stuff you are sending.
    my @parms;
    while (my ($k,$v) = each %query) {
        push @parms, SOAP::Data->name($k => $v);
    my $soap = SOAP::Lite->new( proxy => "https://$host/Merchantware/ws/RetailTransaction/v4/Credit.asmx" );
    $soap->on_action( sub { join '', @_ } );  # make it ok for .NET
    my $reply = $soap->call($method, @parms);

#::logDebug("mw result: $reply");
#::logDebug("mw: ".  uneval($reply) );

    my $reply_hash;
    if ($reply->fault) {
		## not handled yet
    else {
        $reply_hash = $reply->valueof('Body/' . $method . 'Response/' .  $method . 'Result');

Maybe that will help you along. You can find support from many
consultants, including Perusion at http://www.perusion.com.

Josh Lavin
Perusion -- Expert Interchange Consulting    http://www.perusion.com/
... ask me about job opportunities ...

More information about the interchange-users mailing list