[ic] A Very Tough Question aabout XML-Soap

Mike Heins mikeh@minivend.com
Mon, 2 Apr 2001 05:49:43 -0400


Quoting Young Family (ary@communicationfactory.com):
> Ok
> Here I am going for all the marbles with this question
> 
> My Scenario......
> I have my "Secure Server" that talks to Signio and my accounting software on
> a separate (NT) server. I am running a Microsoft BizTalk / XML Soap
> interface there.
> 
> Okay soooo... I do not want to have Interchange talk directly to Signio. I
> want my accounting server to do that, and I must invoke a Remote Procedure
> Call using XML-Soap, and then wait for an XML response and then parse that
> response with Expat. This will allow me to not only do Credit Card approvals
> through my current Credit Card Server, which logs all activity in one place,
> it allows me to post stuff to my accounting using crontab, etc.. The
> possibilities are endless, I can even auto-import stuff into my catalog,
> etc. I have all the Perl stuff, I am just trying to make it all fit
> together.
> 
> 1) So I must create a Global Subroutine in Perl, right?

Maybe. For credit-card approval in the current framework, yes, and
in the coming framework, yes as well. (The existing payment subs will
work just fine in that framework -- don't forget I pray to the god of
backward compatibility every time I make a change.)

> 
> 2) That Subroutine Must have a Perl Object that I must Reference , Right?
> 

That is certainly implementation-dependent.

> 3) And I call the Global Subroutine using embedded perl commands right?
> 
> If I create perl object called BizTalk, then I can reference it like this
> right?
> [perl]
>         $approved=$BizTalk->approvalstatus;
>         return $approved;
>     [/perl]
> 

No. Without AllowGlobal and [perl global=1], you can't use object-oriented
stuff in embedded Perl, as Safe will undoubtedly make it untenable. If
you know enough about Perl you might be able to figure it out somewhat,
but it is not realistic to do in most cases.

You sort of have the idea, but if you are going to use SOAP you will
want to try out the 4.7.1 version and use the Soap tag.

You might try this link to see what the Interchange SOAP stuff can do:

    http://larry.minivend.com/interchange/alpha/soap.html

The "Integrated Client Tag" will talk to a bizTalk server that does
SOAP and do what you want, I think.

This approach must be used for SOAP::Lite, as it is extremely object-oriented
and even the most basic operation requires instantiation of multiple objects.
It is not even remotely possible to use with Safe.

I can envision a call like this:

[calc]
	$approved = {[soap
                              uri="http://localhost/BizTalk/CCard"
                              proxy="https://some.other.machine/soap_proxy"
                              call="approvalstatus"
                              param.ccnum="[cgi mv_credit_card_number]"
                              param.ccexp="[cgi mv_credit_card_exp_all]"
                              param.amount="[total-cost noformat=1]"
                          ]};

[/calc]

Now fitting this into the framework of Interchange payments, I think
that writing a GlobalSub using SOAP::Lite directly along the lines
of globalsub/signio would be better.

-- 
Red Hat, Inc., 131 Willow Lane, Floor 2, Oxford, OH  45056
phone +1.513.523.7621 fax 7501 <mheins@redhat.com>

Any man who is under 30, and is not liberal, has not heart; and any man
who is over 30, and is not a conservative, has not brains.
 -- Winston Churchill