[Date Prev][Date Next][Thread Prev][Thread Next][Interchange by date
][Interchange by thread
]
[ic] Request for more info and a partial solution: custom payments, GlobalSub
The other day I posted a request r.e. GlobalSub / custom payment
processing
etc. I need to communicate with several systems via TCP/IP and other
systems to process transactions from Interchange.
Thanks all for the info I received. First a few questions -
1) does anyone know of any place I can find some comprehensive info on
how Interchange interacts with validation and processing systems?
2) has anyone written GlobalSub type modules in C (presumably with
a Perl wrapper) that do anything they would be willing to share -
even an example?
3) any info on life with Interchange (other than the supplied docs
which read kind of like stereo instructions) would be really,
really appreciated.
Now for what I found - I made the following changes to the files
indicated
below, and wrote the GlobalSub contained herein (with bits and pieces
I gleaned from code I received, found, etc.) - works like a charm.
It communicates with a TCP server I wrote that accepts connections on
port 1234 - doesn't do anything at this point but gather and dump info
passed to it by the Perl routine.
Please bear in mind that I'm using the RPM install; your files may not
be in the exact same locations as mine ...
Assuming the name of the catalog-in-question is "mycatalog":
In /usr/lib/interchange/eg/globalsub/testsub:
GlobalSub <<EOS
use strict;
use Vend::Util;
sub test {
::logDebug("Entering test GlobalSub...");
my %ic_result;
$ic_result{MStatus}="success";
$ic_result{'order-id'}=1; # must be !null
::logDebug("Exiting test GlobalSub.");
return (%ic_result);
}
EOS
To communicate with a remote, I added
use Socket;
at the head of the file; then:
# ---------------
# Spill our guts via TCP ...
my @S;
socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
my $addr = sockaddr_in(1234,inet_aton('some.remote.host'));
connect(S,$addr);
print S "<SOT>\n",
"CCNUM ",$actual{mv_credit_card_number},"\n",
"FNAME ",$actual{b_fname},"\n",
"LNAME ",$actual{b_lname},"\n",
"ADDR ",$actual{address},"\n",
"CITY ",$actual{b_city},"\n",
"STATE ",$actual{b_state},"\n",
"ZIPPC ",$actual{zip},"\n",
"PMTMD ",$actual{mv_payment_mode},"\n",
"AMT ",$amount,"\n",
"EXPDT ",$exp,"\n",
"ORDNM ",$actual{mv_order_number},"\n",
"PSKEY ",$secret,"\n",
"USRID ",$user,"\n",
"<EOT>\n\007";
close(S);
The "\007" char is the end-of-message indicator. Like I
said earlier, it's crude, but it seems to show that what
I need to do can be done ...
In /var/lib/interchange/mycatalog/etc/profiles.order
(the ... and line are here so it should be easy to
figure out where in the file I added this)
...
&set = mv_payment Incomplete
# CHANGED
# call /usr/lib/interchange/eg/globalsub/testsub
# function == test
&charge=custom test
# /CHANGED
[if value fax_order == 1]
&set = mv_payment Check or Money Order (will call)
...
In /etc/interchange.cfg:
#Uncomment to log to debug file /tmp/icdebug
# CHANGE make it so...
Variable DEBUG 1
# /CHANGE
and, at the end of the file (after everything else has
been set, included, etc.):
AllowGlobal mycatalog
#include /usr/lib/interchange/eg/globalsub/testsub
_______________________________________________
Interchange-users mailing list
Interchange-users@lists.akopia.com
http://lists.akopia.com/mailman/listinfo/interchange-users